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 *)&param1; 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 *)&param1; \ 69 _args[2] = (void *)&param1; \
72 _args[3] = (void *)&param2; 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 *)&param1; \ 75 _args[2] = (void *)&param1; \
77 _args[3] = (void *)&param2; \ 76 _args[3] = (void *)&param2; \
78 _args[4] = (void *)&param3; 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 *)&param1; \ 82 _args[2] = (void *)&param1; \
83 _args[3] = (void *)&param2; \ 83 _args[3] = (void *)&param2; \
84 _args[4] = (void *)&param3; \ 84 _args[4] = (void *)&param3; \
85 _args[5] = (void *)&param4; 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 *)&param1; \ 90 _args[2] = (void *)&param1; \
90 _args[3] = (void *)&param2; \ 91 _args[3] = (void *)&param2; \
91 _args[4] = (void *)&param3; \ 92 _args[4] = (void *)&param3; \
92 _args[5] = (void *)&param4; \ 93 _args[5] = (void *)&param4; \
93 _args[6] = (void *)&param5; 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 *)&param1; \ 99 _args[2] = (void *)&param1; \
99 _args[3] = (void *)&param2; \ 100 _args[3] = (void *)&param2; \
100 _args[4] = (void *)&param3; \ 101 _args[4] = (void *)&param3; \
101 _args[5] = (void *)&param4; \ 102 _args[5] = (void *)&param4; \
102 _args[6] = (void *)&param5; \ 103 _args[6] = (void *)&param5; \
103 _args[7] = (void *)&param6; 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 *)&param1; \
109 _args[3] = (void *)&param2; \
110 _args[4] = (void *)&param3; \
111 _args[5] = (void *)&param4; \
112 _args[6] = (void *)&param5; \
113 _args[7] = (void *)&param6; \
114 _args[8] = (void *)&param7;
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 *)&param1; \ 110 _args[2] = (void *)&param1; \
120 _args[3] = (void *)&param2; \ 111 _args[3] = (void *)&param2; \
121 _args[4] = (void *)&param3; \ 112 _args[4] = (void *)&param3; \
122 _args[5] = (void *)&param4; \ 113 _args[5] = (void *)&param4; \
123 _args[6] = (void *)&param5; \ 114 _args[6] = (void *)&param5; \
124 _args[7] = (void *)&param6; \ 115 _args[7] = (void *)&param6; \
125 _args[8] = (void *)&param7; \ 116 _args[8] = (void *)pthread_getspecific(_dw_fg_color_key); \
126 _args[9] = (void *)&param8; 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 *)&param1; \ 122 _args[2] = (void *)&param1; \
132 _args[3] = (void *)&param2; \ 123 _args[3] = (void *)&param2; \
133 _args[4] = (void *)&param3; \ 124 _args[4] = (void *)&param3; \
134 _args[5] = (void *)&param4; \ 125 _args[5] = (void *)&param4; \
135 _args[6] = (void *)&param5; \ 126 _args[6] = (void *)&param5; \
136 _args[7] = (void *)&param6; \ 127 _args[7] = (void *)&param6; \
137 _args[8] = (void *)&param7; \ 128 _args[8] = (void *)&param7; \
138 _args[9] = (void *)&param8; \ 129 _args[9] = (void *)pthread_getspecific(_dw_fg_color_key); \
139 _args[10] = (void *)&param9; 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 *)&param1; \ 135 _args[2] = (void *)&param1; \
145 _args[3] = (void *)&param2; \ 136 _args[3] = (void *)&param2; \
147 _args[5] = (void *)&param4; \ 138 _args[5] = (void *)&param4; \
148 _args[6] = (void *)&param5; \ 139 _args[6] = (void *)&param5; \
149 _args[7] = (void *)&param6; \ 140 _args[7] = (void *)&param6; \
150 _args[8] = (void *)&param7; \ 141 _args[8] = (void *)&param7; \
151 _args[9] = (void *)&param8; \ 142 _args[9] = (void *)&param8; \
152 _args[10] = (void *)&param9; \ 143 _args[10] = (void *)pthread_getspecific(_dw_fg_color_key); \
153 _args[11] = (void *)&param10; 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 *)&param1; \ 149 _args[2] = (void *)&param1; \
159 _args[3] = (void *)&param2; \ 150 _args[3] = (void *)&param2; \
162 _args[6] = (void *)&param5; \ 153 _args[6] = (void *)&param5; \
163 _args[7] = (void *)&param6; \ 154 _args[7] = (void *)&param6; \
164 _args[8] = (void *)&param7; \ 155 _args[8] = (void *)&param7; \
165 _args[9] = (void *)&param8; \ 156 _args[9] = (void *)&param8; \
166 _args[10] = (void *)&param9; \ 157 _args[10] = (void *)&param9; \
167 _args[11] = (void *)&param10; \ 158 _args[11] = (void *)pthread_getspecific(_dw_fg_color_key); \
168 _args[12] = (void *)&param11; 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 *)&param1; \ 164 _args[2] = (void *)&param1; \
174 _args[3] = (void *)&param2; \ 165 _args[3] = (void *)&param2; \
178 _args[7] = (void *)&param6; \ 169 _args[7] = (void *)&param6; \
179 _args[8] = (void *)&param7; \ 170 _args[8] = (void *)&param7; \
180 _args[9] = (void *)&param8; \ 171 _args[9] = (void *)&param8; \
181 _args[10] = (void *)&param9; \ 172 _args[10] = (void *)&param9; \
182 _args[11] = (void *)&param10; \ 173 _args[11] = (void *)&param10; \
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 *)&param1; \
181 _args[3] = (void *)&param2; \
182 _args[4] = (void *)&param3; \
183 _args[5] = (void *)&param4; \
184 _args[6] = (void *)&param5; \
185 _args[7] = (void *)&param6; \
186 _args[8] = (void *)&param7; \
187 _args[9] = (void *)&param8; \
188 _args[10] = (void *)&param9; \
189 _args[11] = (void *)&param10; \
183 _args[12] = (void *)&param11; \ 190 _args[12] = (void *)&param11; \
184 _args[13] = (void *)&param12; 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 *)&param1; \
198 _args[3] = (void *)&param2; \
199 _args[4] = (void *)&param3; \
200 _args[5] = (void *)&param4; \
201 _args[6] = (void *)&param5; \
202 _args[7] = (void *)&param6; \
203 _args[8] = (void *)&param7; \
204 _args[9] = (void *)&param8; \
205 _args[10] = (void *)&param9; \
206 _args[11] = (void *)&param10; \
207 _args[12] = (void *)&param11; \
208 _args[13] = (void *)&param12; \
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);