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.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/src/mgui/button.c b/src/mgui/button.c
index c6b65d5..b548140 100644
--- a/src/mgui/button.c
+++ b/src/mgui/button.c
@@ -13,6 +13,7 @@ mgui_button* mgui_button_create() {
button->background.size = (mgl_vec2f){ 0.0f, 0.0f };
button->background.color = (mgl_color){ 45, 45, 45, 255 };
mgl_text_init(&button->label, mgui_get_font(MGUI_FONT_LATIN, 32), "Label", 5);
+ button->background.size = mgl_text_get_bounds(&button->label);
return button;
}
@@ -26,9 +27,22 @@ mgui_button* mgui_widget_to_button(mgui_widget *widget) {
}
void mgui_button_set_position(mgui_button *self, mgl_vec2i position) {
- const mgl_vec2f position_f = (mgl_vec2f){ position.x, position.y };
- self->background.position = position_f;
- mgl_text_set_position(&self->label, position_f);
+ const mgl_vec2f label_bounds = mgl_text_get_bounds(&self->label);
+ self->background.position = (mgl_vec2f){ position.x, position.y };
+ mgl_text_set_position(&self->label, (mgl_vec2f){
+ (int)(self->background.position.x + self->background.size.x * 0.5f - label_bounds.x * 0.5f),
+ (int)(self->background.position.y + self->background.size.y * 0.5f - label_bounds.y * 0.5f)
+ });
+}
+
+static int max_int(int a, int b) {
+ return a >= b ? a : b;
+}
+
+void mgui_button_set_width(mgui_button *self, int width) {
+ mgl_vec2f label_bounds = mgl_text_get_bounds(&self->label);
+ self->background.size.x = max_int(label_bounds.x, width);
+ mgui_button_set_position(self, (mgl_vec2i){ self->background.position.x, self->background.position.y });
}
void mgui_button_on_event(mgui_button *self, mgl_window *window, mgl_event *event) {
@@ -49,7 +63,6 @@ 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)window;
- self->background.size = mgl_text_get_bounds(&self->label);
mgl_rectangle_draw(mgl_get_context(), &self->background);
mgl_text_draw(mgl_get_context(), &self->label);
return (mgl_vec2i){ self->background.size.x, self->background.size.y };