Mercurial > molko
annotate src/painter.h @ 46:b815621df3e3
core: remove all fixed width integers, closes #2460
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 15 Jan 2020 22:31:17 +0100 |
parents | 291be94202c7 |
children |
rev | line source |
---|---|
28
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 * painter.h -- basic drawing routines |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
4 * Copyright (c) 2020 David Demelier <markand@malikania.fr> |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 #ifndef MOLKO_PAINTER_H |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 #define MOLKO_PAINTER_H |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 /** |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 * \file painter.h |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
24 * \brief Basic drawing routines. |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 */ |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 #include <stdbool.h> |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 struct texture; |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
31 /** |
41
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
32 * Give the current texture being used for rendering, maybe NULL if the |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
33 * rendering is on root. |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
34 * |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
35 * \return texture or NULL |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
36 */ |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
37 struct texture * |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
38 painter_get_target(void); |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
39 |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
40 /** |
28
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 * Set the rendering context to the given texture. |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
42 * |
41
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
43 * Since this function change an internal global variable it is strongly |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
44 * encouraged to store a local backup of the current texture using \a |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
45 * painter_get_target and call this function with it afterwards. |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
46 * |
28
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 * If texture is NULL, use default context aka the window. |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 * |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 * \param tex the texture |
43
291be94202c7
core: add PAINTER_(BEGIN|END) helpers, closes #2456
David Demelier <markand@malikania.fr>
parents:
41
diff
changeset
|
50 * \see PAINTER_BEGIN |
291be94202c7
core: add PAINTER_(BEGIN|END) helpers, closes #2456
David Demelier <markand@malikania.fr>
parents:
41
diff
changeset
|
51 * \see PAINTER_END |
28
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
52 */ |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 void |
41
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
54 painter_set_target(struct texture *tex); |
28
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 /** |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 * Get the current drawing color. |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
58 * |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 * \return the color in RRGGBBAA format |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 */ |
46
b815621df3e3
core: remove all fixed width integers, closes #2460
David Demelier <markand@malikania.fr>
parents:
43
diff
changeset
|
61 unsigned long |
28
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 painter_get_color(void); |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
63 |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 /** |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 * Set the rendering drawing color. |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
66 * |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 * \param color in RRGGBBAA format |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 */ |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 void |
46
b815621df3e3
core: remove all fixed width integers, closes #2460
David Demelier <markand@malikania.fr>
parents:
43
diff
changeset
|
70 painter_set_color(unsigned long color); |
28
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 /** |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
73 * Draw a line. |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
74 * |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
75 * \param x1 first X coordinate |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
76 * \param y1 first Y coordinate |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
77 * \param x2 second X coordinate |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
78 * \param y2 second Y coordinate |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
79 */ |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
80 void |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
81 painter_draw_line(int x1, int y1, int x2, int y2); |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
82 |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
83 /** |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
84 * Draw a pixel point. |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
85 * |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
86 * \param x the X coordinate |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
87 * \param y the Y coordinate |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
88 */ |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
89 void |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
90 painter_draw_point(int x, int y); |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
91 |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
92 /** |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
93 * Draw a rectangle |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
94 * |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
95 * \param fill set to true to fill the rectangle |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
96 * \param x the X coordinate |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
97 * \param y the Y coordinate |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
98 * \param w the rectangle width |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
99 * \param h the rectangle height |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
100 */ |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
101 void |
46
b815621df3e3
core: remove all fixed width integers, closes #2460
David Demelier <markand@malikania.fr>
parents:
43
diff
changeset
|
102 painter_draw_rectangle(bool fill, int x, int y, unsigned int w, unsigned int h); |
28
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
103 |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
104 /** |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
105 * Clear the window. |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
106 */ |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
107 void |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
108 painter_clear(void); |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
109 |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
110 /** |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
111 * Present the window, only call this function one time in the main loop. |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
112 */ |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
113 void |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
114 painter_present(void); |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
115 |
43
291be94202c7
core: add PAINTER_(BEGIN|END) helpers, closes #2456
David Demelier <markand@malikania.fr>
parents:
41
diff
changeset
|
116 /** |
291be94202c7
core: add PAINTER_(BEGIN|END) helpers, closes #2456
David Demelier <markand@malikania.fr>
parents:
41
diff
changeset
|
117 * Use this macro to start painting on the texture to store the current |
291be94202c7
core: add PAINTER_(BEGIN|END) helpers, closes #2456
David Demelier <markand@malikania.fr>
parents:
41
diff
changeset
|
118 * rendering context and put it back afterwards. |
291be94202c7
core: add PAINTER_(BEGIN|END) helpers, closes #2456
David Demelier <markand@malikania.fr>
parents:
41
diff
changeset
|
119 * |
291be94202c7
core: add PAINTER_(BEGIN|END) helpers, closes #2456
David Demelier <markand@malikania.fr>
parents:
41
diff
changeset
|
120 * \pre tex != NULL |
291be94202c7
core: add PAINTER_(BEGIN|END) helpers, closes #2456
David Demelier <markand@malikania.fr>
parents:
41
diff
changeset
|
121 * \param tex the texture to use |
291be94202c7
core: add PAINTER_(BEGIN|END) helpers, closes #2456
David Demelier <markand@malikania.fr>
parents:
41
diff
changeset
|
122 * \see PAINTER_END |
291be94202c7
core: add PAINTER_(BEGIN|END) helpers, closes #2456
David Demelier <markand@malikania.fr>
parents:
41
diff
changeset
|
123 */ |
291be94202c7
core: add PAINTER_(BEGIN|END) helpers, closes #2456
David Demelier <markand@malikania.fr>
parents:
41
diff
changeset
|
124 #define PAINTER_BEGIN(tex ) \ |
291be94202c7
core: add PAINTER_(BEGIN|END) helpers, closes #2456
David Demelier <markand@malikania.fr>
parents:
41
diff
changeset
|
125 do { \ |
291be94202c7
core: add PAINTER_(BEGIN|END) helpers, closes #2456
David Demelier <markand@malikania.fr>
parents:
41
diff
changeset
|
126 struct texture *__current_texture__; \ |
291be94202c7
core: add PAINTER_(BEGIN|END) helpers, closes #2456
David Demelier <markand@malikania.fr>
parents:
41
diff
changeset
|
127 \ |
291be94202c7
core: add PAINTER_(BEGIN|END) helpers, closes #2456
David Demelier <markand@malikania.fr>
parents:
41
diff
changeset
|
128 __current_texture__ = painter_get_target(); \ |
291be94202c7
core: add PAINTER_(BEGIN|END) helpers, closes #2456
David Demelier <markand@malikania.fr>
parents:
41
diff
changeset
|
129 painter_set_target((tex)) |
291be94202c7
core: add PAINTER_(BEGIN|END) helpers, closes #2456
David Demelier <markand@malikania.fr>
parents:
41
diff
changeset
|
130 |
291be94202c7
core: add PAINTER_(BEGIN|END) helpers, closes #2456
David Demelier <markand@malikania.fr>
parents:
41
diff
changeset
|
131 /** |
291be94202c7
core: add PAINTER_(BEGIN|END) helpers, closes #2456
David Demelier <markand@malikania.fr>
parents:
41
diff
changeset
|
132 * Use this macro at the end of rendering into a given texture. |
291be94202c7
core: add PAINTER_(BEGIN|END) helpers, closes #2456
David Demelier <markand@malikania.fr>
parents:
41
diff
changeset
|
133 * |
291be94202c7
core: add PAINTER_(BEGIN|END) helpers, closes #2456
David Demelier <markand@malikania.fr>
parents:
41
diff
changeset
|
134 * \see PAINTER_BEGIN |
291be94202c7
core: add PAINTER_(BEGIN|END) helpers, closes #2456
David Demelier <markand@malikania.fr>
parents:
41
diff
changeset
|
135 */ |
291be94202c7
core: add PAINTER_(BEGIN|END) helpers, closes #2456
David Demelier <markand@malikania.fr>
parents:
41
diff
changeset
|
136 #define PAINTER_END() \ |
291be94202c7
core: add PAINTER_(BEGIN|END) helpers, closes #2456
David Demelier <markand@malikania.fr>
parents:
41
diff
changeset
|
137 painter_set_target(__current_texture__); \ |
291be94202c7
core: add PAINTER_(BEGIN|END) helpers, closes #2456
David Demelier <markand@malikania.fr>
parents:
41
diff
changeset
|
138 } while (0) |
291be94202c7
core: add PAINTER_(BEGIN|END) helpers, closes #2456
David Demelier <markand@malikania.fr>
parents:
41
diff
changeset
|
139 |
28
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
140 #endif /* !MOLKO_PAINTER_H */ |