Mercurial > dwindows
comparison mac/dw.m @ 2730:cff8f6b6e302
Mac: Same color thread safety passing changes as on iOS.
I did not see the same issues on MacOS as iOS but I have long worried about
these type of problems, and since I experienced them on iOS I decided to
port them to the other potentially affected platforms. GTK4 changes coming.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Sun, 12 Dec 2021 14:57:18 +0000 |
parents | 401a3b9f21ba |
children | 9be24001d288 |
comparison
equal
deleted
inserted
replaced
2729:f9df10c66353 | 2730:cff8f6b6e302 |
---|---|
185 #define DW_FUNCTION_DEFINITION(func, rettype, ...) void _##func(NSPointerArray *_args); \ | 185 #define DW_FUNCTION_DEFINITION(func, rettype, ...) void _##func(NSPointerArray *_args); \ |
186 rettype API func(__VA_ARGS__) { \ | 186 rettype API func(__VA_ARGS__) { \ |
187 DW_LOCAL_POOL_IN; \ | 187 DW_LOCAL_POOL_IN; \ |
188 NSPointerArray *_args = [[NSPointerArray alloc] initWithOptions:NSPointerFunctionsOpaqueMemory]; \ | 188 NSPointerArray *_args = [[NSPointerArray alloc] initWithOptions:NSPointerFunctionsOpaqueMemory]; \ |
189 [_args addPointer:(void *)_##func]; | 189 [_args addPointer:(void *)_##func]; |
190 #define DW_FUNCTION_ADD_PARAM1(param1) [_args addPointer:(void *)¶m1]; | 190 #define DW_FUNCTION_ADD_PARAM1(param1) [_args addPointer:(void *)¶m1]; \ |
191 [_args addPointer:(void *)pthread_getspecific(_dw_fg_color_key)]; \ | |
192 [_args addPointer:(void *)pthread_getspecific(_dw_bg_color_key)]; | |
191 #define DW_FUNCTION_ADD_PARAM2(param1, param2) [_args addPointer:(void *)¶m1]; \ | 193 #define DW_FUNCTION_ADD_PARAM2(param1, param2) [_args addPointer:(void *)¶m1]; \ |
192 [_args addPointer:(void *)¶m2]; | 194 [_args addPointer:(void *)¶m2]; \ |
195 [_args addPointer:(void *)pthread_getspecific(_dw_fg_color_key)]; \ | |
196 [_args addPointer:(void *)pthread_getspecific(_dw_bg_color_key)]; | |
193 #define DW_FUNCTION_ADD_PARAM3(param1, param2, param3) [_args addPointer:(void *)¶m1]; \ | 197 #define DW_FUNCTION_ADD_PARAM3(param1, param2, param3) [_args addPointer:(void *)¶m1]; \ |
194 [_args addPointer:(void *)¶m2]; \ | 198 [_args addPointer:(void *)¶m2]; \ |
195 [_args addPointer:(void *)¶m3]; | 199 [_args addPointer:(void *)¶m3]; \ |
200 [_args addPointer:(void *)pthread_getspecific(_dw_fg_color_key)]; \ | |
201 [_args addPointer:(void *)pthread_getspecific(_dw_bg_color_key)]; | |
196 #define DW_FUNCTION_ADD_PARAM4(param1, param2, param3, param4) [_args addPointer:(void *)¶m1]; \ | 202 #define DW_FUNCTION_ADD_PARAM4(param1, param2, param3, param4) [_args addPointer:(void *)¶m1]; \ |
197 [_args addPointer:(void *)¶m2]; \ | 203 [_args addPointer:(void *)¶m2]; \ |
198 [_args addPointer:(void *)¶m3]; \ | 204 [_args addPointer:(void *)¶m3]; \ |
199 [_args addPointer:(void *)¶m4]; | 205 [_args addPointer:(void *)¶m4]; \ |
206 [_args addPointer:(void *)pthread_getspecific(_dw_fg_color_key)]; \ | |
207 [_args addPointer:(void *)pthread_getspecific(_dw_bg_color_key)]; | |
200 #define DW_FUNCTION_ADD_PARAM5(param1, param2, param3, param4, param5) [_args addPointer:(void *)¶m1]; \ | 208 #define DW_FUNCTION_ADD_PARAM5(param1, param2, param3, param4, param5) [_args addPointer:(void *)¶m1]; \ |
201 [_args addPointer:(void *)¶m2]; \ | 209 [_args addPointer:(void *)¶m2]; \ |
202 [_args addPointer:(void *)¶m3]; \ | 210 [_args addPointer:(void *)¶m3]; \ |
203 [_args addPointer:(void *)¶m4]; \ | 211 [_args addPointer:(void *)¶m4]; \ |
204 [_args addPointer:(void *)¶m5]; | 212 [_args addPointer:(void *)¶m5]; \ |
213 [_args addPointer:(void *)pthread_getspecific(_dw_fg_color_key)]; \ | |
214 [_args addPointer:(void *)pthread_getspecific(_dw_bg_color_key)]; | |
205 #define DW_FUNCTION_ADD_PARAM6(param1, param2, param3, param4, param5, param6) \ | 215 #define DW_FUNCTION_ADD_PARAM6(param1, param2, param3, param4, param5, param6) \ |
206 [_args addPointer:(void *)¶m1]; \ | 216 [_args addPointer:(void *)¶m1]; \ |
207 [_args addPointer:(void *)¶m2]; \ | 217 [_args addPointer:(void *)¶m2]; \ |
208 [_args addPointer:(void *)¶m3]; \ | 218 [_args addPointer:(void *)¶m3]; \ |
209 [_args addPointer:(void *)¶m4]; \ | 219 [_args addPointer:(void *)¶m4]; \ |
210 [_args addPointer:(void *)¶m5]; \ | 220 [_args addPointer:(void *)¶m5]; \ |
211 [_args addPointer:(void *)¶m6]; | 221 [_args addPointer:(void *)¶m6]; \ |
222 [_args addPointer:(void *)pthread_getspecific(_dw_fg_color_key)]; \ | |
223 [_args addPointer:(void *)pthread_getspecific(_dw_bg_color_key)]; | |
212 #define DW_FUNCTION_ADD_PARAM7(param1, param2, param3, param4, param5, param6, param7) \ | 224 #define DW_FUNCTION_ADD_PARAM7(param1, param2, param3, param4, param5, param6, param7) \ |
213 [_args addPointer:(void *)¶m1]; \ | 225 [_args addPointer:(void *)¶m1]; \ |
214 [_args addPointer:(void *)¶m2]; \ | 226 [_args addPointer:(void *)¶m2]; \ |
215 [_args addPointer:(void *)¶m3]; \ | 227 [_args addPointer:(void *)¶m3]; \ |
216 [_args addPointer:(void *)¶m4]; \ | 228 [_args addPointer:(void *)¶m4]; \ |
217 [_args addPointer:(void *)¶m5]; \ | 229 [_args addPointer:(void *)¶m5]; \ |
218 [_args addPointer:(void *)¶m6]; \ | 230 [_args addPointer:(void *)¶m6]; \ |
219 [_args addPointer:(void *)¶m7]; | 231 [_args addPointer:(void *)¶m7]; \ |
232 [_args addPointer:(void *)pthread_getspecific(_dw_fg_color_key)]; \ | |
233 [_args addPointer:(void *)pthread_getspecific(_dw_bg_color_key)]; | |
220 #define DW_FUNCTION_ADD_PARAM8(param1, param2, param3, param4, param5, param6, param7, param8) \ | 234 #define DW_FUNCTION_ADD_PARAM8(param1, param2, param3, param4, param5, param6, param7, param8) \ |
221 [_args addPointer:(void *)¶m1]; \ | 235 [_args addPointer:(void *)¶m1]; \ |
222 [_args addPointer:(void *)¶m2]; \ | 236 [_args addPointer:(void *)¶m2]; \ |
223 [_args addPointer:(void *)¶m3]; \ | 237 [_args addPointer:(void *)¶m3]; \ |
224 [_args addPointer:(void *)¶m4]; \ | 238 [_args addPointer:(void *)¶m4]; \ |
225 [_args addPointer:(void *)¶m5]; \ | 239 [_args addPointer:(void *)¶m5]; \ |
226 [_args addPointer:(void *)¶m6]; \ | 240 [_args addPointer:(void *)¶m6]; \ |
227 [_args addPointer:(void *)¶m7]; \ | 241 [_args addPointer:(void *)¶m7]; \ |
228 [_args addPointer:(void *)¶m8]; | 242 [_args addPointer:(void *)¶m8]; \ |
243 [_args addPointer:(void *)pthread_getspecific(_dw_fg_color_key)]; \ | |
244 [_args addPointer:(void *)pthread_getspecific(_dw_bg_color_key)]; | |
229 #define DW_FUNCTION_ADD_PARAM9(param1, param2, param3, param4, param5, param6, param7, param8, param9) \ | 245 #define DW_FUNCTION_ADD_PARAM9(param1, param2, param3, param4, param5, param6, param7, param8, param9) \ |
230 [_args addPointer:(void *)¶m1]; \ | 246 [_args addPointer:(void *)¶m1]; \ |
231 [_args addPointer:(void *)¶m2]; \ | 247 [_args addPointer:(void *)¶m2]; \ |
232 [_args addPointer:(void *)¶m3]; \ | 248 [_args addPointer:(void *)¶m3]; \ |
233 [_args addPointer:(void *)¶m4]; \ | 249 [_args addPointer:(void *)¶m4]; \ |
234 [_args addPointer:(void *)¶m5]; \ | 250 [_args addPointer:(void *)¶m5]; \ |
235 [_args addPointer:(void *)¶m6]; \ | 251 [_args addPointer:(void *)¶m6]; \ |
236 [_args addPointer:(void *)¶m7]; \ | 252 [_args addPointer:(void *)¶m7]; \ |
237 [_args addPointer:(void *)¶m8]; \ | 253 [_args addPointer:(void *)¶m8]; \ |
238 [_args addPointer:(void *)¶m9]; | 254 [_args addPointer:(void *)¶m9]; \ |
239 #define DW_FUNCTION_RESTORE_PARAM1(param1, vartype1) vartype1 param1 = *((vartype1 *)[_args pointerAtIndex:1]); | 255 [_args addPointer:(void *)pthread_getspecific(_dw_fg_color_key)]; \ |
256 [_args addPointer:(void *)pthread_getspecific(_dw_bg_color_key)]; | |
257 #define DW_FUNCTION_RESTORE_PARAM1(param1, vartype1) \ | |
258 vartype1 param1 = *((vartype1 *)[_args pointerAtIndex:1]); \ | |
259 NSColor * DW_UNUSED(_dw_fg_color) = (NSColor *)[_args pointerAtIndex:2]; \ | |
260 NSColor * DW_UNUSED(_dw_bg_color) = (NSColor *)[_args pointerAtIndex:3]; | |
240 #define DW_FUNCTION_RESTORE_PARAM2(param1, vartype1, param2, vartype2) \ | 261 #define DW_FUNCTION_RESTORE_PARAM2(param1, vartype1, param2, vartype2) \ |
241 vartype1 param1 = *((vartype1 *)[_args pointerAtIndex:1]); \ | 262 vartype1 param1 = *((vartype1 *)[_args pointerAtIndex:1]); \ |
242 vartype2 param2 = *((vartype2 *)[_args pointerAtIndex:2]); | 263 vartype2 param2 = *((vartype2 *)[_args pointerAtIndex:2]); \ |
264 NSColor * DW_UNUSED(_dw_fg_color) = (NSColor *)[_args pointerAtIndex:3]; \ | |
265 NSColor * DW_UNUSED(_dw_bg_color) = (NSColor *)[_args pointerAtIndex:4]; | |
243 #define DW_FUNCTION_RESTORE_PARAM3(param1, vartype1, param2, vartype2, param3, vartype3) \ | 266 #define DW_FUNCTION_RESTORE_PARAM3(param1, vartype1, param2, vartype2, param3, vartype3) \ |
244 vartype1 param1 = *((vartype1 *)[_args pointerAtIndex:1]); \ | 267 vartype1 param1 = *((vartype1 *)[_args pointerAtIndex:1]); \ |
245 vartype2 param2 = *((vartype2 *)[_args pointerAtIndex:2]); \ | 268 vartype2 param2 = *((vartype2 *)[_args pointerAtIndex:2]); \ |
246 vartype3 param3 = *((vartype3 *)[_args pointerAtIndex:3]); | 269 vartype3 param3 = *((vartype3 *)[_args pointerAtIndex:3]); \ |
270 NSColor * DW_UNUSED(_dw_fg_color) = (NSColor *)[_args pointerAtIndex:4]; \ | |
271 NSColor * DW_UNUSED(_dw_bg_color) = (NSColor *)[_args pointerAtIndex:5]; | |
247 #define DW_FUNCTION_RESTORE_PARAM4(param1, vartype1, param2, vartype2, param3, vartype3, param4, vartype4) \ | 272 #define DW_FUNCTION_RESTORE_PARAM4(param1, vartype1, param2, vartype2, param3, vartype3, param4, vartype4) \ |
248 vartype1 param1 = *((vartype1 *)[_args pointerAtIndex:1]); \ | 273 vartype1 param1 = *((vartype1 *)[_args pointerAtIndex:1]); \ |
249 vartype2 param2 = *((vartype2 *)[_args pointerAtIndex:2]); \ | 274 vartype2 param2 = *((vartype2 *)[_args pointerAtIndex:2]); \ |
250 vartype3 param3 = *((vartype3 *)[_args pointerAtIndex:3]); \ | 275 vartype3 param3 = *((vartype3 *)[_args pointerAtIndex:3]); \ |
251 vartype4 param4 = *((vartype4 *)[_args pointerAtIndex:4]); | 276 vartype4 param4 = *((vartype4 *)[_args pointerAtIndex:4]); \ |
277 NSColor * DW_UNUSED(_dw_fg_color) = (NSColor *)[_args pointerAtIndex:5]; \ | |
278 NSColor * DW_UNUSED(_dw_bg_color) = (NSColor *)[_args pointerAtIndex:6]; | |
252 #define DW_FUNCTION_RESTORE_PARAM5(param1, vartype1, param2, vartype2, param3, vartype3, param4, vartype4, param5, vartype5) \ | 279 #define DW_FUNCTION_RESTORE_PARAM5(param1, vartype1, param2, vartype2, param3, vartype3, param4, vartype4, param5, vartype5) \ |
253 vartype1 param1 = *((vartype1 *)[_args pointerAtIndex:1]); \ | 280 vartype1 param1 = *((vartype1 *)[_args pointerAtIndex:1]); \ |
254 vartype2 param2 = *((vartype2 *)[_args pointerAtIndex:2]); \ | 281 vartype2 param2 = *((vartype2 *)[_args pointerAtIndex:2]); \ |
255 vartype3 param3 = *((vartype3 *)[_args pointerAtIndex:3]); \ | 282 vartype3 param3 = *((vartype3 *)[_args pointerAtIndex:3]); \ |
256 vartype4 param4 = *((vartype4 *)[_args pointerAtIndex:4]); \ | 283 vartype4 param4 = *((vartype4 *)[_args pointerAtIndex:4]); \ |
257 vartype5 param5 = *((vartype5 *)[_args pointerAtIndex:5]); | 284 vartype5 param5 = *((vartype5 *)[_args pointerAtIndex:5]); \ |
285 NSColor * DW_UNUSED(_dw_fg_color) = (NSColor *)[_args pointerAtIndex:6]; \ | |
286 NSColor * DW_UNUSED(_dw_bg_color) = (NSColor *)[_args pointerAtIndex:7]; | |
258 #define DW_FUNCTION_RESTORE_PARAM6(param1, vartype1, param2, vartype2, param3, vartype3, param4, vartype4, param5, vartype5, param6, vartype6) \ | 287 #define DW_FUNCTION_RESTORE_PARAM6(param1, vartype1, param2, vartype2, param3, vartype3, param4, vartype4, param5, vartype5, param6, vartype6) \ |
259 vartype1 param1 = *((vartype1 *)[_args pointerAtIndex:1]); \ | 288 vartype1 param1 = *((vartype1 *)[_args pointerAtIndex:1]); \ |
260 vartype2 param2 = *((vartype2 *)[_args pointerAtIndex:2]); \ | 289 vartype2 param2 = *((vartype2 *)[_args pointerAtIndex:2]); \ |
261 vartype3 param3 = *((vartype3 *)[_args pointerAtIndex:3]); \ | 290 vartype3 param3 = *((vartype3 *)[_args pointerAtIndex:3]); \ |
262 vartype4 param4 = *((vartype4 *)[_args pointerAtIndex:4]); \ | 291 vartype4 param4 = *((vartype4 *)[_args pointerAtIndex:4]); \ |
263 vartype5 param5 = *((vartype5 *)[_args pointerAtIndex:5]); \ | 292 vartype5 param5 = *((vartype5 *)[_args pointerAtIndex:5]); \ |
264 vartype6 param6 = *((vartype6 *)[_args pointerAtIndex:6]); | 293 vartype6 param6 = *((vartype6 *)[_args pointerAtIndex:6]); \ |
294 NSColor * DW_UNUSED(_dw_fg_color) = (NSColor *)[_args pointerAtIndex:7]; \ | |
295 NSColor * DW_UNUSED(_dw_bg_color) = (NSColor *)[_args pointerAtIndex:8]; | |
265 #define DW_FUNCTION_RESTORE_PARAM7(param1, vartype1, param2, vartype2, param3, vartype3, param4, vartype4, param5, vartype5, param6, vartype6, param7, vartype7) \ | 296 #define DW_FUNCTION_RESTORE_PARAM7(param1, vartype1, param2, vartype2, param3, vartype3, param4, vartype4, param5, vartype5, param6, vartype6, param7, vartype7) \ |
266 vartype1 param1 = *((vartype1 *)[_args pointerAtIndex:1]); \ | 297 vartype1 param1 = *((vartype1 *)[_args pointerAtIndex:1]); \ |
267 vartype2 param2 = *((vartype2 *)[_args pointerAtIndex:2]); \ | 298 vartype2 param2 = *((vartype2 *)[_args pointerAtIndex:2]); \ |
268 vartype3 param3 = *((vartype3 *)[_args pointerAtIndex:3]); \ | 299 vartype3 param3 = *((vartype3 *)[_args pointerAtIndex:3]); \ |
269 vartype4 param4 = *((vartype4 *)[_args pointerAtIndex:4]); \ | 300 vartype4 param4 = *((vartype4 *)[_args pointerAtIndex:4]); \ |
270 vartype5 param5 = *((vartype5 *)[_args pointerAtIndex:5]); \ | 301 vartype5 param5 = *((vartype5 *)[_args pointerAtIndex:5]); \ |
271 vartype6 param6 = *((vartype6 *)[_args pointerAtIndex:6]); \ | 302 vartype6 param6 = *((vartype6 *)[_args pointerAtIndex:6]); \ |
272 vartype7 param7 = *((vartype7 *)[_args pointerAtIndex:7]); | 303 vartype7 param7 = *((vartype7 *)[_args pointerAtIndex:7]); \ |
304 NSColor * DW_UNUSED(_dw_fg_color) = (NSColor *)[_args pointerAtIndex:8]; \ | |
305 NSColor * DW_UNUSED(_dw_bg_color) = (NSColor *)[_args pointerAtIndex:9]; | |
273 #define DW_FUNCTION_RESTORE_PARAM8(param1, vartype1, param2, vartype2, param3, vartype3, param4, vartype4, param5, vartype5, param6, vartype6, param7, vartype7, param8, vartype8) \ | 306 #define DW_FUNCTION_RESTORE_PARAM8(param1, vartype1, param2, vartype2, param3, vartype3, param4, vartype4, param5, vartype5, param6, vartype6, param7, vartype7, param8, vartype8) \ |
274 vartype1 param1 = *((vartype1 *)[_args pointerAtIndex:1]); \ | 307 vartype1 param1 = *((vartype1 *)[_args pointerAtIndex:1]); \ |
275 vartype2 param2 = *((vartype2 *)[_args pointerAtIndex:2]); \ | 308 vartype2 param2 = *((vartype2 *)[_args pointerAtIndex:2]); \ |
276 vartype3 param3 = *((vartype3 *)[_args pointerAtIndex:3]); \ | 309 vartype3 param3 = *((vartype3 *)[_args pointerAtIndex:3]); \ |
277 vartype4 param4 = *((vartype4 *)[_args pointerAtIndex:4]); \ | 310 vartype4 param4 = *((vartype4 *)[_args pointerAtIndex:4]); \ |
278 vartype5 param5 = *((vartype5 *)[_args pointerAtIndex:5]); \ | 311 vartype5 param5 = *((vartype5 *)[_args pointerAtIndex:5]); \ |
279 vartype6 param6 = *((vartype6 *)[_args pointerAtIndex:6]); \ | 312 vartype6 param6 = *((vartype6 *)[_args pointerAtIndex:6]); \ |
280 vartype7 param7 = *((vartype7 *)[_args pointerAtIndex:7]); \ | 313 vartype7 param7 = *((vartype7 *)[_args pointerAtIndex:7]); \ |
281 vartype8 param8 = *((vartype8 *)[_args pointerAtIndex:8]); | 314 vartype8 param8 = *((vartype8 *)[_args pointerAtIndex:8]); \ |
315 NSColor * DW_UNUSED(_dw_fg_color) = (NSColor *)[_args pointerAtIndex:9]; \ | |
316 NSColor * DW_UNUSED(_dw_bg_color) = (NSColor *)[_args pointerAtIndex:10]; | |
282 #define DW_FUNCTION_RESTORE_PARAM9(param1, vartype1, param2, vartype2, param3, vartype3, param4, vartype4, param5, vartype5, param6, vartype6, param7, vartype7, param8, vartype8, param9, vartype9) \ | 317 #define DW_FUNCTION_RESTORE_PARAM9(param1, vartype1, param2, vartype2, param3, vartype3, param4, vartype4, param5, vartype5, param6, vartype6, param7, vartype7, param8, vartype8, param9, vartype9) \ |
283 vartype1 param1 = *((vartype1 *)[_args pointerAtIndex:1]); \ | 318 vartype1 param1 = *((vartype1 *)[_args pointerAtIndex:1]); \ |
284 vartype2 param2 = *((vartype2 *)[_args pointerAtIndex:2]); \ | 319 vartype2 param2 = *((vartype2 *)[_args pointerAtIndex:2]); \ |
285 vartype3 param3 = *((vartype3 *)[_args pointerAtIndex:3]); \ | 320 vartype3 param3 = *((vartype3 *)[_args pointerAtIndex:3]); \ |
286 vartype4 param4 = *((vartype4 *)[_args pointerAtIndex:4]); \ | 321 vartype4 param4 = *((vartype4 *)[_args pointerAtIndex:4]); \ |
287 vartype5 param5 = *((vartype5 *)[_args pointerAtIndex:5]); \ | 322 vartype5 param5 = *((vartype5 *)[_args pointerAtIndex:5]); \ |
288 vartype6 param6 = *((vartype6 *)[_args pointerAtIndex:6]); \ | 323 vartype6 param6 = *((vartype6 *)[_args pointerAtIndex:6]); \ |
289 vartype7 param7 = *((vartype7 *)[_args pointerAtIndex:7]); \ | 324 vartype7 param7 = *((vartype7 *)[_args pointerAtIndex:7]); \ |
290 vartype8 param8 = *((vartype8 *)[_args pointerAtIndex:8]); \ | 325 vartype8 param8 = *((vartype8 *)[_args pointerAtIndex:8]); \ |
291 vartype9 param9 = *((vartype9 *)[_args pointerAtIndex:9]); | 326 vartype9 param9 = *((vartype9 *)[_args pointerAtIndex:9]); \ |
327 NSColor * DW_UNUSED(_dw_fg_color) = (NSColor *)[_args pointerAtIndex:10]; \ | |
328 NSColor * DW_UNUSED(_dw_bg_color) = (NSColor *)[_args pointerAtIndex:11]; | |
292 #define DW_FUNCTION_END } | 329 #define DW_FUNCTION_END } |
293 #define DW_FUNCTION_NO_RETURN(func) [DWObj safeCall:@selector(callBack:) withObject:_args]; \ | 330 #define DW_FUNCTION_NO_RETURN(func) [DWObj safeCall:@selector(callBack:) withObject:_args]; \ |
294 [_args release]; \ | 331 [_args release]; \ |
295 DW_LOCAL_POOL_OUT; } \ | 332 DW_LOCAL_POOL_OUT; } \ |
296 void _##func(NSPointerArray *_args) { | 333 void _##func(NSPointerArray *_args) { |
6874 [NSGraphicsContext setCurrentContext:_dw_draw_context(bi)]; | 6911 [NSGraphicsContext setCurrentContext:_dw_draw_context(bi)]; |
6875 } | 6912 } |
6876 if(bCanDraw == YES) | 6913 if(bCanDraw == YES) |
6877 { | 6914 { |
6878 NSBezierPath* aPath = [NSBezierPath bezierPath]; | 6915 NSBezierPath* aPath = [NSBezierPath bezierPath]; |
6916 #ifndef BUILDING_FOR_MOJAVE | |
6917 NSColor *_dw_fg_color = pthread_getspecific(_dw_fg_color_key); | |
6918 #endif | |
6919 | |
6879 [aPath setLineWidth: 0.5]; | 6920 [aPath setLineWidth: 0.5]; |
6880 NSColor *color = pthread_getspecific(_dw_fg_color_key); | 6921 [_dw_fg_color set]; |
6881 [color set]; | |
6882 | 6922 |
6883 [aPath moveToPoint:NSMakePoint(x, y)]; | 6923 [aPath moveToPoint:NSMakePoint(x, y)]; |
6884 [aPath stroke]; | 6924 [aPath stroke]; |
6885 } | 6925 } |
6886 if(bi) | 6926 if(bi) |
6935 [NSGraphicsContext setCurrentContext:_dw_draw_context(bi)]; | 6975 [NSGraphicsContext setCurrentContext:_dw_draw_context(bi)]; |
6936 } | 6976 } |
6937 if(bCanDraw == YES) | 6977 if(bCanDraw == YES) |
6938 { | 6978 { |
6939 NSBezierPath* aPath = [NSBezierPath bezierPath]; | 6979 NSBezierPath* aPath = [NSBezierPath bezierPath]; |
6940 NSColor *color = pthread_getspecific(_dw_fg_color_key); | 6980 #ifndef BUILDING_FOR_MOJAVE |
6941 [color set]; | 6981 NSColor *_dw_fg_color = pthread_getspecific(_dw_fg_color_key); |
6982 #endif | |
6983 | |
6984 [_dw_fg_color set]; | |
6942 | 6985 |
6943 [aPath moveToPoint:NSMakePoint(x1 + 0.5, y1 + 0.5)]; | 6986 [aPath moveToPoint:NSMakePoint(x1 + 0.5, y1 + 0.5)]; |
6944 [aPath lineToPoint:NSMakePoint(x2 + 0.5, y2 + 0.5)]; | 6987 [aPath lineToPoint:NSMakePoint(x2 + 0.5, y2 + 0.5)]; |
6945 [aPath stroke]; | 6988 [aPath stroke]; |
6946 } | 6989 } |
7004 [NSGraphicsContext setCurrentContext:_dw_draw_context(bi)]; | 7047 [NSGraphicsContext setCurrentContext:_dw_draw_context(bi)]; |
7005 } | 7048 } |
7006 | 7049 |
7007 if(bCanDraw == YES) | 7050 if(bCanDraw == YES) |
7008 { | 7051 { |
7009 NSColor *fgcolor = pthread_getspecific(_dw_fg_color_key); | 7052 #ifndef BUILDING_FOR_MOJAVE |
7010 NSColor *bgcolor = pthread_getspecific(_dw_bg_color_key); | 7053 NSColor *_dw_fg_color = pthread_getspecific(_dw_fg_color_key); |
7011 NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithObjectsAndKeys:fgcolor, NSForegroundColorAttributeName, nil]; | 7054 NSColor *_dw_bg_color = pthread_getspecific(_dw_bg_color_key); |
7012 if(bgcolor) | 7055 #endif |
7013 [dict setValue:bgcolor forKey:NSBackgroundColorAttributeName]; | 7056 NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithObjectsAndKeys:_dw_fg_color, NSForegroundColorAttributeName, nil]; |
7057 if(_dw_bg_color) | |
7058 [dict setValue:_dw_bg_color forKey:NSBackgroundColorAttributeName]; | |
7014 if(font) | 7059 if(font) |
7015 [dict setValue:font forKey:NSFontAttributeName]; | 7060 [dict setValue:font forKey:NSFontAttributeName]; |
7016 [nstr drawAtPoint:NSMakePoint(x, y) withAttributes:dict]; | 7061 [nstr drawAtPoint:NSMakePoint(x, y) withAttributes:dict]; |
7017 [dict release]; | 7062 [dict release]; |
7018 } | 7063 } |
7142 } | 7187 } |
7143 | 7188 |
7144 if(bCanDraw == YES) | 7189 if(bCanDraw == YES) |
7145 { | 7190 { |
7146 NSBezierPath* aPath = [NSBezierPath bezierPath]; | 7191 NSBezierPath* aPath = [NSBezierPath bezierPath]; |
7147 NSColor *color = pthread_getspecific(_dw_fg_color_key); | 7192 #ifndef BUILDING_FOR_MOJAVE |
7148 [color set]; | 7193 NSColor *_dw_fg_color = pthread_getspecific(_dw_fg_color_key); |
7194 #endif | |
7195 | |
7196 [_dw_fg_color set]; | |
7149 | 7197 |
7150 [aPath moveToPoint:NSMakePoint(*x + 0.5, *y + 0.5)]; | 7198 [aPath moveToPoint:NSMakePoint(*x + 0.5, *y + 0.5)]; |
7151 for(z=1;z<npoints;z++) | 7199 for(z=1;z<npoints;z++) |
7152 { | 7200 { |
7153 [aPath lineToPoint:NSMakePoint(x[z] + 0.5, y[z] + 0.5)]; | 7201 [aPath lineToPoint:NSMakePoint(x[z] + 0.5, y[z] + 0.5)]; |
7217 [NSGraphicsContext setCurrentContext:gc]; | 7265 [NSGraphicsContext setCurrentContext:gc]; |
7218 } | 7266 } |
7219 | 7267 |
7220 if(bCanDraw == YES) | 7268 if(bCanDraw == YES) |
7221 { | 7269 { |
7222 NSColor *color = pthread_getspecific(_dw_fg_color_key); | 7270 #ifndef BUILDING_FOR_MOJAVE |
7223 [color set]; | 7271 NSColor *_dw_fg_color = pthread_getspecific(_dw_fg_color_key); |
7272 #endif | |
7273 | |
7274 [_dw_fg_color set]; | |
7224 | 7275 |
7225 if(flags & DW_DRAW_FILL) | 7276 if(flags & DW_DRAW_FILL) |
7226 [NSBezierPath fillRect:NSMakeRect(x, y, width, height)]; | 7277 [NSBezierPath fillRect:NSMakeRect(x, y, width, height)]; |
7227 else | 7278 else |
7228 [NSBezierPath strokeRect:NSMakeRect(x, y, width, height)]; | 7279 [NSBezierPath strokeRect:NSMakeRect(x, y, width, height)]; |
7289 } | 7340 } |
7290 | 7341 |
7291 if(bCanDraw) | 7342 if(bCanDraw) |
7292 { | 7343 { |
7293 NSBezierPath* aPath = [NSBezierPath bezierPath]; | 7344 NSBezierPath* aPath = [NSBezierPath bezierPath]; |
7294 NSColor *color = pthread_getspecific(_dw_fg_color_key); | 7345 #ifndef BUILDING_FOR_MOJAVE |
7295 [color set]; | 7346 NSColor *_dw_fg_color = pthread_getspecific(_dw_fg_color_key); |
7347 #endif | |
7348 | |
7349 [_dw_fg_color set]; | |
7296 | 7350 |
7297 /* Special case of a full circle/oval */ | 7351 /* Special case of a full circle/oval */ |
7298 if(flags & DW_DRAW_FULL) | 7352 if(flags & DW_DRAW_FULL) |
7299 { | 7353 { |
7300 [aPath appendBezierPathWithOvalInRect:NSMakeRect(x1, y1, x2 - x1, y2 - y1)]; | 7354 [aPath appendBezierPathWithOvalInRect:NSMakeRect(x1, y1, x2 - x1, y2 - y1)]; |