Tue, 01 Jul 2025 20:28:49 +0200
add ellipsis shader - resolves #385
48 | 1 | /* |
2 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. | |
82
4e1e698f4b0d
add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
75
diff
changeset
|
3 | * Copyright 2025 Mike Becker. All rights reserved. |
48 | 4 | * |
5 | * Redistribution and use in source and binary forms, with or without | |
6 | * modification, are permitted provided that the following conditions are met: | |
7 | * | |
8 | * 1. Redistributions of source code must retain the above copyright | |
9 | * notice, this list of conditions and the following disclaimer. | |
10 | * | |
11 | * 2. Redistributions in binary form must reproduce the above copyright | |
12 | * notice, this list of conditions and the following disclaimer in the | |
13 | * documentation and/or other materials provided with the distribution. | |
14 | * | |
15 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |
16 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
17 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
18 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE | |
19 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |
20 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |
21 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |
22 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |
23 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |
24 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |
25 | * POSSIBILITY OF SUCH DAMAGE. | |
26 | */ | |
27 | ||
82
4e1e698f4b0d
add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
75
diff
changeset
|
28 | #ifndef ASCENSION_2D_H |
4e1e698f4b0d
add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
75
diff
changeset
|
29 | #define ASCENSION_2D_H |
48 | 30 | |
151
42960d0c879b
adds first basic rectangle shader
Mike Becker <universe@uap-core.de>
parents:
143
diff
changeset
|
31 | #include "scene_node.h" |
42960d0c879b
adds first basic rectangle shader
Mike Becker <universe@uap-core.de>
parents:
143
diff
changeset
|
32 | #include "mesh.h" |
42960d0c879b
adds first basic rectangle shader
Mike Becker <universe@uap-core.de>
parents:
143
diff
changeset
|
33 | |
42960d0c879b
adds first basic rectangle shader
Mike Becker <universe@uap-core.de>
parents:
143
diff
changeset
|
34 | typedef struct asc_rectangle_s { |
42960d0c879b
adds first basic rectangle shader
Mike Becker <universe@uap-core.de>
parents:
143
diff
changeset
|
35 | AscSceneNode node; |
42960d0c879b
adds first basic rectangle shader
Mike Becker <universe@uap-core.de>
parents:
143
diff
changeset
|
36 | AscMesh mesh; |
42960d0c879b
adds first basic rectangle shader
Mike Becker <universe@uap-core.de>
parents:
143
diff
changeset
|
37 | asc_col4f color; |
159
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
38 | asc_col4f border_color; |
167
8e6a661c87db
add functions to upload common uniforms
Mike Becker <universe@uap-core.de>
parents:
159
diff
changeset
|
39 | asc_vec2f size; |
158
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
151
diff
changeset
|
40 | float radius; |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
151
diff
changeset
|
41 | float thickness; |
159
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
42 | bool filled; |
151
42960d0c879b
adds first basic rectangle shader
Mike Becker <universe@uap-core.de>
parents:
143
diff
changeset
|
43 | } AscRectangle; |
42960d0c879b
adds first basic rectangle shader
Mike Becker <universe@uap-core.de>
parents:
143
diff
changeset
|
44 | |
42960d0c879b
adds first basic rectangle shader
Mike Becker <universe@uap-core.de>
parents:
143
diff
changeset
|
45 | struct asc_rectangle_create_args { |
42960d0c879b
adds first basic rectangle shader
Mike Becker <universe@uap-core.de>
parents:
143
diff
changeset
|
46 | asc_recti bounds; |
42960d0c879b
adds first basic rectangle shader
Mike Becker <universe@uap-core.de>
parents:
143
diff
changeset
|
47 | int x; |
42960d0c879b
adds first basic rectangle shader
Mike Becker <universe@uap-core.de>
parents:
143
diff
changeset
|
48 | int y; |
42960d0c879b
adds first basic rectangle shader
Mike Becker <universe@uap-core.de>
parents:
143
diff
changeset
|
49 | unsigned int width; |
42960d0c879b
adds first basic rectangle shader
Mike Becker <universe@uap-core.de>
parents:
143
diff
changeset
|
50 | unsigned int height; |
158
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
151
diff
changeset
|
51 | /** |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
151
diff
changeset
|
52 | * Corner radius. |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
151
diff
changeset
|
53 | */ |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
151
diff
changeset
|
54 | unsigned int radius; |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
151
diff
changeset
|
55 | /** |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
151
diff
changeset
|
56 | * Border thickness |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
151
diff
changeset
|
57 | */ |
f650994ec543
implement rounded corners
Mike Becker <universe@uap-core.de>
parents:
151
diff
changeset
|
58 | unsigned int thickness; |
159
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
59 | /** |
171
7748713bb604
create prototype for creating ellipsis
Mike Becker <universe@uap-core.de>
parents:
167
diff
changeset
|
60 | * Border color to be used when thickness is larger than zero and filled is true. |
159
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
61 | */ |
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
62 | asc_col4i border_color; |
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
63 | /** |
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
64 | * If true, the rectangle will be filled with the active color. |
171
7748713bb604
create prototype for creating ellipsis
Mike Becker <universe@uap-core.de>
parents:
167
diff
changeset
|
65 | * If the thickness is larger than zero, an outline border with that thickness is drawn |
159
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
66 | * using the border_color. |
da7ebfcdd159
add combination of filled rectangle with a border
Mike Becker <universe@uap-core.de>
parents:
158
diff
changeset
|
67 | */ |
151
42960d0c879b
adds first basic rectangle shader
Mike Becker <universe@uap-core.de>
parents:
143
diff
changeset
|
68 | bool filled; |
42960d0c879b
adds first basic rectangle shader
Mike Becker <universe@uap-core.de>
parents:
143
diff
changeset
|
69 | }; |
42960d0c879b
adds first basic rectangle shader
Mike Becker <universe@uap-core.de>
parents:
143
diff
changeset
|
70 | |
42960d0c879b
adds first basic rectangle shader
Mike Becker <universe@uap-core.de>
parents:
143
diff
changeset
|
71 | AscSceneNode *asc_rectangle_create(struct asc_rectangle_create_args args); |
42960d0c879b
adds first basic rectangle shader
Mike Becker <universe@uap-core.de>
parents:
143
diff
changeset
|
72 | |
42960d0c879b
adds first basic rectangle shader
Mike Becker <universe@uap-core.de>
parents:
143
diff
changeset
|
73 | #define asc_rectangle(...) asc_rectangle_create((struct asc_rectangle_create_args) { __VA_ARGS__ }) |
56
428fbb8355eb
add convenience function to add nodes to the UI of the active window
Mike Becker <universe@uap-core.de>
parents:
48
diff
changeset
|
74 | |
173
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
172
diff
changeset
|
75 | typedef struct asc_ellipsis_s { |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
172
diff
changeset
|
76 | AscSceneNode node; |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
172
diff
changeset
|
77 | AscMesh mesh; |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
172
diff
changeset
|
78 | asc_col4f color; |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
172
diff
changeset
|
79 | asc_col4f border_color; |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
172
diff
changeset
|
80 | asc_vec2f radii; |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
172
diff
changeset
|
81 | float thickness; |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
172
diff
changeset
|
82 | bool filled; |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
172
diff
changeset
|
83 | } AscEllipsis; |
171
7748713bb604
create prototype for creating ellipsis
Mike Becker <universe@uap-core.de>
parents:
167
diff
changeset
|
84 | |
172 | 85 | struct asc_ellipsis_create_args { |
173
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
172
diff
changeset
|
86 | /** |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
172
diff
changeset
|
87 | * The bounds of the ellipsis. |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
172
diff
changeset
|
88 | * Preferred over all other settings. |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
172
diff
changeset
|
89 | * When you specify bounds, you cannot specify a center and radiuses. |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
172
diff
changeset
|
90 | */ |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
172
diff
changeset
|
91 | asc_recti bounds; |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
172
diff
changeset
|
92 | /** |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
172
diff
changeset
|
93 | * The center point of the ellipsis. |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
172
diff
changeset
|
94 | * Preferred over x and y. |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
172
diff
changeset
|
95 | */ |
171
7748713bb604
create prototype for creating ellipsis
Mike Becker <universe@uap-core.de>
parents:
167
diff
changeset
|
96 | asc_vec2i center; |
173
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
172
diff
changeset
|
97 | /** |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
172
diff
changeset
|
98 | * The x coordinate of the center, if center is not specified. |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
172
diff
changeset
|
99 | */ |
171
7748713bb604
create prototype for creating ellipsis
Mike Becker <universe@uap-core.de>
parents:
167
diff
changeset
|
100 | int x; |
173
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
172
diff
changeset
|
101 | /** |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
172
diff
changeset
|
102 | * The y coordinate of the center, if center is not specified. |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
172
diff
changeset
|
103 | */ |
171
7748713bb604
create prototype for creating ellipsis
Mike Becker <universe@uap-core.de>
parents:
167
diff
changeset
|
104 | int y; |
173
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
172
diff
changeset
|
105 | /** |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
172
diff
changeset
|
106 | * The radius in both directions (use for circles). |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
172
diff
changeset
|
107 | */ |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
172
diff
changeset
|
108 | unsigned int radius; |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
172
diff
changeset
|
109 | /** |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
172
diff
changeset
|
110 | * The radius in x-direction. |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
172
diff
changeset
|
111 | */ |
171
7748713bb604
create prototype for creating ellipsis
Mike Becker <universe@uap-core.de>
parents:
167
diff
changeset
|
112 | unsigned int radius_x; |
173
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
172
diff
changeset
|
113 | /** |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
172
diff
changeset
|
114 | * The radius in y-direction. |
bd57fe3f6360
add ellipsis shader - resolves #385
Mike Becker <universe@uap-core.de>
parents:
172
diff
changeset
|
115 | */ |
171
7748713bb604
create prototype for creating ellipsis
Mike Becker <universe@uap-core.de>
parents:
167
diff
changeset
|
116 | unsigned int radius_y; |
7748713bb604
create prototype for creating ellipsis
Mike Becker <universe@uap-core.de>
parents:
167
diff
changeset
|
117 | /** |
7748713bb604
create prototype for creating ellipsis
Mike Becker <universe@uap-core.de>
parents:
167
diff
changeset
|
118 | * Border thickness |
7748713bb604
create prototype for creating ellipsis
Mike Becker <universe@uap-core.de>
parents:
167
diff
changeset
|
119 | */ |
7748713bb604
create prototype for creating ellipsis
Mike Becker <universe@uap-core.de>
parents:
167
diff
changeset
|
120 | unsigned int thickness; |
7748713bb604
create prototype for creating ellipsis
Mike Becker <universe@uap-core.de>
parents:
167
diff
changeset
|
121 | /** |
7748713bb604
create prototype for creating ellipsis
Mike Becker <universe@uap-core.de>
parents:
167
diff
changeset
|
122 | * Border color to be used when thickness is larger than zero and filled is true. |
7748713bb604
create prototype for creating ellipsis
Mike Becker <universe@uap-core.de>
parents:
167
diff
changeset
|
123 | */ |
7748713bb604
create prototype for creating ellipsis
Mike Becker <universe@uap-core.de>
parents:
167
diff
changeset
|
124 | asc_col4i border_color; |
7748713bb604
create prototype for creating ellipsis
Mike Becker <universe@uap-core.de>
parents:
167
diff
changeset
|
125 | /** |
7748713bb604
create prototype for creating ellipsis
Mike Becker <universe@uap-core.de>
parents:
167
diff
changeset
|
126 | * If true, the ellipsis will be filled with the active color. |
7748713bb604
create prototype for creating ellipsis
Mike Becker <universe@uap-core.de>
parents:
167
diff
changeset
|
127 | * If the thickness is larger than zero, an outline border with that thickness is drawn |
7748713bb604
create prototype for creating ellipsis
Mike Becker <universe@uap-core.de>
parents:
167
diff
changeset
|
128 | * using the border_color. |
7748713bb604
create prototype for creating ellipsis
Mike Becker <universe@uap-core.de>
parents:
167
diff
changeset
|
129 | */ |
7748713bb604
create prototype for creating ellipsis
Mike Becker <universe@uap-core.de>
parents:
167
diff
changeset
|
130 | bool filled; |
7748713bb604
create prototype for creating ellipsis
Mike Becker <universe@uap-core.de>
parents:
167
diff
changeset
|
131 | }; |
7748713bb604
create prototype for creating ellipsis
Mike Becker <universe@uap-core.de>
parents:
167
diff
changeset
|
132 | |
7748713bb604
create prototype for creating ellipsis
Mike Becker <universe@uap-core.de>
parents:
167
diff
changeset
|
133 | AscSceneNode *asc_ellipsis_create(struct asc_ellipsis_create_args args); |
7748713bb604
create prototype for creating ellipsis
Mike Becker <universe@uap-core.de>
parents:
167
diff
changeset
|
134 | |
7748713bb604
create prototype for creating ellipsis
Mike Becker <universe@uap-core.de>
parents:
167
diff
changeset
|
135 | #define asc_ellipsis(...) asc_ellipsis_create((struct asc_ellipsis_create_args) { __VA_ARGS__ }) |
7748713bb604
create prototype for creating ellipsis
Mike Becker <universe@uap-core.de>
parents:
167
diff
changeset
|
136 | |
82
4e1e698f4b0d
add generic mesh draw function and move sprite draw function to separate unit
Mike Becker <universe@uap-core.de>
parents:
75
diff
changeset
|
137 | #endif /* ASCENSION_2D_H */ |
48 | 138 |