aboutsummaryrefslogtreecommitdiff
path: root/src/mgui/widget.c
blob: f35ff0516aca40427b7036077294afd7674277e8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include "../../include/mgui/widget.h"
#include "../../include/mgui/list.h"
#include "../../include/mgui/button.h"

void mgui_widget_init(mgui_widget *self, mgui_widget_type type) {
    self->type = type;
    mgui_widget_set_margin(self, 0, 0, 0, 0);
}

void mgui_widget_set_margin(mgui_widget *self, int left, int top, int right, int bottom) {
    self->margin.left = left;
    self->margin.top = top;
    self->margin.right = right;
    self->margin.bottom = bottom;
}

void mgui_widget_set_position(mgui_widget *self, mgl_vec2i position) {
    switch(self->type) {
        case MGUI_WIDGET_LIST:
            mgui_list_set_position(mgui_widget_to_list(self), position);
            break;
        case MGUI_WIDGET_BUTTON:
            mgui_button_set_position(mgui_widget_to_button(self), position);
            break;
    }
}

void mgui_widget_on_event(mgui_widget *self, mgl_window *window, mgl_event *event) {
    switch(self->type) {
        case MGUI_WIDGET_LIST:
            mgui_list_on_event(mgui_widget_to_list(self), window, event);
            break;
        case MGUI_WIDGET_BUTTON:
            mgui_button_on_event(mgui_widget_to_button(self), window, event);
            break;
    }
}

mgl_vec2i mgui_widget_draw(mgui_widget *self, mgl_window *window) {
    switch(self->type) {
        case MGUI_WIDGET_LIST:
            return mgui_list_draw(mgui_widget_to_list(self), window);
        case MGUI_WIDGET_BUTTON:
            return mgui_button_draw(mgui_widget_to_button(self), window);
    }
    return (mgl_vec2i){ 0, 0 };
}