Mercurial > molko
annotate libmlk-ui/mlk/ui/gridmenu.c @ 504:52a305833381
ui: rework styles
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 01 Mar 2023 14:07:10 +0100 |
parents | 2af25db99273 |
children | 6100c643dba0 |
rev | line source |
---|---|
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 * gridmenu.c -- GUI grid menu |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
445
773a082f0b91
misc: update copyright years
David Demelier <markand@malikania.fr>
parents:
433
diff
changeset
|
4 * Copyright (c) 2020-2023 David Demelier <markand@malikania.fr> |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 #include <assert.h> |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
20 #include <math.h> |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 #include <string.h> |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 |
431
8f59201dc76b
core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents:
411
diff
changeset
|
23 #include <mlk/core/event.h> |
8f59201dc76b
core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents:
411
diff
changeset
|
24 #include <mlk/core/maths.h> |
8f59201dc76b
core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents:
411
diff
changeset
|
25 #include <mlk/core/painter.h> |
8f59201dc76b
core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents:
411
diff
changeset
|
26 #include <mlk/core/panic.h> |
8f59201dc76b
core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents:
411
diff
changeset
|
27 #include <mlk/core/texture.h> |
8f59201dc76b
core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents:
411
diff
changeset
|
28 #include <mlk/core/trace.h> |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 #include "frame.h" |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
31 #include "label.h" |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
32 #include "gridmenu.h" |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 #include "theme.h" |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 |
504 | 35 #define THEME(m) ((m)->theme ? (m)->theme : &mlk_theme) |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
36 |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
37 struct index { |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
38 unsigned int row; |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
39 unsigned int col; |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 }; |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
42 static struct index |
492
c7b18475f640
ui: gridmenu -> mlk_gridmenu
David Demelier <markand@malikania.fr>
parents:
491
diff
changeset
|
43 get_index(const struct mlk_gridmenu *menu) |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 { |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 return (struct index) { |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
46 .row = menu->selected / menu->ncols, |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 .col = menu->selected % menu->ncols |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 }; |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 } |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 static void |
492
c7b18475f640
ui: gridmenu -> mlk_gridmenu
David Demelier <markand@malikania.fr>
parents:
491
diff
changeset
|
52 geometry(struct mlk_gridmenu *menu) |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 { |
495
2af25db99273
ui: theme -> mlk_theme
David Demelier <markand@malikania.fr>
parents:
493
diff
changeset
|
54 const struct mlk_theme *theme = THEME(menu); |
493
fce3b3c4b496
ui: label -> mlk_label
David Demelier <markand@malikania.fr>
parents:
492
diff
changeset
|
55 struct mlk_label label = { |
fce3b3c4b496
ui: label -> mlk_label
David Demelier <markand@malikania.fr>
parents:
492
diff
changeset
|
56 .flags = MLK_LABEL_FLAGS_SHADOW |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
57 }; |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
58 unsigned int reqw = 0, reqh = 0, lw, lh; |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
60 /* Compute which item has the bigger width/height to create a spacing. */ |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
61 menu->eltw = menu->elth = 0; |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
62 menu->spacew = menu->spaceh = 0; |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
63 |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
64 for (size_t i = 0; i < menu->itemsz; ++i) { |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
65 if (!(label.text = menu->items[i])) |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
66 continue; |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
68 |
493
fce3b3c4b496
ui: label -> mlk_label
David Demelier <markand@malikania.fr>
parents:
492
diff
changeset
|
69 mlk_label_query(&label, &lw, &lh); |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
70 |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
71 menu->eltw = fmax(menu->eltw, lw); |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
72 menu->elth = fmax(menu->elth, lh); |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
73 } |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
74 |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
75 /* Total texture size required to draw items. */ |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
76 reqw = (theme->padding * 2) + (menu->eltw * menu->ncols); |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
77 reqh = (theme->padding * 2) + (menu->elth * menu->nrows); |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
78 |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
79 /* |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
80 * Compute spacing between elements. We remove the padding because it |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
81 * is outside of the elements. |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
82 */ |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
83 if (reqw > menu->w) { |
473
02b16dd49b54
core: trace -> mlk_trace
David Demelier <markand@malikania.fr>
parents:
455
diff
changeset
|
84 mlk_tracef("gridmenu width is too small: %u < %u", menu->w, reqw); |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
85 menu->spacew = 1; |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
86 } else if (menu->ncols > 1) { |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
87 reqw -= theme->padding * 2; |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
88 menu->spacew = (menu->w - reqw) / menu->ncols; |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
89 } |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
90 |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
91 if (reqh > menu->h) { |
473
02b16dd49b54
core: trace -> mlk_trace
David Demelier <markand@malikania.fr>
parents:
455
diff
changeset
|
92 mlk_tracef("gridmenu height is too small: %u < %u", menu->h, reqh); |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
93 menu->spaceh = 1; |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
94 } else if (menu->nrows > 1) { |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
95 reqh -= theme->padding * 2; |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
96 menu->spaceh = (menu->h - reqh) / menu->nrows; |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
97 } |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
98 } |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
99 |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
100 static void |
492
c7b18475f640
ui: gridmenu -> mlk_gridmenu
David Demelier <markand@malikania.fr>
parents:
491
diff
changeset
|
101 draw_frame(const struct mlk_gridmenu *menu) |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
102 { |
491
734b598534c4
ui: frame -> mlk_frame
David Demelier <markand@malikania.fr>
parents:
473
diff
changeset
|
103 const struct mlk_frame f = { |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
104 .x = menu->x, |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
105 .y = menu->y, |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
106 .w = menu->w, |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
107 .h = menu->h, |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
108 }; |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
109 |
491
734b598534c4
ui: frame -> mlk_frame
David Demelier <markand@malikania.fr>
parents:
473
diff
changeset
|
110 mlk_frame_draw(&f); |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
111 } |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
112 |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
113 static void |
492
c7b18475f640
ui: gridmenu -> mlk_gridmenu
David Demelier <markand@malikania.fr>
parents:
491
diff
changeset
|
114 draw_labels(const struct mlk_gridmenu *menu) |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
115 { |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
116 size_t pagesz, pagenr, item, c = 0, r = 0; |
493
fce3b3c4b496
ui: label -> mlk_label
David Demelier <markand@malikania.fr>
parents:
492
diff
changeset
|
117 struct mlk_label label = {0}; |
495
2af25db99273
ui: theme -> mlk_theme
David Demelier <markand@malikania.fr>
parents:
493
diff
changeset
|
118 const struct mlk_theme *theme = THEME(menu); |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
119 |
493
fce3b3c4b496
ui: label -> mlk_label
David Demelier <markand@malikania.fr>
parents:
492
diff
changeset
|
120 label.flags = MLK_LABEL_FLAGS_SHADOW; |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
121 |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
122 /* |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
123 * Select the first top-left column based on the current selection and |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
124 * the number of rows/columns. |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
125 */ |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
126 pagesz = menu->nrows * menu->ncols; |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
127 pagenr = menu->selected / pagesz; |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
128 |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
129 for (size_t i = 0; i < pagesz; ++i) { |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
130 item = i + pagenr * pagesz; |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
131 |
398
14ce7c4871e3
rpg: overhaul of battle bar
David Demelier <markand@malikania.fr>
parents:
396
diff
changeset
|
132 if (item >= menu->itemsz || !menu->items[item]) |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
133 continue; |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
134 |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
135 label.text = menu->items[item]; |
396
c9769a77ad8c
ui: avoid copying theme
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
136 label.x = menu->x + theme->padding + (c * menu->eltw) + (c * menu->spacew); |
c9769a77ad8c
ui: avoid copying theme
David Demelier <markand@malikania.fr>
parents:
395
diff
changeset
|
137 label.y = menu->y + theme->padding + (r * menu->elth) + (r * menu->spaceh); |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
138 |
504 | 139 #if 0 |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
140 if (i == menu->selected % pagesz) |
493
fce3b3c4b496
ui: label -> mlk_label
David Demelier <markand@malikania.fr>
parents:
492
diff
changeset
|
141 label.flags |= MLK_LABEL_FLAGS_SELECTED; |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
142 else |
493
fce3b3c4b496
ui: label -> mlk_label
David Demelier <markand@malikania.fr>
parents:
492
diff
changeset
|
143 label.flags &= ~(MLK_LABEL_FLAGS_SELECTED); |
504 | 144 #endif |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
145 |
493
fce3b3c4b496
ui: label -> mlk_label
David Demelier <markand@malikania.fr>
parents:
492
diff
changeset
|
146 mlk_label_draw(&label); |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
147 |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
148 if (++c >= menu->ncols) { |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
149 ++r; |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
150 c = 0; |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
151 } |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
152 } |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
153 } |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
154 |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
155 static int |
492
c7b18475f640
ui: gridmenu -> mlk_gridmenu
David Demelier <markand@malikania.fr>
parents:
491
diff
changeset
|
156 handle_keydown(struct mlk_gridmenu *menu, const struct mlk_event_key *key) |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
157 { |
450
b26dd49f69ff
core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
158 assert(key->type == MLK_EVENT_KEYDOWN); |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
159 |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
160 const struct index idx = get_index(menu); |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
161 int validate = 0; |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
162 |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
163 switch (key->key) { |
450
b26dd49f69ff
core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
164 case MLK_KEY_UP: |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
165 if (idx.row > 0) |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
166 menu->selected -= menu->ncols; |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
167 break; |
450
b26dd49f69ff
core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
168 case MLK_KEY_RIGHT: |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
169 if (menu->selected + 1U < menu->itemsz) |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
170 menu->selected += 1; |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
171 break; |
450
b26dd49f69ff
core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
172 case MLK_KEY_DOWN: |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
173 if (idx.row + 1U < menu->itemsz / menu->ncols) |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
174 menu->selected += menu->ncols; |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
175 else |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
176 menu->selected = menu->itemsz - 1; |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
177 break; |
450
b26dd49f69ff
core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
178 case MLK_KEY_LEFT: |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
179 if (idx.col > 0) |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
180 menu->selected -= 1; |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
181 break; |
450
b26dd49f69ff
core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
182 case MLK_KEY_ENTER: |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
183 validate = 1; |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
184 break; |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
185 default: |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
186 break; |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
187 } |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
188 |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
189 return validate; |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
190 } |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
191 |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
192 static int |
492
c7b18475f640
ui: gridmenu -> mlk_gridmenu
David Demelier <markand@malikania.fr>
parents:
491
diff
changeset
|
193 handle_clickdown(struct mlk_gridmenu *menu, const struct mlk_event_click *click) |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
194 { |
450
b26dd49f69ff
core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
195 assert(click->type == MLK_EVENT_CLICKDOWN); |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
196 |
495
2af25db99273
ui: theme -> mlk_theme
David Demelier <markand@malikania.fr>
parents:
493
diff
changeset
|
197 const struct mlk_theme *theme = THEME(menu); |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
198 size_t pagesz, pagenr, selected, c = 0, r = 0; |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
199 int x, y; |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
200 |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
201 pagesz = menu->nrows * menu->ncols; |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
202 pagenr = menu->selected / pagesz; |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
203 |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
204 for (size_t i = 0; i < pagesz; ++i) { |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
205 x = menu->x + theme->padding + (c * menu->eltw) + (c * menu->spacew); |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
206 y = menu->y + theme->padding + (r * menu->elth) + (r * menu->spaceh); |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
207 |
455
c4f31658104d
core: maths -> mlk_maths
David Demelier <markand@malikania.fr>
parents:
450
diff
changeset
|
208 if (mlk_maths_is_boxed(x, y, menu->eltw, menu->elth, click->x, click->y)) { |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
209 selected = c + r * menu->ncols; |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
210 selected += pagesz * pagenr; |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
211 |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
212 if (selected < menu->itemsz) { |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
213 menu->selected = selected; |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
214 return 1; |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
215 } |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
216 } |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
217 |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
218 if (++c >= menu->ncols) { |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
219 ++r; |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
220 c = 0; |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
221 } |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
222 } |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
223 |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
224 return 0; |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
225 } |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
226 |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
227 void |
492
c7b18475f640
ui: gridmenu -> mlk_gridmenu
David Demelier <markand@malikania.fr>
parents:
491
diff
changeset
|
228 mlk_gridmenu_init(struct mlk_gridmenu *menu, |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
229 unsigned int nr, |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
230 unsigned int nc, |
401
df5e1fea1d2e
ui: gridmenu should be fully constified
David Demelier <markand@malikania.fr>
parents:
398
diff
changeset
|
231 const char * const *items, |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
232 size_t itemsz) |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
233 { |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
234 assert(menu); |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
235 assert(nr); |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
236 assert(nc); |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
237 |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
238 memset(menu, 0, sizeof (*menu)); |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
239 |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
240 menu->nrows = nr; |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
241 menu->ncols = nc; |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
242 menu->items = items; |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
243 menu->itemsz = itemsz; |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
244 } |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
245 |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
246 void |
492
c7b18475f640
ui: gridmenu -> mlk_gridmenu
David Demelier <markand@malikania.fr>
parents:
491
diff
changeset
|
247 mlk_gridmenu_resize(struct mlk_gridmenu *menu, int x, int y, unsigned int w, unsigned int h) |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
248 { |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
249 assert(menu); |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
250 |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
251 menu->x = x; |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
252 menu->y = y; |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
253 menu->w = w; |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
254 menu->h = h; |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
255 |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
256 geometry(menu); |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
257 } |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
258 |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
259 int |
492
c7b18475f640
ui: gridmenu -> mlk_gridmenu
David Demelier <markand@malikania.fr>
parents:
491
diff
changeset
|
260 mlk_gridmenu_handle(struct mlk_gridmenu *menu, const union mlk_event *ev) |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
261 { |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
262 assert(menu); |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
263 assert(ev); |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
264 |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
265 switch (ev->type) { |
450
b26dd49f69ff
core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
266 case MLK_EVENT_KEYDOWN: |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
267 return handle_keydown(menu, &ev->key); |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
268 break; |
450
b26dd49f69ff
core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents:
445
diff
changeset
|
269 case MLK_EVENT_CLICKDOWN: |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
270 return handle_clickdown(menu, &ev->click); |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
271 break; |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
272 default: |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
273 break; |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
274 } |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
275 |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
276 return 0; |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
277 } |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
278 |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
279 void |
492
c7b18475f640
ui: gridmenu -> mlk_gridmenu
David Demelier <markand@malikania.fr>
parents:
491
diff
changeset
|
280 mlk_gridmenu_draw(const struct mlk_gridmenu *menu) |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
281 { |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
282 assert(menu); |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
283 |
395
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
284 draw_frame(menu); |
ef2fc4442ed5
ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents:
378
diff
changeset
|
285 draw_labels(menu); |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
286 } |