aboutsummaryrefslogtreecommitdiff
path: root/src/mgui/widget.c
blob: b9865caa5b67781d015979503a88a4d16b943523 (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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#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/richtext.h"
#include "../../include/mgui/image.h"
#include "../../include/alloc.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_destroy(mgui_widget *widget) {
    switch(widget->type) {
        case MGUI_WIDGET_LIST:
            mgui_list_destroy(mgui_widget_to_list(widget));
            break;
        case MGUI_WIDGET_SCROLLVIEW:
            mgui_scrollview_destroy(mgui_widget_to_scrollview(widget));
            break;
        case MGUI_WIDGET_BUTTON:
            mgui_button_destroy(mgui_widget_to_button(widget));
            break;
        case MGUI_WIDGET_LABEL:
            mgui_label_destroy(mgui_widget_to_label(widget));
            break;
        case MGUI_WIDGET_RICHTEXT:
            mgui_richtext_destroy(mgui_widget_to_richtext(widget));
            break;
        case MGUI_WIDGET_IMAGE:
            mgui_image_destroy(mgui_widget_to_image(widget));
            break;
    }
}

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_RICHTEXT:
            mgui_richtext_set_position(mgui_widget_to_richtext(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_RICHTEXT:
            mgui_richtext_set_width(mgui_widget_to_richtext(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_RICHTEXT:
            mgui_richtext_on_event(mgui_widget_to_richtext(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_RICHTEXT:
            return mgui_richtext_draw(mgui_widget_to_richtext(self), window);
        case MGUI_WIDGET_IMAGE:
            return mgui_image_draw(mgui_widget_to_image(self), window);
    }
    return (mgl_vec2i){ 0, 0 };
}