comparison examples/example-gridmenu/main.c @ 322:eaab6bd635ab

misc: move examples from src/
author David Demelier <markand@malikania.fr>
date Sat, 02 Oct 2021 08:25:30 +0200
parents src/examples/example-gridmenu/main.c@8f9937403749
children 19782ea1cf4a
comparison
equal deleted inserted replaced
321:687ac7516bbf 322:eaab6bd635ab
1 /*
2 * example-gridmenu.c -- show how to use grid menu
3 *
4 * Copyright (c) 2020-2021 David Demelier <markand@malikania.fr>
5 *
6 * Permission to use, copy, modify, and/or distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */
18
19 #include <core/core.h>
20 #include <core/event.h>
21 #include <core/game.h>
22 #include <core/painter.h>
23 #include <core/panic.h>
24 #include <core/state.h>
25 #include <core/sys.h>
26 #include <core/trace.h>
27 #include <core/util.h>
28 #include <core/window.h>
29
30 #include <ui/align.h>
31 #include <ui/gridmenu.h>
32 #include <ui/label.h>
33 #include <ui/theme.h>
34 #include <ui/ui.h>
35
36 #define W (1280)
37 #define H (720)
38
39 static void
40 init(void)
41 {
42 if (core_init("fr.malikania", "grid-menu") < 0 || ui_init() < 0)
43 panic();
44 if (window_open("Example - Grid menu", W, H) < 0)
45 panic();
46 }
47
48 static void
49 quit(void)
50 {
51 window_finish();
52 ui_finish();
53 core_finish();
54 }
55
56 static void
57 handle(struct state *st, const union event *ev)
58 {
59 switch (ev->type) {
60 case EVENT_QUIT:
61 game_quit();
62 break;
63 default:
64 gridmenu_handle(st->data, ev);
65 break;
66 }
67 }
68
69 static void
70 update(struct state *st, unsigned int ticks)
71 {
72 (void)ticks;
73
74 struct gridmenu *menu = st->data;
75
76 if (menu->state == GRIDMENU_STATE_ACTIVATED) {
77 tracef("selected index: %u", (unsigned int)menu->selected);
78 gridmenu_reset(menu);
79 }
80 }
81
82 static void
83 draw(struct state *st)
84 {
85 painter_set_color(0x4f8fbaff);
86 painter_clear();
87 gridmenu_draw(st->data);
88 painter_present();
89 }
90
91 static void
92 run(void)
93 {
94 struct gridmenu menu = {
95 .menu = {
96 "Feu mineur",
97 "Feu majeur",
98 "Feu septième",
99 "Glace mineure",
100 "Glace majeure",
101 "Glace septième",
102 "Foudre mineure",
103 "Foudre majeure",
104 "Foudre septième",
105 "Choc mineur",
106 "Choc majeur",
107 "Choc septième",
108 },
109 .w = 300,
110 .h = 100,
111 .nrows = 3,
112 .ncols = 2
113 };
114 struct state state = {
115 .data = &menu,
116 .handle = handle,
117 .update = update,
118 .draw = draw,
119 };
120
121 align(ALIGN_CENTER, &menu.x, &menu.y, menu.w, menu.h, 0, 0, W, H);
122
123 /* Need to repaint at least once. */
124 gridmenu_repaint(&menu);
125
126 game_push(&state);
127 game_loop();
128 }
129
130 int
131 main(int argc, char **argv)
132 {
133 (void)argc;
134 (void)argv;
135
136 init();
137 run();
138 quit();
139 }