aboutsummaryrefslogtreecommitdiff
path: root/src/mgui/button.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mgui/button.c')
-rw-r--r--src/mgui/button.c17
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;
}