aboutsummaryrefslogtreecommitdiff
path: root/src/mgui/list.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mgui/list.c')
-rw-r--r--src/mgui/list.c38
1 files changed, 31 insertions, 7 deletions
diff --git a/src/mgui/list.c b/src/mgui/list.c
index 8dc4283..320b448 100644
--- a/src/mgui/list.c
+++ b/src/mgui/list.c
@@ -1,6 +1,5 @@
#include "../../include/mgui/list.h"
#include "../../include/alloc.h"
-#include <mgl/mgl.h>
#include <assert.h>
mgui_list* mgui_list_create(mgui_list_direction direction) {
@@ -55,11 +54,36 @@ void mgui_list_on_event(mgui_list *self, mgl_window *window, mgl_event *event) {
}
}
-void mgui_list_draw(mgui_list *self, mgl_window *window) {
- mgl_context *context = mgl_get_context();
- context->gl.glTranslatef(self->position.x, self->position.y, 0.0f);
- for(size_t i = 0; i < self->num_items; ++i) {
- mgui_widget_draw(self->items[i], window);
+static int max_int(int a, int b) {
+ return a >= b ? a : b;
+}
+
+mgl_vec2i mgui_list_draw(mgui_list *self, mgl_window *window) {
+ mgl_vec2i position = self->position;
+ mgl_vec2i size = (mgl_vec2i){ 0, 0 };
+
+ switch(self->direction) {
+ case MGUI_LIST_HORIZONITAL: {
+ for(size_t i = 0; i < self->num_items; ++i) {
+ mgui_widget_set_position(self->items[i], position);
+ const mgl_vec2i widget_size = mgui_widget_draw(self->items[i], window);
+ size.x += widget_size.x;
+ size.y = max_int(size.y, widget_size.y);
+ position.x += widget_size.x;
+ }
+ break;
+ }
+ case MGUI_LIST_VERTICAL: {
+ for(size_t i = 0; i < self->num_items; ++i) {
+ mgui_widget_set_position(self->items[i], position);
+ const mgl_vec2i widget_size = mgui_widget_draw(self->items[i], window);
+ size.x = max_int(size.x, widget_size.x);
+ size.y += widget_size.y;
+ position.y += widget_size.y;
+ }
+ break;
+ }
}
- context->gl.glLoadIdentity(); /* TODO: Remove, but what about glRotatef above */
+
+ return size;
}