Mercurial > molko
annotate examples/example-font.c @ 193:78774cc2cc6b
doc: minimal typo
author | David Demelier <markand@malikania.fr> |
---|---|
date | Sat, 07 Nov 2020 19:26:51 +0100 |
parents | 6992085d47fd |
children | 133926e08d6e |
rev | line source |
---|---|
144
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 * example-font.c -- show how to use fonts |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
4 * Copyright (c) 2020 David Demelier <markand@malikania.fr> |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 #include <core/clock.h> |
156
c3a40062acc2
misc: create more generic startup function, closes #2500
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
20 #include <core/core.h> |
144
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 #include <core/event.h> |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 #include <core/font.h> |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 #include <core/painter.h> |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
24 #include <core/panic.h> |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 #include <core/sys.h> |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 #include <core/texture.h> |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 #include <core/util.h> |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 #include <core/window.h> |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 |
148
c577c15df07f
misc: split libraries, closes #2496
David Demelier <markand@malikania.fr>
parents:
144
diff
changeset
|
30 #include <ui/theme.h> |
156
c3a40062acc2
misc: create more generic startup function, closes #2500
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
31 #include <ui/ui.h> |
148
c577c15df07f
misc: split libraries, closes #2496
David Demelier <markand@malikania.fr>
parents:
144
diff
changeset
|
32 |
144
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 #define W (1280) |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 #define H (720) |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
35 |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
36 /* Friendly taken from: https://lospec.com/palette-list/apollo */ |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
37 static const unsigned long colors[] = { |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
38 0x3c5e8bff, /* Blue. */ |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
39 0x468232ff, /* Green. */ |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 0xad7757ff, /* Light brown. */ |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 0x884b2bff, /* Brown. */ |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
42 0x752438ff, /* Red. */ |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 0x7a367bff, /* Magenta. */ |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 0x151d28ff, /* Dark */ |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 0xc7cfccff, /* Christian Grey. */ |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
46 }; |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 static void |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 init(void) |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 { |
156
c3a40062acc2
misc: create more generic startup function, closes #2500
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
51 if (!core_init() || !ui_init()) |
c3a40062acc2
misc: create more generic startup function, closes #2500
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
52 panic(); |
c3a40062acc2
misc: create more generic startup function, closes #2500
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
53 if (!window_open("Example - Font", W, H)) |
144
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 panic(); |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 } |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 static void |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
58 run(void) |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 { |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 struct clock clock = {0}; |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
61 struct font *font = theme_default()->fonts[THEME_FONT_INTERFACE]; |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 int ci = 0; |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
63 enum font_style style = font->style; |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 clock_start(&clock); |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
66 |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 for (;;) { |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 struct texture tex; |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 union event ev; |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 unsigned int elapsed = clock_elapsed(&clock); |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 clock_start(&clock); |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
73 |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
74 while (event_poll(&ev)) { |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
75 switch (ev.type) { |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
76 case EVENT_KEYDOWN: |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
77 switch (ev.key.key) { |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
78 case KEY_LEFT: |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
79 if (ci > 0) |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
80 ci--; |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
81 break; |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
82 case KEY_RIGHT: |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
83 if ((size_t)ci < NELEM(colors)) |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
84 ci++; |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
85 break; |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
86 case KEY_SPACE: |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
87 if (style == FONT_STYLE_ANTIALIASED) |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
88 style = FONT_STYLE_NONE; |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
89 else |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
90 style = FONT_STYLE_ANTIALIASED; |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
91 default: |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
92 break; |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
93 } |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
94 break; |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
95 case EVENT_QUIT: |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
96 return; |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
97 default: |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
98 break; |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
99 } |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
100 } |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
101 |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
102 painter_set_color(0xffffffff); |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
103 painter_clear(); |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
104 |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
105 font->style = style; |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
106 |
174
6992085d47fd
ui: major theme overhaul, closes #2509 @1h
David Demelier <markand@malikania.fr>
parents:
156
diff
changeset
|
107 if (!font_render(font, &tex, "Example of text. Use <Left>/<Right> to change color and <Space> to toggle antialiasing.", colors[ci])) |
144
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
108 panic(); |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
109 |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
110 texture_draw(&tex, 10, 10); |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
111 painter_present(); |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
112 texture_finish(&tex); |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
113 |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
114 if ((elapsed = clock_elapsed(&clock)) < 20) |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
115 delay(20 - elapsed); |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
116 } |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
117 } |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
118 |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
119 static void |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
120 quit(void) |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
121 { |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
122 window_finish(); |
156
c3a40062acc2
misc: create more generic startup function, closes #2500
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
123 ui_finish(); |
c3a40062acc2
misc: create more generic startup function, closes #2500
David Demelier <markand@malikania.fr>
parents:
148
diff
changeset
|
124 core_finish(); |
144
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
125 } |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
126 |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
127 int |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
128 main(int argc, char **argv) |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
129 { |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
130 (void)argc; |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
131 (void)argv; |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
132 |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
133 init(); |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
134 run(); |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
135 quit(); |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
136 |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
137 return 0; |
28d9bb62fcb1
core: add font_box function, closes #2495
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
138 } |