Mercurial > dwindows
comparison gtk4/dw.c @ 2731:85917c0c52f1
GTK4: Same color thread safety passing changes as on iOS and Mac.
Ensure we are using the color set on the calling thread.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Mon, 13 Dec 2021 01:21:55 +0000 |
parents | 3b3be9f7f452 |
children | 608796a91527 |
comparison
equal
deleted
inserted
replaced
2730:cff8f6b6e302 | 2731:85917c0c52f1 |
---|---|
56 * ... | 56 * ... |
57 */ | 57 */ |
58 #ifndef _DW_SINGLE_THREADED | 58 #ifndef _DW_SINGLE_THREADED |
59 #define DW_FUNCTION_DEFINITION(func, rettype, ...) gboolean _##func(void **_args); \ | 59 #define DW_FUNCTION_DEFINITION(func, rettype, ...) gboolean _##func(void **_args); \ |
60 rettype API func(__VA_ARGS__) { | 60 rettype API func(__VA_ARGS__) { |
61 #define DW_FUNCTION_ADD_PARAM void **_args = alloca(sizeof(void *)*2); \ | 61 #define DW_FUNCTION_ADD_PARAM void **_args = alloca(sizeof(void *)*4); \ |
62 _args[0] = (void *)pthread_getspecific(_dw_event_key); \ | |
63 _args[1] = (void *)NULL; | |
64 #define DW_FUNCTION_ADD_PARAM1(param1) void **_args = alloca(sizeof(void *)*3); \ | |
65 _args[0] = (void *)pthread_getspecific(_dw_event_key); \ | 62 _args[0] = (void *)pthread_getspecific(_dw_event_key); \ |
66 _args[1] = (void *)NULL; \ | 63 _args[1] = (void *)NULL; \ |
67 _args[2] = (void *)¶m1; | 64 _args[2] = (void *)pthread_getspecific(_dw_fg_color_key); \ |
68 #define DW_FUNCTION_ADD_PARAM2(param1, param2) void **_args = alloca(sizeof(void *)*4); \ | 65 _args[3] = (void *)pthread_getspecific(_dw_bg_color_key); |
66 #define DW_FUNCTION_ADD_PARAM1(param1) void **_args = alloca(sizeof(void *)*5); \ | |
69 _args[0] = (void *)pthread_getspecific(_dw_event_key); \ | 67 _args[0] = (void *)pthread_getspecific(_dw_event_key); \ |
70 _args[1] = (void *)NULL; \ | 68 _args[1] = (void *)NULL; \ |
71 _args[2] = (void *)¶m1; \ | 69 _args[2] = (void *)¶m1; \ |
72 _args[3] = (void *)¶m2; | 70 _args[3] = (void *)pthread_getspecific(_dw_fg_color_key); \ |
73 #define DW_FUNCTION_ADD_PARAM3(param1, param2, param3) void **_args = alloca(sizeof(void *)*5); \ | 71 _args[4] = (void *)pthread_getspecific(_dw_bg_color_key); |
72 #define DW_FUNCTION_ADD_PARAM2(param1, param2) void **_args = alloca(sizeof(void *)*6); \ | |
74 _args[0] = (void *)pthread_getspecific(_dw_event_key); \ | 73 _args[0] = (void *)pthread_getspecific(_dw_event_key); \ |
75 _args[1] = (void *)NULL; \ | 74 _args[1] = (void *)NULL; \ |
76 _args[2] = (void *)¶m1; \ | 75 _args[2] = (void *)¶m1; \ |
77 _args[3] = (void *)¶m2; \ | 76 _args[3] = (void *)¶m2; \ |
78 _args[4] = (void *)¶m3; | 77 _args[4] = (void *)pthread_getspecific(_dw_fg_color_key); \ |
79 #define DW_FUNCTION_ADD_PARAM4(param1, param2, param3, param4) void **_args = alloca(sizeof(void *)*6); \ | 78 _args[5] = (void *)pthread_getspecific(_dw_bg_color_key); |
79 #define DW_FUNCTION_ADD_PARAM3(param1, param2, param3) void **_args = alloca(sizeof(void *)*7); \ | |
80 _args[0] = (void *)pthread_getspecific(_dw_event_key); \ | 80 _args[0] = (void *)pthread_getspecific(_dw_event_key); \ |
81 _args[1] = (void *)NULL; \ | 81 _args[1] = (void *)NULL; \ |
82 _args[2] = (void *)¶m1; \ | 82 _args[2] = (void *)¶m1; \ |
83 _args[3] = (void *)¶m2; \ | 83 _args[3] = (void *)¶m2; \ |
84 _args[4] = (void *)¶m3; \ | 84 _args[4] = (void *)¶m3; \ |
85 _args[5] = (void *)¶m4; | 85 _args[5] = (void *)pthread_getspecific(_dw_fg_color_key); \ |
86 #define DW_FUNCTION_ADD_PARAM5(param1, param2, param3, param4, param5) void **_args = alloca(sizeof(void *)*7); \ | 86 _args[6] = (void *)pthread_getspecific(_dw_bg_color_key); |
87 #define DW_FUNCTION_ADD_PARAM4(param1, param2, param3, param4) void **_args = alloca(sizeof(void *)*8); \ | |
87 _args[0] = (void *)pthread_getspecific(_dw_event_key); \ | 88 _args[0] = (void *)pthread_getspecific(_dw_event_key); \ |
88 _args[1] = (void *)NULL; \ | 89 _args[1] = (void *)NULL; \ |
89 _args[2] = (void *)¶m1; \ | 90 _args[2] = (void *)¶m1; \ |
90 _args[3] = (void *)¶m2; \ | 91 _args[3] = (void *)¶m2; \ |
91 _args[4] = (void *)¶m3; \ | 92 _args[4] = (void *)¶m3; \ |
92 _args[5] = (void *)¶m4; \ | 93 _args[5] = (void *)¶m4; \ |
93 _args[6] = (void *)¶m5; | 94 _args[6] = (void *)pthread_getspecific(_dw_fg_color_key); \ |
94 #define DW_FUNCTION_ADD_PARAM6(param1, param2, param3, param4, param5, param6) \ | 95 _args[7] = (void *)pthread_getspecific(_dw_bg_color_key); |
95 void **_args = alloca(sizeof(void *)*8); \ | 96 #define DW_FUNCTION_ADD_PARAM5(param1, param2, param3, param4, param5) void **_args = alloca(sizeof(void *)*9); \ |
96 _args[0] = (void *)pthread_getspecific(_dw_event_key); \ | 97 _args[0] = (void *)pthread_getspecific(_dw_event_key); \ |
97 _args[1] = (void *)NULL; \ | 98 _args[1] = (void *)NULL; \ |
98 _args[2] = (void *)¶m1; \ | 99 _args[2] = (void *)¶m1; \ |
99 _args[3] = (void *)¶m2; \ | 100 _args[3] = (void *)¶m2; \ |
100 _args[4] = (void *)¶m3; \ | 101 _args[4] = (void *)¶m3; \ |
101 _args[5] = (void *)¶m4; \ | 102 _args[5] = (void *)¶m4; \ |
102 _args[6] = (void *)¶m5; \ | 103 _args[6] = (void *)¶m5; \ |
103 _args[7] = (void *)¶m6; | 104 _args[7] = (void *)pthread_getspecific(_dw_fg_color_key); \ |
104 #define DW_FUNCTION_ADD_PARAM7(param1, param2, param3, param4, param5, param6, param7) \ | 105 _args[8] = (void *)pthread_getspecific(_dw_bg_color_key); |
105 void **_args = alloca(sizeof(void *)*9); \ | 106 #define DW_FUNCTION_ADD_PARAM6(param1, param2, param3, param4, param5, param6) \ |
106 _args[0] = (void *)pthread_getspecific(_dw_event_key); \ | |
107 _args[1] = (void *)NULL; \ | |
108 _args[2] = (void *)¶m1; \ | |
109 _args[3] = (void *)¶m2; \ | |
110 _args[4] = (void *)¶m3; \ | |
111 _args[5] = (void *)¶m4; \ | |
112 _args[6] = (void *)¶m5; \ | |
113 _args[7] = (void *)¶m6; \ | |
114 _args[8] = (void *)¶m7; | |
115 #define DW_FUNCTION_ADD_PARAM8(param1, param2, param3, param4, param5, param6, param7, param8) \ | |
116 void **_args = alloca(sizeof(void *)*10); \ | 107 void **_args = alloca(sizeof(void *)*10); \ |
117 _args[0] = (void *)pthread_getspecific(_dw_event_key); \ | 108 _args[0] = (void *)pthread_getspecific(_dw_event_key); \ |
118 _args[1] = (void *)NULL; \ | 109 _args[1] = (void *)NULL; \ |
119 _args[2] = (void *)¶m1; \ | 110 _args[2] = (void *)¶m1; \ |
120 _args[3] = (void *)¶m2; \ | 111 _args[3] = (void *)¶m2; \ |
121 _args[4] = (void *)¶m3; \ | 112 _args[4] = (void *)¶m3; \ |
122 _args[5] = (void *)¶m4; \ | 113 _args[5] = (void *)¶m4; \ |
123 _args[6] = (void *)¶m5; \ | 114 _args[6] = (void *)¶m5; \ |
124 _args[7] = (void *)¶m6; \ | 115 _args[7] = (void *)¶m6; \ |
125 _args[8] = (void *)¶m7; \ | 116 _args[8] = (void *)pthread_getspecific(_dw_fg_color_key); \ |
126 _args[9] = (void *)¶m8; | 117 _args[9] = (void *)pthread_getspecific(_dw_bg_color_key); |
127 #define DW_FUNCTION_ADD_PARAM9(param1, param2, param3, param4, param5, param6, param7, param8, param9) \ | 118 #define DW_FUNCTION_ADD_PARAM7(param1, param2, param3, param4, param5, param6, param7) \ |
128 void **_args = alloca(sizeof(void *)*11); \ | 119 void **_args = alloca(sizeof(void *)*11); \ |
129 _args[0] = (void *)pthread_getspecific(_dw_event_key); \ | 120 _args[0] = (void *)pthread_getspecific(_dw_event_key); \ |
130 _args[1] = (void *)NULL; \ | 121 _args[1] = (void *)NULL; \ |
131 _args[2] = (void *)¶m1; \ | 122 _args[2] = (void *)¶m1; \ |
132 _args[3] = (void *)¶m2; \ | 123 _args[3] = (void *)¶m2; \ |
133 _args[4] = (void *)¶m3; \ | 124 _args[4] = (void *)¶m3; \ |
134 _args[5] = (void *)¶m4; \ | 125 _args[5] = (void *)¶m4; \ |
135 _args[6] = (void *)¶m5; \ | 126 _args[6] = (void *)¶m5; \ |
136 _args[7] = (void *)¶m6; \ | 127 _args[7] = (void *)¶m6; \ |
137 _args[8] = (void *)¶m7; \ | 128 _args[8] = (void *)¶m7; \ |
138 _args[9] = (void *)¶m8; \ | 129 _args[9] = (void *)pthread_getspecific(_dw_fg_color_key); \ |
139 _args[10] = (void *)¶m9; | 130 _args[10] = (void *)pthread_getspecific(_dw_bg_color_key); |
140 #define DW_FUNCTION_ADD_PARAM10(param1, param2, param3, param4, param5, param6, param7, param8, param9, param10) \ | 131 #define DW_FUNCTION_ADD_PARAM8(param1, param2, param3, param4, param5, param6, param7, param8) \ |
141 void **_args = alloca(sizeof(void *)*12); \ | 132 void **_args = alloca(sizeof(void *)*12); \ |
142 _args[0] = (void *)pthread_getspecific(_dw_event_key); \ | 133 _args[0] = (void *)pthread_getspecific(_dw_event_key); \ |
143 _args[1] = (void *)NULL; \ | 134 _args[1] = (void *)NULL; \ |
144 _args[2] = (void *)¶m1; \ | 135 _args[2] = (void *)¶m1; \ |
145 _args[3] = (void *)¶m2; \ | 136 _args[3] = (void *)¶m2; \ |
147 _args[5] = (void *)¶m4; \ | 138 _args[5] = (void *)¶m4; \ |
148 _args[6] = (void *)¶m5; \ | 139 _args[6] = (void *)¶m5; \ |
149 _args[7] = (void *)¶m6; \ | 140 _args[7] = (void *)¶m6; \ |
150 _args[8] = (void *)¶m7; \ | 141 _args[8] = (void *)¶m7; \ |
151 _args[9] = (void *)¶m8; \ | 142 _args[9] = (void *)¶m8; \ |
152 _args[10] = (void *)¶m9; \ | 143 _args[10] = (void *)pthread_getspecific(_dw_fg_color_key); \ |
153 _args[11] = (void *)¶m10; | 144 _args[11] = (void *)pthread_getspecific(_dw_bg_color_key); |
154 #define DW_FUNCTION_ADD_PARAM11(param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11) \ | 145 #define DW_FUNCTION_ADD_PARAM9(param1, param2, param3, param4, param5, param6, param7, param8, param9) \ |
155 void **_args = alloca(sizeof(void *)*13); \ | 146 void **_args = alloca(sizeof(void *)*13); \ |
156 _args[0] = (void *)pthread_getspecific(_dw_event_key); \ | 147 _args[0] = (void *)pthread_getspecific(_dw_event_key); \ |
157 _args[1] = (void *)NULL; \ | 148 _args[1] = (void *)NULL; \ |
158 _args[2] = (void *)¶m1; \ | 149 _args[2] = (void *)¶m1; \ |
159 _args[3] = (void *)¶m2; \ | 150 _args[3] = (void *)¶m2; \ |
162 _args[6] = (void *)¶m5; \ | 153 _args[6] = (void *)¶m5; \ |
163 _args[7] = (void *)¶m6; \ | 154 _args[7] = (void *)¶m6; \ |
164 _args[8] = (void *)¶m7; \ | 155 _args[8] = (void *)¶m7; \ |
165 _args[9] = (void *)¶m8; \ | 156 _args[9] = (void *)¶m8; \ |
166 _args[10] = (void *)¶m9; \ | 157 _args[10] = (void *)¶m9; \ |
167 _args[11] = (void *)¶m10; \ | 158 _args[11] = (void *)pthread_getspecific(_dw_fg_color_key); \ |
168 _args[12] = (void *)¶m11; | 159 _args[12] = (void *)pthread_getspecific(_dw_bg_color_key); |
169 #define DW_FUNCTION_ADD_PARAM12(param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12) \ | 160 #define DW_FUNCTION_ADD_PARAM10(param1, param2, param3, param4, param5, param6, param7, param8, param9, param10) \ |
170 void **_args = alloca(sizeof(void *)*14); \ | 161 void **_args = alloca(sizeof(void *)*14); \ |
171 _args[0] = (void *)pthread_getspecific(_dw_event_key); \ | 162 _args[0] = (void *)pthread_getspecific(_dw_event_key); \ |
172 _args[1] = (void *)NULL; \ | 163 _args[1] = (void *)NULL; \ |
173 _args[2] = (void *)¶m1; \ | 164 _args[2] = (void *)¶m1; \ |
174 _args[3] = (void *)¶m2; \ | 165 _args[3] = (void *)¶m2; \ |
178 _args[7] = (void *)¶m6; \ | 169 _args[7] = (void *)¶m6; \ |
179 _args[8] = (void *)¶m7; \ | 170 _args[8] = (void *)¶m7; \ |
180 _args[9] = (void *)¶m8; \ | 171 _args[9] = (void *)¶m8; \ |
181 _args[10] = (void *)¶m9; \ | 172 _args[10] = (void *)¶m9; \ |
182 _args[11] = (void *)¶m10; \ | 173 _args[11] = (void *)¶m10; \ |
174 _args[12] = (void *)pthread_getspecific(_dw_fg_color_key); \ | |
175 _args[13] = (void *)pthread_getspecific(_dw_bg_color_key); | |
176 #define DW_FUNCTION_ADD_PARAM11(param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11) \ | |
177 void **_args = alloca(sizeof(void *)*15); \ | |
178 _args[0] = (void *)pthread_getspecific(_dw_event_key); \ | |
179 _args[1] = (void *)NULL; \ | |
180 _args[2] = (void *)¶m1; \ | |
181 _args[3] = (void *)¶m2; \ | |
182 _args[4] = (void *)¶m3; \ | |
183 _args[5] = (void *)¶m4; \ | |
184 _args[6] = (void *)¶m5; \ | |
185 _args[7] = (void *)¶m6; \ | |
186 _args[8] = (void *)¶m7; \ | |
187 _args[9] = (void *)¶m8; \ | |
188 _args[10] = (void *)¶m9; \ | |
189 _args[11] = (void *)¶m10; \ | |
183 _args[12] = (void *)¶m11; \ | 190 _args[12] = (void *)¶m11; \ |
184 _args[13] = (void *)¶m12; | 191 _args[13] = (void *)pthread_getspecific(_dw_fg_color_key); \ |
192 _args[14] = (void *)pthread_getspecific(_dw_bg_color_key); | |
193 #define DW_FUNCTION_ADD_PARAM12(param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12) \ | |
194 void **_args = alloca(sizeof(void *)*16); \ | |
195 _args[0] = (void *)pthread_getspecific(_dw_event_key); \ | |
196 _args[1] = (void *)NULL; \ | |
197 _args[2] = (void *)¶m1; \ | |
198 _args[3] = (void *)¶m2; \ | |
199 _args[4] = (void *)¶m3; \ | |
200 _args[5] = (void *)¶m4; \ | |
201 _args[6] = (void *)¶m5; \ | |
202 _args[7] = (void *)¶m6; \ | |
203 _args[8] = (void *)¶m7; \ | |
204 _args[9] = (void *)¶m8; \ | |
205 _args[10] = (void *)¶m9; \ | |
206 _args[11] = (void *)¶m10; \ | |
207 _args[12] = (void *)¶m11; \ | |
208 _args[13] = (void *)¶m12; \ | |
209 _args[14] = (void *)pthread_getspecific(_dw_fg_color_key); \ | |
210 _args[15] = (void *)pthread_getspecific(_dw_bg_color_key); | |
185 #define DW_FUNCTION_RESTORE_PARAM1(param1, vartype1) \ | 211 #define DW_FUNCTION_RESTORE_PARAM1(param1, vartype1) \ |
186 vartype1 param1 = *((vartype1 *)_args[2]); | 212 vartype1 param1 = *((vartype1 *)_args[2]); \ |
213 GdkRGBA * DW_UNUSED(_dw_fg_color) = (GdkRGBA *)_args[3]; \ | |
214 GdkRGBA * DW_UNUSED(_dw_bg_color) = (GdkRGBA *)_args[4]; | |
187 #define DW_FUNCTION_RESTORE_PARAM2(param1, vartype1, param2, vartype2) \ | 215 #define DW_FUNCTION_RESTORE_PARAM2(param1, vartype1, param2, vartype2) \ |
188 vartype1 param1 = *((vartype1 *)_args[2]); \ | 216 vartype1 param1 = *((vartype1 *)_args[2]); \ |
189 vartype2 param2 = *((vartype2 *)_args[3]); | 217 vartype2 param2 = *((vartype2 *)_args[3]); \ |
218 GdkRGBA * DW_UNUSED(_dw_fg_color) = (GdkRGBA *)_args[4]; \ | |
219 GdkRGBA * DW_UNUSED(_dw_bg_color) = (GdkRGBA *)_args[5]; | |
190 #define DW_FUNCTION_RESTORE_PARAM3(param1, vartype1, param2, vartype2, param3, vartype3) \ | 220 #define DW_FUNCTION_RESTORE_PARAM3(param1, vartype1, param2, vartype2, param3, vartype3) \ |
191 vartype1 param1 = *((vartype1 *)_args[2]); \ | 221 vartype1 param1 = *((vartype1 *)_args[2]); \ |
192 vartype2 param2 = *((vartype2 *)_args[3]); \ | 222 vartype2 param2 = *((vartype2 *)_args[3]); \ |
193 vartype3 param3 = *((vartype3 *)_args[4]); | 223 vartype3 param3 = *((vartype3 *)_args[4]); \ |
224 GdkRGBA * DW_UNUSED(_dw_fg_color) = (GdkRGBA *)_args[5]; \ | |
225 GdkRGBA * DW_UNUSED(_dw_bg_color) = (GdkRGBA *)_args[6]; | |
194 #define DW_FUNCTION_RESTORE_PARAM4(param1, vartype1, param2, vartype2, param3, vartype3, param4, vartype4) \ | 226 #define DW_FUNCTION_RESTORE_PARAM4(param1, vartype1, param2, vartype2, param3, vartype3, param4, vartype4) \ |
195 vartype1 param1 = *((vartype1 *)_args[2]); \ | 227 vartype1 param1 = *((vartype1 *)_args[2]); \ |
196 vartype2 param2 = *((vartype2 *)_args[3]); \ | 228 vartype2 param2 = *((vartype2 *)_args[3]); \ |
197 vartype3 param3 = *((vartype3 *)_args[4]); \ | 229 vartype3 param3 = *((vartype3 *)_args[4]); \ |
198 vartype4 param4 = *((vartype4 *)_args[5]); | 230 vartype4 param4 = *((vartype4 *)_args[5]); \ |
231 GdkRGBA * DW_UNUSED(_dw_fg_color) = (GdkRGBA *)_args[6]; \ | |
232 GdkRGBA * DW_UNUSED(_dw_bg_color) = (GdkRGBA *)_args[7]; | |
199 #define DW_FUNCTION_RESTORE_PARAM5(param1, vartype1, param2, vartype2, param3, vartype3, param4, vartype4, param5, vartype5) \ | 233 #define DW_FUNCTION_RESTORE_PARAM5(param1, vartype1, param2, vartype2, param3, vartype3, param4, vartype4, param5, vartype5) \ |
200 vartype1 param1 = *((vartype1 *)_args[2]); \ | 234 vartype1 param1 = *((vartype1 *)_args[2]); \ |
201 vartype2 param2 = *((vartype2 *)_args[3]); \ | 235 vartype2 param2 = *((vartype2 *)_args[3]); \ |
202 vartype3 param3 = *((vartype3 *)_args[4]); \ | 236 vartype3 param3 = *((vartype3 *)_args[4]); \ |
203 vartype4 param4 = *((vartype4 *)_args[5]); \ | 237 vartype4 param4 = *((vartype4 *)_args[5]); \ |
204 vartype5 param5 = *((vartype5 *)_args[6]); | 238 vartype5 param5 = *((vartype5 *)_args[6]); \ |
239 GdkRGBA * DW_UNUSED(_dw_fg_color) = (GdkRGBA *)_args[7]; \ | |
240 GdkRGBA * DW_UNUSED(_dw_bg_color) = (GdkRGBA *)_args[8]; | |
205 #define DW_FUNCTION_RESTORE_PARAM6(param1, vartype1, param2, vartype2, param3, vartype3, param4, vartype4, param5, vartype5, param6, vartype6) \ | 241 #define DW_FUNCTION_RESTORE_PARAM6(param1, vartype1, param2, vartype2, param3, vartype3, param4, vartype4, param5, vartype5, param6, vartype6) \ |
206 vartype1 param1 = *((vartype1 *)_args[2]); \ | 242 vartype1 param1 = *((vartype1 *)_args[2]); \ |
207 vartype2 param2 = *((vartype2 *)_args[3]); \ | 243 vartype2 param2 = *((vartype2 *)_args[3]); \ |
208 vartype3 param3 = *((vartype3 *)_args[4]); \ | 244 vartype3 param3 = *((vartype3 *)_args[4]); \ |
209 vartype4 param4 = *((vartype4 *)_args[5]); \ | 245 vartype4 param4 = *((vartype4 *)_args[5]); \ |
210 vartype5 param5 = *((vartype5 *)_args[6]); \ | 246 vartype5 param5 = *((vartype5 *)_args[6]); \ |
211 vartype6 param6 = *((vartype6 *)_args[7]); | 247 vartype6 param6 = *((vartype6 *)_args[7]); \ |
248 GdkRGBA * DW_UNUSED(_dw_fg_color) = (GdkRGBA *)_args[8]; \ | |
249 GdkRGBA * DW_UNUSED(_dw_bg_color) = (GdkRGBA *)_args[9]; | |
212 #define DW_FUNCTION_RESTORE_PARAM7(param1, vartype1, param2, vartype2, param3, vartype3, param4, vartype4, param5, vartype5, param6, vartype6, param7, vartype7) \ | 250 #define DW_FUNCTION_RESTORE_PARAM7(param1, vartype1, param2, vartype2, param3, vartype3, param4, vartype4, param5, vartype5, param6, vartype6, param7, vartype7) \ |
213 vartype1 param1 = *((vartype1 *)_args[2]); \ | 251 vartype1 param1 = *((vartype1 *)_args[2]); \ |
214 vartype2 param2 = *((vartype2 *)_args[3]); \ | 252 vartype2 param2 = *((vartype2 *)_args[3]); \ |
215 vartype3 param3 = *((vartype3 *)_args[4]); \ | 253 vartype3 param3 = *((vartype3 *)_args[4]); \ |
216 vartype4 param4 = *((vartype4 *)_args[5]); \ | 254 vartype4 param4 = *((vartype4 *)_args[5]); \ |
217 vartype5 param5 = *((vartype5 *)_args[6]); \ | 255 vartype5 param5 = *((vartype5 *)_args[6]); \ |
218 vartype6 param6 = *((vartype6 *)_args[7]); \ | 256 vartype6 param6 = *((vartype6 *)_args[7]); \ |
219 vartype7 param7 = *((vartype7 *)_args[8]); | 257 vartype7 param7 = *((vartype7 *)_args[8]); \ |
258 GdkRGBA * DW_UNUSED(_dw_fg_color) = (GdkRGBA *)_args[9]; \ | |
259 GdkRGBA * DW_UNUSED(_dw_bg_color) = (GdkRGBA *)_args[10]; | |
220 #define DW_FUNCTION_RESTORE_PARAM8(param1, vartype1, param2, vartype2, param3, vartype3, param4, vartype4, param5, vartype5, param6, vartype6, param7, vartype7, param8, vartype8) \ | 260 #define DW_FUNCTION_RESTORE_PARAM8(param1, vartype1, param2, vartype2, param3, vartype3, param4, vartype4, param5, vartype5, param6, vartype6, param7, vartype7, param8, vartype8) \ |
221 vartype1 param1 = *((vartype1 *)_args[2]); \ | 261 vartype1 param1 = *((vartype1 *)_args[2]); \ |
222 vartype2 param2 = *((vartype2 *)_args[3]); \ | 262 vartype2 param2 = *((vartype2 *)_args[3]); \ |
223 vartype3 param3 = *((vartype3 *)_args[4]); \ | 263 vartype3 param3 = *((vartype3 *)_args[4]); \ |
224 vartype4 param4 = *((vartype4 *)_args[5]); \ | 264 vartype4 param4 = *((vartype4 *)_args[5]); \ |
225 vartype5 param5 = *((vartype5 *)_args[6]); \ | 265 vartype5 param5 = *((vartype5 *)_args[6]); \ |
226 vartype6 param6 = *((vartype6 *)_args[7]); \ | 266 vartype6 param6 = *((vartype6 *)_args[7]); \ |
227 vartype7 param7 = *((vartype7 *)_args[8]); \ | 267 vartype7 param7 = *((vartype7 *)_args[8]); \ |
228 vartype8 param8 = *((vartype8 *)_args[9]); | 268 vartype8 param8 = *((vartype8 *)_args[9]); \ |
269 GdkRGBA * DW_UNUSED(_dw_fg_color) = (GdkRGBA *)_args[10]; \ | |
270 GdkRGBA * DW_UNUSED(_dw_bg_color) = (GdkRGBA *)_args[11]; | |
229 #define DW_FUNCTION_RESTORE_PARAM9(param1, vartype1, param2, vartype2, param3, vartype3, param4, vartype4, param5, vartype5, param6, vartype6, param7, vartype7, param8, vartype8, param9, vartype9) \ | 271 #define DW_FUNCTION_RESTORE_PARAM9(param1, vartype1, param2, vartype2, param3, vartype3, param4, vartype4, param5, vartype5, param6, vartype6, param7, vartype7, param8, vartype8, param9, vartype9) \ |
230 vartype1 param1 = *((vartype1 *)_args[2]); \ | 272 vartype1 param1 = *((vartype1 *)_args[2]); \ |
231 vartype2 param2 = *((vartype2 *)_args[3]); \ | 273 vartype2 param2 = *((vartype2 *)_args[3]); \ |
232 vartype3 param3 = *((vartype3 *)_args[4]); \ | 274 vartype3 param3 = *((vartype3 *)_args[4]); \ |
233 vartype4 param4 = *((vartype4 *)_args[5]); \ | 275 vartype4 param4 = *((vartype4 *)_args[5]); \ |
234 vartype5 param5 = *((vartype5 *)_args[6]); \ | 276 vartype5 param5 = *((vartype5 *)_args[6]); \ |
235 vartype6 param6 = *((vartype6 *)_args[7]); \ | 277 vartype6 param6 = *((vartype6 *)_args[7]); \ |
236 vartype7 param7 = *((vartype7 *)_args[8]); \ | 278 vartype7 param7 = *((vartype7 *)_args[8]); \ |
237 vartype8 param8 = *((vartype8 *)_args[9]); \ | 279 vartype8 param8 = *((vartype8 *)_args[9]); \ |
238 vartype9 param9 = *((vartype9 *)_args[10]); | 280 vartype9 param9 = *((vartype9 *)_args[10]); \ |
281 GdkRGBA * DW_UNUSED(_dw_fg_color) = (GdkRGBA *)_args[11]; \ | |
282 GdkRGBA * DW_UNUSED(_dw_bg_color) = (GdkRGBA *)_args[12]; | |
239 #define DW_FUNCTION_RESTORE_PARAM10(param1, vartype1, param2, vartype2, param3, vartype3, param4, vartype4, param5, vartype5, param6, vartype6, param7, vartype7, param8, vartype8, param9, vartype9, param10, vartype10) \ | 283 #define DW_FUNCTION_RESTORE_PARAM10(param1, vartype1, param2, vartype2, param3, vartype3, param4, vartype4, param5, vartype5, param6, vartype6, param7, vartype7, param8, vartype8, param9, vartype9, param10, vartype10) \ |
240 vartype1 param1 = *((vartype1 *)_args[2]); \ | 284 vartype1 param1 = *((vartype1 *)_args[2]); \ |
241 vartype2 param2 = *((vartype2 *)_args[3]); \ | 285 vartype2 param2 = *((vartype2 *)_args[3]); \ |
242 vartype3 param3 = *((vartype3 *)_args[4]); \ | 286 vartype3 param3 = *((vartype3 *)_args[4]); \ |
243 vartype4 param4 = *((vartype4 *)_args[5]); \ | 287 vartype4 param4 = *((vartype4 *)_args[5]); \ |
244 vartype5 param5 = *((vartype5 *)_args[6]); \ | 288 vartype5 param5 = *((vartype5 *)_args[6]); \ |
245 vartype6 param6 = *((vartype6 *)_args[7]); \ | 289 vartype6 param6 = *((vartype6 *)_args[7]); \ |
246 vartype7 param7 = *((vartype7 *)_args[8]); \ | 290 vartype7 param7 = *((vartype7 *)_args[8]); \ |
247 vartype8 param8 = *((vartype8 *)_args[9]); \ | 291 vartype8 param8 = *((vartype8 *)_args[9]); \ |
248 vartype9 param9 = *((vartype9 *)_args[10]); \ | 292 vartype9 param9 = *((vartype9 *)_args[10]); \ |
249 vartype10 param10 = *((vartype10 *)_args[11]); | 293 vartype10 param10 = *((vartype10 *)_args[11]); \ |
294 GdkRGBA * DW_UNUSED(_dw_fg_color) = (GdkRGBA *)_args[12]; \ | |
295 GdkRGBA * DW_UNUSED(_dw_bg_color) = (GdkRGBA *)_args[13]; | |
250 #define DW_FUNCTION_RESTORE_PARAM11(param1, vartype1, param2, vartype2, param3, vartype3, param4, vartype4, param5, vartype5, param6, vartype6, param7, vartype7, param8, vartype8, param9, vartype9, param10, vartype10, param11, vartype11) \ | 296 #define DW_FUNCTION_RESTORE_PARAM11(param1, vartype1, param2, vartype2, param3, vartype3, param4, vartype4, param5, vartype5, param6, vartype6, param7, vartype7, param8, vartype8, param9, vartype9, param10, vartype10, param11, vartype11) \ |
251 vartype1 param1 = *((vartype1 *)_args[2]); \ | 297 vartype1 param1 = *((vartype1 *)_args[2]); \ |
252 vartype2 param2 = *((vartype2 *)_args[3]); \ | 298 vartype2 param2 = *((vartype2 *)_args[3]); \ |
253 vartype3 param3 = *((vartype3 *)_args[4]); \ | 299 vartype3 param3 = *((vartype3 *)_args[4]); \ |
254 vartype4 param4 = *((vartype4 *)_args[5]); \ | 300 vartype4 param4 = *((vartype4 *)_args[5]); \ |
256 vartype6 param6 = *((vartype6 *)_args[7]); \ | 302 vartype6 param6 = *((vartype6 *)_args[7]); \ |
257 vartype7 param7 = *((vartype7 *)_args[8]); \ | 303 vartype7 param7 = *((vartype7 *)_args[8]); \ |
258 vartype8 param8 = *((vartype8 *)_args[9]); \ | 304 vartype8 param8 = *((vartype8 *)_args[9]); \ |
259 vartype9 param9 = *((vartype9 *)_args[10]); \ | 305 vartype9 param9 = *((vartype9 *)_args[10]); \ |
260 vartype10 param10 = *((vartype10 *)_args[11]); \ | 306 vartype10 param10 = *((vartype10 *)_args[11]); \ |
261 vartype11 param11 = *((vartype11 *)_args[12]); | 307 vartype11 param11 = *((vartype11 *)_args[12]); \ |
308 GdkRGBA * DW_UNUSED(_dw_fg_color) = (GdkRGBA *)_args[13]; \ | |
309 GdkRGBA * DW_UNUSED(_dw_bg_color) = (GdkRGBA *)_args[14]; | |
262 #define DW_FUNCTION_RESTORE_PARAM12(param1, vartype1, param2, vartype2, param3, vartype3, param4, vartype4, param5, vartype5, param6, vartype6, param7, vartype7, param8, vartype8, param9, vartype9, param10, vartype10, param11, vartype11, param12, vartype12) \ | 310 #define DW_FUNCTION_RESTORE_PARAM12(param1, vartype1, param2, vartype2, param3, vartype3, param4, vartype4, param5, vartype5, param6, vartype6, param7, vartype7, param8, vartype8, param9, vartype9, param10, vartype10, param11, vartype11, param12, vartype12) \ |
263 vartype1 param1 = *((vartype1 *)_args[2]); \ | 311 vartype1 param1 = *((vartype1 *)_args[2]); \ |
264 vartype2 param2 = *((vartype2 *)_args[3]); \ | 312 vartype2 param2 = *((vartype2 *)_args[3]); \ |
265 vartype3 param3 = *((vartype3 *)_args[4]); \ | 313 vartype3 param3 = *((vartype3 *)_args[4]); \ |
266 vartype4 param4 = *((vartype4 *)_args[5]); \ | 314 vartype4 param4 = *((vartype4 *)_args[5]); \ |
269 vartype7 param7 = *((vartype7 *)_args[8]); \ | 317 vartype7 param7 = *((vartype7 *)_args[8]); \ |
270 vartype8 param8 = *((vartype8 *)_args[9]); \ | 318 vartype8 param8 = *((vartype8 *)_args[9]); \ |
271 vartype9 param9 = *((vartype9 *)_args[10]); \ | 319 vartype9 param9 = *((vartype9 *)_args[10]); \ |
272 vartype10 param10 = *((vartype10 *)_args[11]); \ | 320 vartype10 param10 = *((vartype10 *)_args[11]); \ |
273 vartype11 param11 = *((vartype11 *)_args[12]); \ | 321 vartype11 param11 = *((vartype11 *)_args[12]); \ |
274 vartype12 param12 = *((vartype12 *)_args[13]); | 322 vartype12 param12 = *((vartype12 *)_args[13]); \ |
323 GdkRGBA * DW_UNUSED(_dw_fg_color) = (GdkRGBA *)_args[14]; \ | |
324 GdkRGBA * DW_UNUSED(_dw_bg_color) = (GdkRGBA *)_args[15]; | |
275 #define DW_FUNCTION_END } | 325 #define DW_FUNCTION_END } |
276 #define DW_FUNCTION_NO_RETURN(func) dw_event_reset((HEV)_args[0]); \ | 326 #define DW_FUNCTION_NO_RETURN(func) dw_event_reset((HEV)_args[0]); \ |
277 if(_dw_thread == (pthread_t)-1 || pthread_self() == _dw_thread) \ | 327 if(_dw_thread == (pthread_t)-1 || pthread_self() == _dw_thread) \ |
278 _##func(_args); \ | 328 _##func(_args); \ |
279 else { \ | 329 else { \ |
6532 } | 6582 } |
6533 else if(pixmap) | 6583 else if(pixmap) |
6534 cr = cairo_create(pixmap->image); | 6584 cr = cairo_create(pixmap->image); |
6535 if(cr) | 6585 if(cr) |
6536 { | 6586 { |
6537 GdkRGBA *foreground = pthread_getspecific(_dw_fg_color_key); | 6587 #ifdef _DW_SINGLE_THREADED |
6538 | 6588 GdkRGBA *_dw_fg_color = pthread_getspecific(_dw_fg_color_key); |
6539 gdk_cairo_set_source_rgba(cr, foreground); | 6589 #endif |
6590 | |
6591 gdk_cairo_set_source_rgba(cr, _dw_fg_color); | |
6540 cairo_set_line_width(cr, 1); | 6592 cairo_set_line_width(cr, 1); |
6541 cairo_move_to(cr, x, y); | 6593 cairo_move_to(cr, x, y); |
6542 cairo_stroke(cr); | 6594 cairo_stroke(cr); |
6543 /* If we are using a drawing context... | 6595 /* If we are using a drawing context... |
6544 * we don't own the cairo context so don't destroy it. | 6596 * we don't own the cairo context so don't destroy it. |
6577 } | 6629 } |
6578 else if(pixmap) | 6630 else if(pixmap) |
6579 cr = cairo_create(pixmap->image); | 6631 cr = cairo_create(pixmap->image); |
6580 if(cr) | 6632 if(cr) |
6581 { | 6633 { |
6582 GdkRGBA *foreground = pthread_getspecific(_dw_fg_color_key); | 6634 #ifdef _DW_SINGLE_THREADED |
6583 | 6635 GdkRGBA *_dw_fg_color = pthread_getspecific(_dw_fg_color_key); |
6584 gdk_cairo_set_source_rgba(cr, foreground); | 6636 #endif |
6637 | |
6638 gdk_cairo_set_source_rgba(cr, _dw_fg_color); | |
6585 cairo_set_line_width(cr, 1); | 6639 cairo_set_line_width(cr, 1); |
6586 cairo_move_to(cr, x1, y1); | 6640 cairo_move_to(cr, x1, y1); |
6587 cairo_line_to(cr, x2, y2); | 6641 cairo_line_to(cr, x2, y2); |
6588 cairo_stroke(cr); | 6642 cairo_stroke(cr); |
6589 /* If we are using a drawing context... | 6643 /* If we are using a drawing context... |
6624 } | 6678 } |
6625 else if(pixmap) | 6679 else if(pixmap) |
6626 cr = cairo_create(pixmap->image); | 6680 cr = cairo_create(pixmap->image); |
6627 if(cr) | 6681 if(cr) |
6628 { | 6682 { |
6629 GdkRGBA *foreground = pthread_getspecific(_dw_fg_color_key); | 6683 #ifdef _DW_SINGLE_THREADED |
6684 GdkRGBA *_dw_fg_color = pthread_getspecific(_dw_fg_color_key); | |
6685 #endif | |
6630 | 6686 |
6631 if(flags & DW_DRAW_NOAA) | 6687 if(flags & DW_DRAW_NOAA) |
6632 cairo_set_antialias(cr, CAIRO_ANTIALIAS_NONE); | 6688 cairo_set_antialias(cr, CAIRO_ANTIALIAS_NONE); |
6633 | 6689 |
6634 gdk_cairo_set_source_rgba(cr, foreground); | 6690 gdk_cairo_set_source_rgba(cr, _dw_fg_color); |
6635 cairo_set_line_width(cr, 1); | 6691 cairo_set_line_width(cr, 1); |
6636 cairo_move_to(cr, x[0], y[0]); | 6692 cairo_move_to(cr, x[0], y[0]); |
6637 for(z=1;z<npoints;z++) | 6693 for(z=1;z<npoints;z++) |
6638 { | 6694 { |
6639 cairo_line_to(cr, x[z], y[z]); | 6695 cairo_line_to(cr, x[z], y[z]); |
6679 } | 6735 } |
6680 else if(pixmap) | 6736 else if(pixmap) |
6681 cr = cairo_create(pixmap->image); | 6737 cr = cairo_create(pixmap->image); |
6682 if(cr) | 6738 if(cr) |
6683 { | 6739 { |
6684 GdkRGBA *foreground = pthread_getspecific(_dw_fg_color_key); | 6740 #ifdef _DW_SINGLE_THREADED |
6741 GdkRGBA *_dw_fg_color = pthread_getspecific(_dw_fg_color_key); | |
6742 #endif | |
6685 | 6743 |
6686 if(flags & DW_DRAW_NOAA) | 6744 if(flags & DW_DRAW_NOAA) |
6687 cairo_set_antialias(cr, CAIRO_ANTIALIAS_NONE); | 6745 cairo_set_antialias(cr, CAIRO_ANTIALIAS_NONE); |
6688 | 6746 |
6689 gdk_cairo_set_source_rgba(cr, foreground); | 6747 gdk_cairo_set_source_rgba(cr, _dw_fg_color); |
6690 cairo_set_line_width(cr, 1); | 6748 cairo_set_line_width(cr, 1); |
6691 cairo_move_to(cr, x, y); | 6749 cairo_move_to(cr, x, y); |
6692 cairo_line_to(cr, x, y + height); | 6750 cairo_line_to(cr, x, y + height); |
6693 cairo_line_to(cr, x + width, y + height); | 6751 cairo_line_to(cr, x + width, y + height); |
6694 cairo_line_to(cr, x + width, y); | 6752 cairo_line_to(cr, x + width, y); |
6736 } | 6794 } |
6737 else if(pixmap) | 6795 else if(pixmap) |
6738 cr = cairo_create(pixmap->image); | 6796 cr = cairo_create(pixmap->image); |
6739 if(cr) | 6797 if(cr) |
6740 { | 6798 { |
6741 GdkRGBA *foreground = pthread_getspecific(_dw_fg_color_key); | 6799 #ifdef _DW_SINGLE_THREADED |
6800 GdkRGBA *_dw_fg_color = pthread_getspecific(_dw_fg_color_key); | |
6801 #endif | |
6742 int width = abs(x2-x1); | 6802 int width = abs(x2-x1); |
6743 float scale = fabs((float)(y2-y1))/(float)width; | 6803 float scale = fabs((float)(y2-y1))/(float)width; |
6744 | 6804 |
6745 if(flags & DW_DRAW_NOAA) | 6805 if(flags & DW_DRAW_NOAA) |
6746 cairo_set_antialias(cr, CAIRO_ANTIALIAS_NONE); | 6806 cairo_set_antialias(cr, CAIRO_ANTIALIAS_NONE); |
6747 | 6807 |
6748 gdk_cairo_set_source_rgba(cr, foreground); | 6808 gdk_cairo_set_source_rgba(cr, _dw_fg_color); |
6749 cairo_set_line_width(cr, 1); | 6809 cairo_set_line_width(cr, 1); |
6750 if(scale != 1.0) | 6810 if(scale != 1.0) |
6751 cairo_scale(cr, 1.0, scale); | 6811 cairo_scale(cr, 1.0, scale); |
6752 if(flags & DW_DRAW_FULL) | 6812 if(flags & DW_DRAW_FULL) |
6753 cairo_arc(cr, xorigin, yorigin / scale, width/2, 0, M_PI*2); | 6813 cairo_arc(cr, xorigin, yorigin / scale, width/2, 0, M_PI*2); |
6823 { | 6883 { |
6824 PangoLayout *layout = pango_layout_new(context); | 6884 PangoLayout *layout = pango_layout_new(context); |
6825 | 6885 |
6826 if(layout) | 6886 if(layout) |
6827 { | 6887 { |
6828 GdkRGBA *foreground = pthread_getspecific(_dw_fg_color_key); | 6888 #ifdef _DW_SINGLE_THREADED |
6829 GdkRGBA *background = pthread_getspecific(_dw_bg_color_key); | 6889 GdkRGBA *_dw_fg_color = pthread_getspecific(_dw_fg_color_key); |
6890 GdkRGBA *_dw_bg_color = pthread_getspecific(_dw_bg_color_key); | |
6891 #endif | |
6830 | 6892 |
6831 pango_layout_set_font_description(layout, font); | 6893 pango_layout_set_font_description(layout, font); |
6832 pango_layout_set_text(layout, text, strlen(text)); | 6894 pango_layout_set_text(layout, text, strlen(text)); |
6833 | 6895 |
6834 gdk_cairo_set_source_rgba(cr, foreground); | 6896 gdk_cairo_set_source_rgba(cr, _dw_fg_color); |
6835 /* Create a background color attribute if required */ | 6897 /* Create a background color attribute if required */ |
6836 if(background) | 6898 if(_dw_bg_color) |
6837 { | 6899 { |
6838 PangoAttrList *list = pango_layout_get_attributes(layout); | 6900 PangoAttrList *list = pango_layout_get_attributes(layout); |
6839 PangoAttribute *attr = pango_attr_background_new((guint16)(background->red * 65535), | 6901 PangoAttribute *attr = pango_attr_background_new((guint16)(_dw_bg_color->red * 65535), |
6840 (guint16)(background->green * 65535), | 6902 (guint16)(_dw_bg_color->green * 65535), |
6841 (guint16)(background->blue* 65535)); | 6903 (guint16)(_dw_bg_color->blue* 65535)); |
6842 if(!list) | 6904 if(!list) |
6843 { | 6905 { |
6844 list = pango_attr_list_new(); | 6906 list = pango_attr_list_new(); |
6845 } | 6907 } |
6846 pango_attr_list_change(list, attr); | 6908 pango_attr_list_change(list, attr); |