Mercurial > molko
annotate libcore/core/font.h @ 121:789b23e01f52
misc: reorganize hierarchy, closes #2490
author | David Demelier <markand@malikania.fr> |
---|---|
date | Mon, 05 Oct 2020 13:25:06 +0200 |
parents | src/core/font.h@ed72843a7194 |
children | 28d9bb62fcb1 |
rev | line source |
---|---|
10
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 * font.h -- basic font management |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
4 * Copyright (c) 2020 David Demelier <markand@malikania.fr> |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 #ifndef MOLKO_FONT_H |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 #define MOLKO_FONT_H |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 /** |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 * \file font.h |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
24 * \brief Basic font management. |
72
6203e1ac9b18
doc: improve doxygen documentation a lot
David Demelier <markand@malikania.fr>
parents:
59
diff
changeset
|
25 * \ingroup drawing |
10
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 */ |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 |
94
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
28 #include <stdbool.h> |
10
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 #include <stddef.h> |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
31 struct texture; |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
32 |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 /** |
79
8f95462ac5f8
core: create a debugging API, closes #2469 @2h
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
34 * \brief Font style for rendering. |
8f95462ac5f8
core: create a debugging API, closes #2469 @2h
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
35 */ |
8f95462ac5f8
core: create a debugging API, closes #2469 @2h
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
36 enum font_style { |
94
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
37 FONT_STYLE_ANTIALIASED, /*!< Pretty antialiasing looking. */ |
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
38 FONT_STYLE_NONE /*!< No antialiasing. */ |
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
39 }; |
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
40 |
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
41 /** |
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
42 * \brief Font object. |
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
43 */ |
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
44 struct font { |
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
45 enum font_style style; /*!< (RW) Style for rendering. */ |
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
46 unsigned long color; /*!< (RW) Color for rendering. */ |
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
47 void *handle; /*!< (RO) Native handle. */ |
79
8f95462ac5f8
core: create a debugging API, closes #2469 @2h
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
48 }; |
8f95462ac5f8
core: create a debugging API, closes #2469 @2h
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
49 |
8f95462ac5f8
core: create a debugging API, closes #2469 @2h
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
50 /** |
10
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 * Open font from path file. |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
52 * |
94
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
53 * \pre font != NULL |
10
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 * \pre path != NULL |
94
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
55 * \param font the font to initialize |
10
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 * \param path the path to the font |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 * \param size the desired size |
94
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
58 * \return False on errors. |
10
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 */ |
94
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
60 bool |
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
61 font_open(struct font *font, const char *path, unsigned int size); |
10
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
63 /** |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 * Open font from memory buffer. |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 * |
94
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
66 * \pre font != NULL |
10
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 * \pre buffer != NULL |
94
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
68 * \param font the font to initialize |
10
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 * \param buffer the memory buffer |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 * \param buflen the memory buffer length |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 * \param size the desired size |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 * \warning The buffer must remain valid until font is closed |
94
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
73 * \return False on errors. |
10
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
74 */ |
94
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
75 bool |
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
76 font_openmem(struct font *font, const void *buffer, size_t buflen, unsigned int size); |
79
8f95462ac5f8
core: create a debugging API, closes #2469 @2h
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
77 |
8f95462ac5f8
core: create a debugging API, closes #2469 @2h
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
78 /** |
94
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
79 * Tells if the font was properly opened. |
10
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
80 * |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
81 * \pre font != NULL |
94
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
82 * \param font the font to check |
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
83 * \return True if the native handle was opened. |
10
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
84 */ |
94
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
85 bool |
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
86 font_ok(const struct font *font); |
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
87 |
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
88 /** |
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
89 * Render some text into the texture. |
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
90 * |
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
91 * This function use the current color/style and other properties in the font |
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
92 * to render the texture. |
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
93 * |
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
94 * \pre font != NULL |
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
95 * \pre tex != NULL |
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
96 * \param font the font to use |
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
97 * \param tex the texture to generate |
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
98 * \param text the UTF-8 text |
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
99 * \return False on errors. |
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
100 */ |
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
101 bool |
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
102 font_render(struct font *font, struct texture *tex, const char *text); |
79
8f95462ac5f8
core: create a debugging API, closes #2469 @2h
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
103 |
8f95462ac5f8
core: create a debugging API, closes #2469 @2h
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
104 /** |
8f95462ac5f8
core: create a debugging API, closes #2469 @2h
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
105 * Get the maximum height for all glyphs. |
8f95462ac5f8
core: create a debugging API, closes #2469 @2h
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
106 * |
8f95462ac5f8
core: create a debugging API, closes #2469 @2h
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
107 * \pre font != NULL |
8f95462ac5f8
core: create a debugging API, closes #2469 @2h
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
108 * \param font the font handle |
8f95462ac5f8
core: create a debugging API, closes #2469 @2h
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
109 * \return the height in pixels |
8f95462ac5f8
core: create a debugging API, closes #2469 @2h
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
110 */ |
8f95462ac5f8
core: create a debugging API, closes #2469 @2h
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
111 unsigned int |
8f95462ac5f8
core: create a debugging API, closes #2469 @2h
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
112 font_height(const struct font *font); |
10
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
113 |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
114 /** |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
115 * Close the font. |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
116 * |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
117 * \pre font != NULL |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
118 * \param font the font handle |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
119 */ |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
120 void |
94
ed72843a7194
core: simplify font/texture interfaces
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
121 font_finish(struct font *font); |
10
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
122 |
c91c3272101b
core: implement fonts, closes #2444
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
123 #endif /* !MOLKO_FONT_H */ |