Mercurial > molko
annotate libcore/core/theme.c @ 135:eadfed7674ac
misc: fix all warnings
author | David Demelier <markand@malikania.fr> |
---|---|
date | Sun, 11 Oct 2020 15:01:26 +0200 |
parents | 197374e9f0b2 |
children | 7f1af54bb35a |
rev | line source |
---|---|
99
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 * theme.c -- abstract theming |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
4 * Copyright (c) 2020 David Demelier <markand@malikania.fr> |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 #include <assert.h> |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 #include <stddef.h> |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 #include "button.h" |
115
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
23 #include "checkbox.h" |
99
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
24 #include "font.h" |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 #include "frame.h" |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 #include "label.h" |
107
62aeb864093f
molko-bcc: initial import
David Demelier <markand@malikania.fr>
parents:
106
diff
changeset
|
27 #include "maths.h" |
99
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 #include "painter.h" |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 #include "panic.h" |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 #include "texture.h" |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
31 #include "theme.h" |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
32 #include "util.h" |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 |
133
c46f80820b42
core: revamp debug using theme
David Demelier <markand@malikania.fr>
parents:
121
diff
changeset
|
34 #include <core/assets/fonts/f25-bank-printer.h> |
c46f80820b42
core: revamp debug using theme
David Demelier <markand@malikania.fr>
parents:
121
diff
changeset
|
35 #include <core/assets/fonts/comic-neue.h> |
102
26fef20fd89d
inventory_dialog: draw basic shapes
David Demelier <markand@malikania.fr>
parents:
101
diff
changeset
|
36 |
108
5e38f88cb9ab
make: generate binary files during build
David Demelier <markand@malikania.fr>
parents:
107
diff
changeset
|
37 #define THEME(t) (t ? t : &default_theme) |
102
26fef20fd89d
inventory_dialog: draw basic shapes
David Demelier <markand@malikania.fr>
parents:
101
diff
changeset
|
38 |
115
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
39 #define CHECKBOX_W 16 |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
40 #define CHECKBOX_H 16 |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
41 #define CHECKBOX_RAD 6 |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
42 |
99
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 static void |
105
f6b5e2fbbc81
inventory_dialog: add basic movements
David Demelier <markand@malikania.fr>
parents:
102
diff
changeset
|
44 box(int x, int y, unsigned int w, unsigned int h) |
f6b5e2fbbc81
inventory_dialog: add basic movements
David Demelier <markand@malikania.fr>
parents:
102
diff
changeset
|
45 { |
f6b5e2fbbc81
inventory_dialog: add basic movements
David Demelier <markand@malikania.fr>
parents:
102
diff
changeset
|
46 /* Some basic outlines. */ |
f6b5e2fbbc81
inventory_dialog: add basic movements
David Demelier <markand@malikania.fr>
parents:
102
diff
changeset
|
47 painter_set_color(0x4d3533ff); |
f6b5e2fbbc81
inventory_dialog: add basic movements
David Demelier <markand@malikania.fr>
parents:
102
diff
changeset
|
48 |
f6b5e2fbbc81
inventory_dialog: add basic movements
David Demelier <markand@malikania.fr>
parents:
102
diff
changeset
|
49 painter_draw_line(x, y, x + w, y); |
f6b5e2fbbc81
inventory_dialog: add basic movements
David Demelier <markand@malikania.fr>
parents:
102
diff
changeset
|
50 painter_draw_line(x, y + h, x + w, y + h); |
f6b5e2fbbc81
inventory_dialog: add basic movements
David Demelier <markand@malikania.fr>
parents:
102
diff
changeset
|
51 painter_draw_line(x, y, x, y + h); |
f6b5e2fbbc81
inventory_dialog: add basic movements
David Demelier <markand@malikania.fr>
parents:
102
diff
changeset
|
52 painter_draw_line(x + w, y, x + w, y + h); |
f6b5e2fbbc81
inventory_dialog: add basic movements
David Demelier <markand@malikania.fr>
parents:
102
diff
changeset
|
53 } |
f6b5e2fbbc81
inventory_dialog: add basic movements
David Demelier <markand@malikania.fr>
parents:
102
diff
changeset
|
54 |
f6b5e2fbbc81
inventory_dialog: add basic movements
David Demelier <markand@malikania.fr>
parents:
102
diff
changeset
|
55 static void |
99
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 draw_frame(struct theme *t, const struct frame *frame) |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 { |
135
eadfed7674ac
misc: fix all warnings
David Demelier <markand@malikania.fr>
parents:
134
diff
changeset
|
58 (void)t; |
eadfed7674ac
misc: fix all warnings
David Demelier <markand@malikania.fr>
parents:
134
diff
changeset
|
59 |
102
26fef20fd89d
inventory_dialog: draw basic shapes
David Demelier <markand@malikania.fr>
parents:
101
diff
changeset
|
60 if (frame->style == FRAME_STYLE_BOX) |
26fef20fd89d
inventory_dialog: draw basic shapes
David Demelier <markand@malikania.fr>
parents:
101
diff
changeset
|
61 painter_set_color(0x6e4c30ff); |
26fef20fd89d
inventory_dialog: draw basic shapes
David Demelier <markand@malikania.fr>
parents:
101
diff
changeset
|
62 else |
26fef20fd89d
inventory_dialog: draw basic shapes
David Demelier <markand@malikania.fr>
parents:
101
diff
changeset
|
63 painter_set_color(0xce9248ff); |
26fef20fd89d
inventory_dialog: draw basic shapes
David Demelier <markand@malikania.fr>
parents:
101
diff
changeset
|
64 |
99
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 painter_draw_rectangle(frame->x, frame->y, frame->w, frame->h); |
105
f6b5e2fbbc81
inventory_dialog: add basic movements
David Demelier <markand@malikania.fr>
parents:
102
diff
changeset
|
66 box(frame->x, frame->y, frame->w, frame->h); |
99
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 } |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 static void |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 draw_label(struct theme *t, const struct label *label) |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 { |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 struct texture tex; |
102
26fef20fd89d
inventory_dialog: draw basic shapes
David Demelier <markand@malikania.fr>
parents:
101
diff
changeset
|
73 int x = label->x, y = label->y; |
26fef20fd89d
inventory_dialog: draw basic shapes
David Demelier <markand@malikania.fr>
parents:
101
diff
changeset
|
74 int *px = &x, *py = &y; |
26fef20fd89d
inventory_dialog: draw basic shapes
David Demelier <markand@malikania.fr>
parents:
101
diff
changeset
|
75 |
26fef20fd89d
inventory_dialog: draw basic shapes
David Demelier <markand@malikania.fr>
parents:
101
diff
changeset
|
76 if (label->flags & LABEL_NO_HCENTER) |
26fef20fd89d
inventory_dialog: draw basic shapes
David Demelier <markand@malikania.fr>
parents:
101
diff
changeset
|
77 px = NULL; |
26fef20fd89d
inventory_dialog: draw basic shapes
David Demelier <markand@malikania.fr>
parents:
101
diff
changeset
|
78 if (label->flags & LABEL_NO_VCENTER) |
26fef20fd89d
inventory_dialog: draw basic shapes
David Demelier <markand@malikania.fr>
parents:
101
diff
changeset
|
79 py = NULL; |
99
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
80 |
101
0bc32f70d67c
label: add more customization
David Demelier <markand@malikania.fr>
parents:
99
diff
changeset
|
81 /* Shadow text, only if enabled. */ |
0bc32f70d67c
label: add more customization
David Demelier <markand@malikania.fr>
parents:
99
diff
changeset
|
82 if (!(label->flags & LABEL_NO_SHADOW)) { |
0bc32f70d67c
label: add more customization
David Demelier <markand@malikania.fr>
parents:
99
diff
changeset
|
83 t->fonts[THEME_FONT_INTERFACE]->color = t->colors[THEME_COLOR_SHADOW]; |
0bc32f70d67c
label: add more customization
David Demelier <markand@malikania.fr>
parents:
99
diff
changeset
|
84 |
0bc32f70d67c
label: add more customization
David Demelier <markand@malikania.fr>
parents:
99
diff
changeset
|
85 if (!font_render(t->fonts[THEME_FONT_INTERFACE], &tex, label->text)) |
0bc32f70d67c
label: add more customization
David Demelier <markand@malikania.fr>
parents:
99
diff
changeset
|
86 panic(); |
0bc32f70d67c
label: add more customization
David Demelier <markand@malikania.fr>
parents:
99
diff
changeset
|
87 |
106
ed1a6bb02a78
inventory_dialog: use a small circle as test
David Demelier <markand@malikania.fr>
parents:
105
diff
changeset
|
88 maths_centerize(px, py, tex.w, tex.h, |
102
26fef20fd89d
inventory_dialog: draw basic shapes
David Demelier <markand@malikania.fr>
parents:
101
diff
changeset
|
89 label->x, label->y, label->w, label->h); |
26fef20fd89d
inventory_dialog: draw basic shapes
David Demelier <markand@malikania.fr>
parents:
101
diff
changeset
|
90 |
26fef20fd89d
inventory_dialog: draw basic shapes
David Demelier <markand@malikania.fr>
parents:
101
diff
changeset
|
91 texture_draw(&tex, x + 1, y + 1); |
101
0bc32f70d67c
label: add more customization
David Demelier <markand@malikania.fr>
parents:
99
diff
changeset
|
92 texture_finish(&tex); |
0bc32f70d67c
label: add more customization
David Demelier <markand@malikania.fr>
parents:
99
diff
changeset
|
93 } |
0bc32f70d67c
label: add more customization
David Demelier <markand@malikania.fr>
parents:
99
diff
changeset
|
94 |
0bc32f70d67c
label: add more customization
David Demelier <markand@malikania.fr>
parents:
99
diff
changeset
|
95 /* Normal text. */ |
0bc32f70d67c
label: add more customization
David Demelier <markand@malikania.fr>
parents:
99
diff
changeset
|
96 t->fonts[THEME_FONT_INTERFACE]->color = label->color |
0bc32f70d67c
label: add more customization
David Demelier <markand@malikania.fr>
parents:
99
diff
changeset
|
97 ? label->color |
0bc32f70d67c
label: add more customization
David Demelier <markand@malikania.fr>
parents:
99
diff
changeset
|
98 : t->colors[THEME_COLOR_NORMAL]; |
0bc32f70d67c
label: add more customization
David Demelier <markand@malikania.fr>
parents:
99
diff
changeset
|
99 |
99
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
100 if (!font_render(t->fonts[THEME_FONT_INTERFACE], &tex, label->text)) |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
101 panic(); |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
102 |
106
ed1a6bb02a78
inventory_dialog: use a small circle as test
David Demelier <markand@malikania.fr>
parents:
105
diff
changeset
|
103 maths_centerize(px, py, tex.w, tex.h, |
102
26fef20fd89d
inventory_dialog: draw basic shapes
David Demelier <markand@malikania.fr>
parents:
101
diff
changeset
|
104 label->x, label->y, label->w, label->h); |
26fef20fd89d
inventory_dialog: draw basic shapes
David Demelier <markand@malikania.fr>
parents:
101
diff
changeset
|
105 |
26fef20fd89d
inventory_dialog: draw basic shapes
David Demelier <markand@malikania.fr>
parents:
101
diff
changeset
|
106 texture_draw(&tex, x, y); |
99
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
107 texture_finish(&tex); |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
108 } |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
109 |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
110 static void |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
111 draw_button(struct theme *t, const struct button *button) |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
112 { |
135
eadfed7674ac
misc: fix all warnings
David Demelier <markand@malikania.fr>
parents:
134
diff
changeset
|
113 (void)t; |
eadfed7674ac
misc: fix all warnings
David Demelier <markand@malikania.fr>
parents:
134
diff
changeset
|
114 |
102
26fef20fd89d
inventory_dialog: draw basic shapes
David Demelier <markand@malikania.fr>
parents:
101
diff
changeset
|
115 struct label label = { |
26fef20fd89d
inventory_dialog: draw basic shapes
David Demelier <markand@malikania.fr>
parents:
101
diff
changeset
|
116 .text = button->text, |
26fef20fd89d
inventory_dialog: draw basic shapes
David Demelier <markand@malikania.fr>
parents:
101
diff
changeset
|
117 .x = button->x, |
26fef20fd89d
inventory_dialog: draw basic shapes
David Demelier <markand@malikania.fr>
parents:
101
diff
changeset
|
118 .y = button->y, |
26fef20fd89d
inventory_dialog: draw basic shapes
David Demelier <markand@malikania.fr>
parents:
101
diff
changeset
|
119 .w = button->w, |
26fef20fd89d
inventory_dialog: draw basic shapes
David Demelier <markand@malikania.fr>
parents:
101
diff
changeset
|
120 .h = button->h |
26fef20fd89d
inventory_dialog: draw basic shapes
David Demelier <markand@malikania.fr>
parents:
101
diff
changeset
|
121 }; |
99
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
122 |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
123 painter_set_color(0xabcdefff); |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
124 painter_draw_rectangle(button->x, button->y, button->w, button->h); |
102
26fef20fd89d
inventory_dialog: draw basic shapes
David Demelier <markand@malikania.fr>
parents:
101
diff
changeset
|
125 |
26fef20fd89d
inventory_dialog: draw basic shapes
David Demelier <markand@malikania.fr>
parents:
101
diff
changeset
|
126 label_draw(&label); |
105
f6b5e2fbbc81
inventory_dialog: add basic movements
David Demelier <markand@malikania.fr>
parents:
102
diff
changeset
|
127 |
f6b5e2fbbc81
inventory_dialog: add basic movements
David Demelier <markand@malikania.fr>
parents:
102
diff
changeset
|
128 box(button->x, button->y, button->w, button->h); |
99
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
129 } |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
130 |
115
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
131 static void |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
132 draw_checkbox(struct theme *t, const struct checkbox *cb) |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
133 { |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
134 box(cb->x, cb->y, CHECKBOX_W, CHECKBOX_H); |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
135 |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
136 if (cb->checked) |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
137 painter_draw_rectangle(cb->x + 5, cb->y + 5, CHECKBOX_W - 9, CHECKBOX_H - 9); |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
138 |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
139 if (cb->label) { |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
140 const unsigned int w = cb->w - (t->padding * 2) - CHECKBOX_W; |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
141 const int x = cb->x + (t->padding * 2) + CHECKBOX_W; |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
142 |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
143 struct label label = { |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
144 .text = cb->label, |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
145 .flags = LABEL_NO_HCENTER, |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
146 .x = x, |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
147 .y = cb->y, |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
148 .w = w, |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
149 .h = cb->h |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
150 }; |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
151 |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
152 draw_label(t, &label); |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
153 } |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
154 } |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
155 |
99
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
156 /* Default theme. */ |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
157 static struct theme default_theme = { |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
158 .colors = { |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
159 [THEME_COLOR_NORMAL] = 0xffffffff, |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
160 [THEME_COLOR_SELECTED] = 0x006554ff, |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
161 [THEME_COLOR_SHADOW] = 0x000000ff |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
162 }, |
115
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
163 .padding = 10, |
99
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
164 .draw_frame = draw_frame, |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
165 .draw_label = draw_label, |
115
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
166 .draw_button = draw_button, |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
167 .draw_checkbox = draw_checkbox |
99
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
168 }; |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
169 |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
170 /* Default font catalog. */ |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
171 #define FONT(bin, size, index) \ |
135
eadfed7674ac
misc: fix all warnings
David Demelier <markand@malikania.fr>
parents:
134
diff
changeset
|
172 { bin, sizeof (bin), size, &default_theme.fonts[index], {0} } |
99
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
173 |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
174 static struct font_catalog { |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
175 const unsigned char *data; |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
176 const size_t datasz; |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
177 unsigned int size; |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
178 struct font **dest; |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
179 struct font font; |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
180 } default_fonts[] = { |
134
197374e9f0b2
cmake: prefix assets with their directory
David Demelier <markand@malikania.fr>
parents:
133
diff
changeset
|
181 FONT(fonts_f25_bank_printer, 10, THEME_FONT_DEBUG), |
197374e9f0b2
cmake: prefix assets with their directory
David Demelier <markand@malikania.fr>
parents:
133
diff
changeset
|
182 FONT(fonts_comic_neue, 20, THEME_FONT_INTERFACE) |
99
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
183 }; |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
184 |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
185 bool |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
186 theme_init(void) |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
187 { |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
188 /* Open all fonts. */ |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
189 for (size_t i = 0; i < NELEM(default_fonts); ++i) { |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
190 struct font_catalog *fc = &default_fonts[i]; |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
191 |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
192 if (!font_openmem(&fc->font, fc->data, fc->datasz, fc->size)) |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
193 goto failed; |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
194 |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
195 /* Reference this font into the catalog. */ |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
196 *default_fonts[i].dest = &default_fonts[i].font; |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
197 } |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
198 |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
199 return true; |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
200 |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
201 failed: |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
202 theme_finish(); |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
203 |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
204 return false; |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
205 } |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
206 |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
207 struct theme * |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
208 theme_default(void) |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
209 { |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
210 return &default_theme; |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
211 } |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
212 |
115
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
213 unsigned int |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
214 theme_padding(const struct theme *t) |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
215 { |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
216 return THEME(t)->padding; |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
217 } |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
218 |
99
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
219 void |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
220 theme_draw_frame(struct theme *t, const struct frame *frame) |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
221 { |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
222 assert(frame); |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
223 |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
224 THEME(t)->draw_frame(THEME(t), frame); |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
225 } |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
226 |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
227 void |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
228 theme_draw_label(struct theme *t, const struct label *label) |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
229 { |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
230 assert(label); |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
231 |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
232 THEME(t)->draw_label(THEME(t), label); |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
233 } |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
234 |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
235 void |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
236 theme_draw_button(struct theme *t, const struct button *button) |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
237 { |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
238 assert(button); |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
239 |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
240 THEME(t)->draw_button(THEME(t), button); |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
241 } |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
242 |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
243 void |
115
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
244 theme_draw_checkbox(struct theme *t, const struct checkbox *cb) |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
245 { |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
246 assert(cb); |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
247 |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
248 THEME(t)->draw_checkbox(THEME(t), cb); |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
249 } |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
250 |
3bd0d3a39e30
core: implement checkbox, closes #2486
David Demelier <markand@malikania.fr>
parents:
108
diff
changeset
|
251 void |
99
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
252 theme_finish(void) |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
253 { |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
254 for (size_t i = 0; i < NELEM(default_fonts); ++i) { |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
255 font_finish(&default_fonts[i].font); |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
256 *default_fonts[i].dest = NULL; |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
257 } |
4ac71ac10c9f
core: start adding some UI elements
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
258 } |