Mercurial > molko
annotate src/painter.c @ 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 | 3996f873a54b |
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.c -- 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 #include "color.h" |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 #include "painter.h" |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 #include "texture_p.h" |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 #include "window_p.h" |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 |
41
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
24 static struct texture *renderer; |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
25 |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
26 struct texture * |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
27 painter_get_target(void) |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
28 { |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
29 return renderer; |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
30 } |
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
31 |
28
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
32 void |
41
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
33 painter_set_target(struct texture *tex) |
28
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 { |
41
3996f873a54b
core: implement walksprite, closes #2455
David Demelier <markand@malikania.fr>
parents:
28
diff
changeset
|
35 renderer = tex; |
28
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
36 SDL_SetRenderTarget(win.renderer, tex ? tex->handle : NULL); |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
37 } |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
38 |
46
b815621df3e3
core: remove all fixed width integers, closes #2460
David Demelier <markand@malikania.fr>
parents:
41
diff
changeset
|
39 unsigned long |
28
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 painter_get_color(void) |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 { |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
42 Uint8 r = 0, g = 0, b = 0, a = 0; |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 SDL_GetRenderDrawColor(win.renderer, &r, &g, &b, &a); |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
46 return COLOR_HEX(r, g, b, a); |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 } |
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 void |
46
b815621df3e3
core: remove all fixed width integers, closes #2460
David Demelier <markand@malikania.fr>
parents:
41
diff
changeset
|
50 painter_set_color(unsigned long color) |
28
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 SDL_SetRenderDrawColor( |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 win.renderer, |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 COLOR_R(color), |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 COLOR_G(color), |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 COLOR_B(color), |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 COLOR_A(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 } |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
61 void |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 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
|
63 { |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 SDL_RenderDrawLine(win.renderer, x1, y1, x2, y2); |
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 |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 void |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 painter_draw_point(int x1, int y1) |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 { |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 SDL_RenderDrawPoint(win.renderer, x1, y1); |
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 void |
46
b815621df3e3
core: remove all fixed width integers, closes #2460
David Demelier <markand@malikania.fr>
parents:
41
diff
changeset
|
74 painter_draw_rectangle(bool fill, int x, int y, unsigned int width, unsigned int height) |
28
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
75 { |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
76 const SDL_Rect rect = { |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
77 .w = width, |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
78 .h = height, |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
79 .x = x, |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
80 .y = y |
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 if (fill) |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
84 SDL_RenderFillRect(win.renderer, &rect); |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
85 else |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
86 SDL_RenderDrawRect(win.renderer, &rect); |
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 |
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_clear(void) |
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 SDL_RenderClear(win.renderer); |
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 |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
95 void |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
96 painter_present(void) |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
97 { |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
98 SDL_RenderPresent(win.renderer); |
783841af4033
core: implement painter API, closes #2451 @1h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
99 } |