annotate examples/example-ui/example-ui.c @ 415:a5b98db4fd87

misc: fix .hgignore too greedy
author David Demelier <markand@malikania.fr>
date Sun, 09 Oct 2022 13:53:33 +0200
parents
children 8f59201dc76b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
415
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * example-action.c -- example on how to use automatic actions
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2020-2022 David Demelier <markand@malikania.fr>
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 #include <core/core.h>
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 #include <core/event.h>
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 #include <core/game.h>
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 #include <core/maths.h>
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 #include <core/panic.h>
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 #include <core/painter.h>
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 #include <core/state.h>
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 #include <core/sys.h>
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 #include <core/util.h>
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 #include <core/window.h>
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
29
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 #include <ui/align.h>
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 #include <ui/button.h>
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 #include <ui/checkbox.h>
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 #include <ui/frame.h>
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 #include <ui/label.h>
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 #include <ui/theme.h>
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 #include <ui/ui.h>
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
37
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 #define W (1280)
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 #define H (720)
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
40
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 #define FRAME_ORIGIN_X (10)
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 #define FRAME_ORIGIN_Y (10)
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 #define FRAME_WIDTH (400)
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 #define FRAME_HEIGHT (200)
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
45
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 #define HEADER_HEIGHT (32)
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
47
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 #define ELEMENT_HEIGHT (20)
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
49
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 /*
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 * We design a basic UI like this.
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 *
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 * FRAME_WIDTH
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 * +---------------------------------------------+--
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 * | Title | | HEADER_HEIGHT
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 * +---------------------------------------------+--
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
57 * | [x] Auto save |
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 * | |
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 * | |
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 * | [ Quit ] |
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
61 * +---------------------------------------------+
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 */
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
63 static struct {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 struct {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 int active;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 int x;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 int y;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 } motion;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
69
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 struct {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 struct frame frame;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 } panel;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
73
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 struct {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 struct label label;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
76 } header;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
77
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 struct {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
79 struct checkbox cb;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 struct label label;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 } autosave;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
82
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
83 struct {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
84 struct button button;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
85 } quit;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 } ui = {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 .panel = {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
88 .frame = {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
89 .x = FRAME_ORIGIN_X,
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
90 .y = FRAME_ORIGIN_Y,
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
91 .w = FRAME_WIDTH,
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
92 .h = FRAME_HEIGHT
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
93 }
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
94 },
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 .header = {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
96 .label = {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
97 .text = "Preferences",
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
98 .x = FRAME_ORIGIN_X,
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
99 .y = FRAME_ORIGIN_Y,
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
100 .flags = LABEL_FLAGS_SHADOW,
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
101 }
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
102 },
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
103 .autosave = {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
104 .cb = {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
105 .w = ELEMENT_HEIGHT,
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
106 .h = ELEMENT_HEIGHT
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
107 },
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
108 .label = {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
109 .text = "Auto save game",
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
110 .flags = LABEL_FLAGS_SHADOW,
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
111 }
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
112 },
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
113 .quit = {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
114 .button = {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
115 .text = "Quit",
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
116 .h = ELEMENT_HEIGHT
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
117 }
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
118 }
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
119 };
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
120
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
121 static struct state *states[1];
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
122
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
123 static void
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
124 init(void)
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
125 {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
126 if (core_init("fr.malikania", "example-ui") < 0 || ui_init() < 0)
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
127 panic();
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
128 if (window_open("Example - UI", W, H) < 0)
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
129 panic();
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
130 }
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
131
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
132 static void
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
133 resize_header(void)
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
134 {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
135 struct frame *f = &ui.panel.frame;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
136 struct label *l = &ui.header.label;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
137 unsigned int w, h;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
138
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
139 /* Header. */
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
140 label_query(l, &w, &h);
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
141 align(ALIGN_LEFT, &l->x, &l->y, w, h, f->x, f->y, f->w, HEADER_HEIGHT);
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
142
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
143 l->x += theme_default()->padding;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
144 }
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
145
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
146 static void
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
147 resize_autosave(void)
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
148 {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
149 unsigned int padding = theme_default()->padding;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
150 struct frame *f = &ui.panel.frame;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
151 struct checkbox *c = &ui.autosave.cb;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
152 struct label *l = &ui.autosave.label;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
153
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
154 c->x = f->x + padding;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
155 c->y = f->y + HEADER_HEIGHT + padding;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
156
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
157 l->x = c->x + c->w + padding;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
158 l->y = c->y;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
159 }
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
160
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
161 static void
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
162 resize_button(void)
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
163 {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
164 unsigned int padding = theme_default()->padding;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
165 struct frame *f = &ui.panel.frame;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
166 struct button *b = &ui.quit.button;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
167
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
168 /* Button. */
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
169 b->w = f->w / 4;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
170
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
171 align(ALIGN_BOTTOM_RIGHT, &b->x, &b->y, b->w, b->h,
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
172 f->x, f->y, f->w, f->h);
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
173
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
174 b->x -= padding;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
175 b->y -= padding;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
176 }
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
177
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
178 static void
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
179 resize(void)
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
180 {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
181 resize_header();
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
182 resize_autosave();
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
183 resize_button();
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
184 }
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
185
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
186 static int
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
187 headerclick(int x, int y)
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
188 {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
189 return maths_is_boxed(
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
190 ui.panel.frame.x,
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
191 ui.panel.frame.y,
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
192 ui.panel.frame.w,
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
193 HEADER_HEIGHT,
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
194 x,
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
195 y
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
196 );
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
197 }
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
198
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
199 static void
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
200 handle(struct state *st, const union event *ev)
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
201 {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
202 (void)st;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
203
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
204 switch (ev->type) {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
205 case EVENT_QUIT:
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
206 game_quit();
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
207 break;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
208 case EVENT_MOUSE:
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
209 if (ui.motion.active) {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
210 ui.panel.frame.x += ev->mouse.x - ui.motion.x;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
211 ui.panel.frame.y += ev->mouse.y - ui.motion.y;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
212 ui.motion.x = ev->mouse.x;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
213 ui.motion.y = ev->mouse.y;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
214 resize();
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
215 }
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
216 break;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
217 case EVENT_CLICKDOWN:
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
218 if (headerclick(ev->click.x, ev->click.y)) {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
219 ui.motion.active = 1;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
220 ui.motion.x = ev->click.x;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
221 ui.motion.y = ev->click.y;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
222 window_set_cursor(WINDOW_CURSOR_SIZE);
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
223 }
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
224 break;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
225 case EVENT_CLICKUP:
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
226 ui.motion.active = 0;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
227 window_set_cursor(WINDOW_CURSOR_ARROW);
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
228 break;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
229 default:
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
230 break;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
231 }
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
232
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
233 checkbox_handle(&ui.autosave.cb, ev);
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
234
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
235 if (button_handle(&ui.quit.button, ev))
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
236 game_quit();
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
237 }
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
238
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
239 static void
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
240 draw(struct state *st)
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
241 {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
242 (void)st;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
243
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
244 painter_set_color(0xffffffff);
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
245 painter_clear();
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
246 frame_draw(&ui.panel.frame);
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
247 label_draw(&ui.header.label);
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
248 checkbox_draw(&ui.autosave.cb);
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
249 label_draw(&ui.autosave.label);
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
250 button_draw(&ui.quit.button);
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
251 painter_present();
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
252 }
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
253
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
254 static void
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
255 run(void)
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
256 {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
257 struct state state = {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
258 .handle = handle,
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
259 .draw = draw
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
260 };
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
261
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
262 resize();
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
263
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
264 game_init(states, UTIL_SIZE(states));
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
265 game_push(&state);
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
266 game_loop();
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
267 }
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
268
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
269 static void
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
270 quit(void)
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
271 {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
272 window_finish();
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
273 ui_finish();
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
274 core_finish();
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
275 }
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
276
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
277 int
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
278 main(int argc, char **argv)
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
279 {
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
280 (void)argc;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
281 (void)argv;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
282
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
283 init();
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
284 run();
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
285 quit();
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
286
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
287 return 0;
a5b98db4fd87 misc: fix .hgignore too greedy
David Demelier <markand@malikania.fr>
parents:
diff changeset
288 }