diff options
Diffstat (limited to 'src/mgui/list.c')
-rw-r--r-- | src/mgui/list.c | 38 |
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; } |