annotate libmlk-ui/mlk/ui/gridmenu.c @ 608:2527b000aaa5

ui: do the same with gridmenu
author David Demelier <markand@malikania.fr>
date Fri, 11 Aug 2023 19:45:00 +0200
parents ed1d3244ed57
children d97674d33764
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
585
76ce31b0151f misc: minor edits
David Demelier <markand@malikania.fr>
parents: 547
diff changeset
22 #include <mlk/core/err.h>
431
8f59201dc76b core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 411
diff changeset
23 #include <mlk/core/event.h>
506
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
24 #include <mlk/core/font.h>
431
8f59201dc76b core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 411
diff changeset
25 #include <mlk/core/maths.h>
8f59201dc76b core: cleanup hierarchy
David Demelier <markand@malikania.fr>
parents: 411
diff changeset
26 #include <mlk/core/painter.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>
608
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
29 #include <mlk/core/window.h>
181
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
30
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 #include "gridmenu.h"
608
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
32 #include "style.h"
507
d49a05e7a5b5 ui: separate delegate/style
David Demelier <markand@malikania.fr>
parents: 506
diff changeset
33 #include "ui_p.h"
181
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
34
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 struct index {
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 unsigned int row;
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 unsigned int col;
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 };
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
39
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 static struct index
492
c7b18475f640 ui: gridmenu -> mlk_gridmenu
David Demelier <markand@malikania.fr>
parents: 491
diff changeset
41 get_index(const struct mlk_gridmenu *menu)
181
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 {
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 return (struct index) {
506
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
44 .row = (unsigned int)(menu->selected / menu->ncols),
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
45 .col = (unsigned int)(menu->selected % menu->ncols)
181
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 };
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 }
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
48
395
ef2fc4442ed5 ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
49 static int
492
c7b18475f640 ui: gridmenu -> mlk_gridmenu
David Demelier <markand@malikania.fr>
parents: 491
diff changeset
50 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
51 {
450
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
52 assert(key->type == MLK_EVENT_KEYDOWN);
181
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
53
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 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
55 int validate = 0;
181
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
56
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
57 switch (key->key) {
450
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
58 case MLK_KEY_UP:
181
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 if (idx.row > 0)
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 menu->selected -= menu->ncols;
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
61 break;
450
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
62 case MLK_KEY_RIGHT:
395
ef2fc4442ed5 ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
63 if (menu->selected + 1U < menu->itemsz)
181
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 menu->selected += 1;
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 break;
450
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
66 case MLK_KEY_DOWN:
395
ef2fc4442ed5 ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
67 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
68 menu->selected += menu->ncols;
395
ef2fc4442ed5 ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
69 else
ef2fc4442ed5 ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
70 menu->selected = menu->itemsz - 1;
181
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 break;
450
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
72 case MLK_KEY_LEFT:
181
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
73 if (idx.col > 0)
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 menu->selected -= 1;
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 break;
450
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
76 case MLK_KEY_ENTER:
395
ef2fc4442ed5 ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
77 validate = 1;
181
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 break;
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
79 default:
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 break;
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 }
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
82
395
ef2fc4442ed5 ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
83 return validate;
181
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 }
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
85
395
ef2fc4442ed5 ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
86 static int
492
c7b18475f640 ui: gridmenu -> mlk_gridmenu
David Demelier <markand@malikania.fr>
parents: 491
diff changeset
87 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
88 {
450
b26dd49f69ff core: event -> mlk_event (and friends)
David Demelier <markand@malikania.fr>
parents: 445
diff changeset
89 assert(click->type == MLK_EVENT_CLICKDOWN);
181
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
90
608
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
91 const struct mlk_style_attr *attr = &menu->style->normal;
395
ef2fc4442ed5 ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
92 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
93 int x, y;
ef2fc4442ed5 ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
94
ef2fc4442ed5 ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
95 pagesz = menu->nrows * menu->ncols;
ef2fc4442ed5 ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
96 pagenr = menu->selected / pagesz;
ef2fc4442ed5 ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
97
ef2fc4442ed5 ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
98 for (size_t i = 0; i < pagesz; ++i) {
608
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
99 x = (int)(menu->x + attr->geo.padding + (c * menu->eltw) + (c * menu->spacew));
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
100 y = (int)(menu->y + attr->geo.padding + (r * menu->elth) + (r * menu->spaceh));
181
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
101
528
95792046d3d2 core: doxygenize maths
David Demelier <markand@malikania.fr>
parents: 508
diff changeset
102 if (mlk_maths_is_boxed(click->x, click->y, x, y, menu->eltw, menu->elth)) {
395
ef2fc4442ed5 ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
103 selected = c + r * menu->ncols;
ef2fc4442ed5 ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
104 selected += pagesz * pagenr;
181
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
105
395
ef2fc4442ed5 ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
106 if (selected < menu->itemsz) {
ef2fc4442ed5 ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
107 menu->selected = selected;
ef2fc4442ed5 ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
108 return 1;
ef2fc4442ed5 ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
109 }
ef2fc4442ed5 ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
110 }
ef2fc4442ed5 ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
111
ef2fc4442ed5 ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
112 if (++c >= menu->ncols) {
ef2fc4442ed5 ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
113 ++r;
ef2fc4442ed5 ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
114 c = 0;
181
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
115 }
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
116 }
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
117
395
ef2fc4442ed5 ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
118 return 0;
181
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
119 }
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
120
506
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
121 static void
608
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
122 resize(struct mlk_gridmenu_delegate *self, struct mlk_gridmenu *menu)
506
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
123 {
608
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
124 (void)self;
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
125
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
126 const struct mlk_style_attr *attr = &menu->style->normal;
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
127 unsigned int reqw = 0, reqh = 0, lw, lh;
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
128
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
129 /* Compute which item has the bigger width/height to create a spacing. */
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
130 menu->eltw = menu->elth = 0;
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
131 menu->spacew = menu->spaceh = 0;
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
132
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
133 for (size_t i = 0; i < menu->itemsz; ++i) {
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
134 if (!(menu->items[i]))
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
135 continue;
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
136
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
137 mlk_font_query(attr->font, menu->items[i], &lw, &lh);
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
138
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
139 menu->eltw = fmax(menu->eltw, lw);
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
140 menu->elth = fmax(menu->elth, lh);
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
141 }
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
142
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
143 /* Total texture size required to draw items. */
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
144 reqw = (attr->geo.padding * 3) + (menu->eltw * menu->ncols);
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
145 reqh = (attr->geo.padding * 3) + (menu->elth * menu->nrows);
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
146
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
147 /*
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
148 * Compute spacing between elements. We remove the padding because it
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
149 * is outside of the elements.
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
150 */
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
151 if (reqw > menu->w) {
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
152 mlk_tracef(_("gridmenu width is too small: %u < %u"), menu->w, reqw);
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
153 menu->spacew = 1;
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
154 } else if (menu->ncols > 1) {
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
155 reqw -= attr->geo.padding * 2;
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
156 menu->spacew = (menu->w - reqw) / menu->ncols;
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
157 }
508
7f7602bae0bd examples: minor touches
David Demelier <markand@malikania.fr>
parents: 507
diff changeset
158
608
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
159 if (reqh > menu->h) {
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
160 mlk_tracef(_("gridmenu height is too small: %u < %u"), menu->h, reqh);
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
161 menu->spaceh = 1;
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
162 } else if (menu->nrows > 1) {
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
163 reqh -= attr->geo.padding * 2;
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
164 menu->spaceh = (menu->h - reqh) / menu->nrows;
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
165 }
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
166 }
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
167
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
168 static int
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
169 handle(struct mlk_gridmenu_delegate *self,
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
170 struct mlk_gridmenu *menu,
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
171 const union mlk_event *ev)
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
172 {
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
173 (void)self;
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
174
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
175 switch (ev->type) {
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
176 case MLK_EVENT_KEYDOWN:
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
177 return handle_keydown(menu, &ev->key);
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
178 case MLK_EVENT_CLICKDOWN:
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
179 return handle_clickdown(menu, &ev->click);
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
180 default:
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
181 break;
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
182 }
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
183
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
184 return 0;
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
185 }
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
186
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
187 static void
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
188 draw(struct mlk_gridmenu_delegate *self, const struct mlk_gridmenu *menu)
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
189 {
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
190 (void)self;
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
191
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
192 const struct mlk_style *st = menu->style;
506
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
193 size_t pagesz, pagenr, item, c = 0, r = 0;
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
194 struct mlk_texture tex;
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
195 struct mlk_font *font;
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
196 unsigned long color;
547
c7664b679a95 misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
197 int x, y;
506
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
198
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
199 /*
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
200 * Select the first top-left column based on the current selection and
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
201 * the number of rows/columns.
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
202 */
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
203 pagesz = menu->nrows * menu->ncols;
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
204 pagenr = menu->selected / pagesz;
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
205
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
206 for (size_t i = 0; i < pagesz; ++i) {
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
207 item = i + pagenr * pagesz;
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
208
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
209 if (item >= menu->itemsz || !menu->items[item])
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
210 continue;
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
211
608
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
212 x = (int)(menu->x + st->normal.geo.padding + (c * menu->eltw) + (c * menu->spacew));
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
213 y = (int)(menu->y + st->normal.geo.padding + (r * menu->elth) + (r * menu->spaceh));
506
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
214
608
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
215 if (i == menu->selected % pagesz) {
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
216 color = st->selected.color.text;
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
217 font = st->selected.font;
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
218 } else {
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
219 color = st->normal.color.text;
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
220 font = st->normal.font;
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
221 }
506
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
222
547
c7664b679a95 misc: remove error codes for now
David Demelier <markand@malikania.fr>
parents: 528
diff changeset
223 if (mlk_font_render(font, &tex, menu->items[item], color) < 0) {
587
c027304ced27 misc: add NLS for ui/rpg
David Demelier <markand@malikania.fr>
parents: 585
diff changeset
224 mlk_tracef(_("unable to render grid menu item: %s"), mlk_err());
506
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
225 continue;
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
226 }
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
227
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
228 mlk_texture_draw(&tex, x, y);
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
229 mlk_texture_finish(&tex);
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
230
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
231 if (++c >= menu->ncols) {
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
232 ++r;
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
233 c = 0;
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
234 }
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
235 }
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
236 }
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
237
608
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
238 struct mlk_gridmenu_delegate mlk_gridmenu_delegate = {
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
239 .resize = resize,
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
240 .handle = handle,
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
241 .draw = draw
506
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
242 };
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
243
608
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
244 void
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
245 mlk_gridmenu_init(struct mlk_gridmenu *menu,
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
246 struct mlk_gridmenu_delegate *dt,
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
247 struct mlk_style *st)
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
248 {
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
249 assert(menu);
395
ef2fc4442ed5 ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
250
608
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
251 menu->x = 0;
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
252 menu->y = 0;
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
253 menu->w = 0;
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
254 menu->h = 0;
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
255 menu->items = NULL;
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
256 menu->itemsz = 0;
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
257 menu->nrows = 0;
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
258 menu->ncols = 0;
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
259 menu->delegate = dt ? dt : &mlk_gridmenu_delegate;
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
260 menu->style = st ? st : &mlk_style;
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
261
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
262 /* Can't be computed yet. */
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
263 menu->eltw = 0;
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
264 menu->elth = 0;
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
265 menu->spacew = 0;
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
266 menu->spaceh = 0;
181
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
267 }
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
268
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
269 void
608
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
270 mlk_gridmenu_resize(struct mlk_gridmenu *menu,
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
271 int x,
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
272 int y,
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
273 unsigned int w,
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
274 unsigned int h)
181
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
275 {
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
276 assert(menu);
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
277
395
ef2fc4442ed5 ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
278 menu->x = x;
ef2fc4442ed5 ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
279 menu->y = y;
ef2fc4442ed5 ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
280 menu->w = w;
ef2fc4442ed5 ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
281 menu->h = h;
181
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
282
608
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
283 if (menu->delegate->resize)
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
284 menu->delegate->resize(menu->delegate, menu);
181
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
285 }
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
286
395
ef2fc4442ed5 ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
287 int
492
c7b18475f640 ui: gridmenu -> mlk_gridmenu
David Demelier <markand@malikania.fr>
parents: 491
diff changeset
288 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
289 {
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
290 assert(menu);
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
291 assert(ev);
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
292
608
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
293 if (menu->delegate->handle)
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
294 return menu->delegate->handle(menu->delegate, menu, ev);
395
ef2fc4442ed5 ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
295
ef2fc4442ed5 ui: don't use fixed size arrays
David Demelier <markand@malikania.fr>
parents: 378
diff changeset
296 return 0;
181
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
297 }
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
298
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
299 void
506
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
300 mlk_gridmenu_update(struct mlk_gridmenu *menu, unsigned int ticks)
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
301 {
608
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
302 assert(menu);
506
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
303
608
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
304 if (menu->delegate->update)
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
305 menu->delegate->update(menu->delegate, menu, ticks);
506
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
306 }
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
307
e205625015ba ui: gridmenu is stylable
David Demelier <markand@malikania.fr>
parents: 505
diff changeset
308 void
492
c7b18475f640 ui: gridmenu -> mlk_gridmenu
David Demelier <markand@malikania.fr>
parents: 491
diff changeset
309 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
310 {
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
311 assert(menu);
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
312
608
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
313 if (menu->delegate->draw)
2527b000aaa5 ui: do the same with gridmenu
David Demelier <markand@malikania.fr>
parents: 603
diff changeset
314 menu->delegate->draw(menu->delegate, menu);
181
867b60e6258a ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff changeset
315 }