diff options
Diffstat (limited to 'src/mgui/button.c')
-rw-r--r-- | src/mgui/button.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/src/mgui/button.c b/src/mgui/button.c index 02070c3..00db361 100644 --- a/src/mgui/button.c +++ b/src/mgui/button.c @@ -7,6 +7,10 @@ #include <string.h> #include <assert.h> +static int min_int(int a, int b) { + return a <= b ? a : b; +} + mgui_button* mgui_button_create(const char *str, size_t size, unsigned char character_size) { mgui_button *button = mgui_alloc(sizeof(mgui_button)); mgui_widget_init(&button->widget, MGUI_WIDGET_BUTTON); @@ -45,14 +49,12 @@ void mgui_button_set_position(mgui_button *self, mgl_vec2i position) { }); } -static int max_int(int a, int b) { - return a >= b ? a : b; -} - -void mgui_button_set_width(mgui_button *self, int width) { +void mgui_button_calculate_size(mgui_button *self, mgl_vec2i max_size) { const mgl_vec2f text_bounds = mgl_text_get_bounds(&self->text); - self->background.size.x = max_int(text_bounds.x, width); + const mgl_vec2i text_bounds_int = (mgl_vec2i){ text_bounds.x, text_bounds.y }; + self->background.size = (mgl_vec2f){ min_int(text_bounds_int.x, max_size.x), min_int(text_bounds_int.y, max_size.y) }; mgui_button_set_position(self, (mgl_vec2i){ self->background.position.x, self->background.position.y }); + self->widget.size = (mgl_vec2i){ self->background.size.x, self->background.size.y }; } void mgui_button_on_event(mgui_button *self, mgl_window *window, mgl_event *event) { @@ -70,12 +72,11 @@ void mgui_button_on_event(mgui_button *self, mgl_window *window, mgl_event *even } } -mgl_vec2i mgui_button_draw(mgui_button *self, mgl_window *window) { +void mgui_button_draw(mgui_button *self, mgl_window *window) { const mgl_vec2i position = (mgl_vec2i){ self->background.position.x, self->background.position.y }; const mgl_vec2i size = (mgl_vec2i){ self->background.size.x, self->background.size.y }; if(mgui_rectangle_intersects_with_scissor(position, size, window)) { mgl_rectangle_draw(mgl_get_context(), &self->background); mgl_text_draw(mgl_get_context(), &self->text); } - return size; } |