Mercurial > molko
annotate examples/example-gridmenu/main.c @ 366:19782ea1cf4a
misc: start rebranding
author | David Demelier <markand@malikania.fr> |
---|---|
date | Sun, 24 Oct 2021 15:57:42 +0200 |
parents | eaab6bd635ab |
children | 460c78706989 |
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 * example-gridmenu.c -- show how to use grid menu |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
314 | 4 * Copyright (c) 2020-2021 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 <core/core.h> |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 #include <core/event.h> |
207
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
21 #include <core/game.h> |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 #include <core/painter.h> |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 #include <core/panic.h> |
207
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
24 #include <core/state.h> |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 #include <core/sys.h> |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 #include <core/trace.h> |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 #include <core/util.h> |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 #include <core/window.h> |
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 <ui/align.h> |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
31 #include <ui/gridmenu.h> |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
32 #include <ui/label.h> |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 #include <ui/theme.h> |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 #include <ui/ui.h> |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
35 |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
36 #define W (1280) |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
37 #define H (720) |
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 static void |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 init(void) |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 { |
366
19782ea1cf4a
misc: start rebranding
David Demelier <markand@malikania.fr>
parents:
322
diff
changeset
|
42 if (core_init("fr.malikania", "example-gridmenu") < 0 || ui_init() < 0) |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 panic(); |
298
196264679079
misc: remove usage of bool
David Demelier <markand@malikania.fr>
parents:
241
diff
changeset
|
44 if (window_open("Example - Grid menu", W, H) < 0) |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 panic(); |
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 static void |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 quit(void) |
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 window_finish(); |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
52 ui_finish(); |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 core_finish(); |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 } |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 static void |
207
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
57 handle(struct state *st, const union event *ev) |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
58 { |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
59 switch (ev->type) { |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
60 case EVENT_QUIT: |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
61 game_quit(); |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
62 break; |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
63 default: |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
64 gridmenu_handle(st->data, ev); |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
65 break; |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
66 } |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
67 } |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
68 |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
69 static void |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
70 update(struct state *st, unsigned int ticks) |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
71 { |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
72 (void)ticks; |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
73 |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
74 struct gridmenu *menu = st->data; |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
75 |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
76 if (menu->state == GRIDMENU_STATE_ACTIVATED) { |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
77 tracef("selected index: %u", (unsigned int)menu->selected); |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
78 gridmenu_reset(menu); |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
79 } |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
80 } |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
81 |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
82 static void |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
83 draw(struct state *st) |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
84 { |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
85 painter_set_color(0x4f8fbaff); |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
86 painter_clear(); |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
87 gridmenu_draw(st->data); |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
88 painter_present(); |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
89 } |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
90 |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
91 static void |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
92 run(void) |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
93 { |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
94 struct gridmenu menu = { |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
95 .menu = { |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
96 "Feu mineur", |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
97 "Feu majeur", |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
98 "Feu septième", |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
99 "Glace mineure", |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
100 "Glace majeure", |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
101 "Glace septième", |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
102 "Foudre mineure", |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
103 "Foudre majeure", |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
104 "Foudre septième", |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
105 "Choc mineur", |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
106 "Choc majeur", |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
107 "Choc septième", |
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 .w = 300, |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
110 .h = 100, |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
111 .nrows = 3, |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
112 .ncols = 2 |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
113 }; |
207
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
114 struct state state = { |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
115 .data = &menu, |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
116 .handle = handle, |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
117 .update = update, |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
118 .draw = draw, |
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
119 }; |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
120 |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
121 align(ALIGN_CENTER, &menu.x, &menu.y, menu.w, menu.h, 0, 0, W, H); |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
122 |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
123 /* Need to repaint at least once. */ |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
124 gridmenu_repaint(&menu); |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
125 |
300
3638b39ef2bf
examples: fix with new game_push function
David Demelier <markand@malikania.fr>
parents:
298
diff
changeset
|
126 game_push(&state); |
207
133926e08d6e
examples: use game_loop for all
David Demelier <markand@malikania.fr>
parents:
192
diff
changeset
|
127 game_loop(); |
181
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
128 } |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
129 |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
130 int |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
131 main(int argc, char **argv) |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
132 { |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
133 (void)argc; |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
134 (void)argv; |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
135 |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
136 init(); |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
137 run(); |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
138 quit(); |
867b60e6258a
ui: add gridmenu object, closes #2511 @4h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
139 } |