aboutsummaryrefslogtreecommitdiff
path: root/src/mgui/widget.c
blob: e9c8425764c9790f5c8830fcb015fc4bafd31084 (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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include "../../include/mgui/widget.h"
#include "../../include/mgui/list.h"
#include "../../include/mgui/scrollview.h"
#include "../../include/mgui/button.h"
#include "../../include/mgui/label.h"
#include "../../include/mgui/image.h"

/* TODO: Use margin */

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_SCROLLVIEW:
            mgui_scrollview_set_position(mgui_widget_to_scrollview(self), position);
            break;
        case MGUI_WIDGET_BUTTON:
            mgui_button_set_position(mgui_widget_to_button(self), position);
            break;
        case MGUI_WIDGET_LABEL:
            mgui_label_set_position(mgui_widget_to_label(self), position);
            break;
        case MGUI_WIDGET_IMAGE:
            mgui_image_set_position(mgui_widget_to_image(self), position);
            break;
    }
}

void mgui_widget_set_width(mgui_widget *self, int width) {
    switch(self->type) {
        case MGUI_WIDGET_LIST:
            mgui_list_set_width(mgui_widget_to_list(self), width);
            break;
        case MGUI_WIDGET_SCROLLVIEW:
            mgui_scrollview_set_width(mgui_widget_to_scrollview(self), width);
            break;
        case MGUI_WIDGET_BUTTON:
            mgui_button_set_width(mgui_widget_to_button(self), width);
            break;
        case MGUI_WIDGET_LABEL:
            mgui_label_set_width(mgui_widget_to_label(self), width);
            break;
        case MGUI_WIDGET_IMAGE:
            mgui_image_set_width(mgui_widget_to_image(self), width);
            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_SCROLLVIEW:
            mgui_scrollview_on_event(mgui_widget_to_scrollview(self), window, event);
            break;
        case MGUI_WIDGET_BUTTON:
            mgui_button_on_event(mgui_widget_to_button(self), window, event);
            break;
        case MGUI_WIDGET_LABEL:
            mgui_label_on_event(mgui_widget_to_label(self), window, event);
            break;
        case MGUI_WIDGET_IMAGE:
            mgui_image_on_event(mgui_widget_to_image(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_SCROLLVIEW:
            return mgui_scrollview_draw(mgui_widget_to_scrollview(self), window);
        case MGUI_WIDGET_BUTTON:
            return mgui_button_draw(mgui_widget_to_button(self), window);
        case MGUI_WIDGET_LABEL:
            return mgui_label_draw(mgui_widget_to_label(self), window);
        case MGUI_WIDGET_IMAGE:
            return mgui_image_draw(mgui_widget_to_image(self), window);
    }
    return (mgl_vec2i){ 0, 0 };
}