From 5ac5c25c299b3c1d390c68c3d04ae979e787def0 Mon Sep 17 00:00:00 2001 From: Sam Anthony Date: Wed, 30 Apr 2025 11:37:49 -0400 Subject: canvas widget --- renderer.h | 2 ++ widget.c | 17 +++++++++++++++++ widget.h | 8 ++++++++ 3 files changed, 27 insertions(+) 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); -- cgit v1.2.3