Mercurial > molko
annotate src/painter.h @ 41:3996f873a54b
core: implement walksprite, closes #2455
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 15 Jan 2020 13:11:47 +0100 |
parents | 783841af4033 |
children | 291be94202c7 |
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 #include <stdint.h> |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 struct texture; |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
31 |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
32 /** |
41
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
33 * 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
|
34 * rendering is on root. |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
35 * |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
36 * \return texture or NULL |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
37 */ |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
38 struct texture * |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
39 painter_get_target(void); |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
40 |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
41 /** |
28
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
42 * Set the rendering context to the given texture. |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 * |
41
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
44 * 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
|
45 * 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
|
46 * 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
|
47 * |
28
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 * 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
|
49 * |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 * \param tex the texture |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 */ |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
52 void |
41
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
53 painter_set_target(struct texture *tex); |
28
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 |
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 * Get the current drawing color. |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 * |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
58 * \return the color in RRGGBBAA format |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 */ |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 uint32_t |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
61 painter_get_color(void); |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 |
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 * Set the rendering drawing color. |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 * |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
66 * \param color in RRGGBBAA format |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 */ |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 void |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 painter_set_color(uint32_t color); |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 |
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 * Draw a line. |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
73 * |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
74 * \param x1 first X coordinate |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
75 * \param y1 first Y coordinate |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
76 * \param x2 second X coordinate |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
77 * \param y2 second Y coordinate |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
78 */ |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
79 void |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
80 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
|
81 |
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 * Draw a pixel point. |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
84 * |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
85 * \param x the X coordinate |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
86 * \param y the Y coordinate |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
87 */ |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
88 void |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
89 painter_draw_point(int x, int y); |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
90 |
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 * Draw a rectangle |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
93 * |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
94 * \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
|
95 * \param x the X coordinate |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
96 * \param y the Y coordinate |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
97 * \param w the rectangle width |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
98 * \param h the rectangle height |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
99 */ |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
100 void |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
101 painter_draw_rectangle(bool fill, int x, int y, unsigned w, unsigned h); |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
102 |
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 * Clear the window. |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
105 */ |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
106 void |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
107 painter_clear(void); |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
108 |
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 * 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
|
111 */ |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
112 void |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
113 painter_present(void); |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
114 |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
115 #endif /* !MOLKO_PAINTER_H */ |