aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSam Anthony <sam@samanthony.xyz>2025-04-30 11:37:49 -0400
committerSam Anthony <sam@samanthony.xyz>2025-04-30 11:37:49 -0400
commit5ac5c25c299b3c1d390c68c3d04ae979e787def0 (patch)
treebf0a222e5075be9ead50c05f942768b484435572
parent550dee49514fe3528c43541f062c1ae5590313ae (diff)
downloadvolute-5ac5c25c299b3c1d390c68c3d04ae979e787def0.zip
canvas widget
-rw-r--r--renderer.h2
-rw-r--r--widget.c17
-rw-r--r--widget.h8
3 files changed, 27 insertions, 0 deletions
diff --git a/renderer.h b/renderer.h
index 84651f9..9bdbfa5 100644
--- a/renderer.h
+++ b/renderer.h
@@ -3,9 +3,11 @@ void r_free(void);
void r_input(mu_Context *ctx);
void r_render(mu_Context *ctx);
void r_get_window_size(int *w, int *h);
+
int r_add_icon(const char *path);
void r_remove_icon(int);
void r_get_icon_size(int id, int *w, int *h);
+
int r_add_canvas(const char *bg_img_path);
void r_remove_canvas(int id);
int r_canvas_draw_circle(int id, int x, int y, int r, mu_Color color);
diff --git a/widget.c b/widget.c
index 721055b..8f864c3 100644
--- a/widget.c
+++ b/widget.c
@@ -333,3 +333,20 @@ update_active(mu_Context *ctx, mu_Id id, mu_Rect r, int *active) {
mu_update_control(ctx, id, r, 0);
*active ^= (ctx->mouse_pressed == MU_MOUSE_LEFT && ctx->focus == id);
}
+
+/* Create a canvas with the background loaded from an image file. Returns non-zero on error. */
+int
+w_init_canvas(w_Canvas *c, const char *bg_img_path) {
+ c->id = r_add_canvas(bg_img_path);
+ if (c->id < 0) {
+ weprintf("failed to create canvas widget");
+ return 1;
+ }
+ return 0;
+}
+
+void
+w_free_canvas(w_Canvas *c) {
+ r_remove_canvas(c->id);
+ c->id = -1;
+}
diff --git a/widget.h b/widget.h
index ab30f7a..e9ee3d5 100644
--- a/widget.h
+++ b/widget.h
@@ -74,3 +74,11 @@ void w_init_image(w_Image *img);
void w_free_image(w_Image *img);
int w_set_image(w_Image *img, const char *path);
void w_image(mu_Context *ctx, w_Image *img);
+
+
+typedef struct {
+ int id; /* renderer canvas id. */
+} w_Canvas;
+
+int w_init_canvas(w_Canvas *c, const char *bg_img_path);
+void w_free_canvas(w_Canvas *c);