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 *)&param1]; 190 #define DW_FUNCTION_ADD_PARAM1(param1) [_args addPointer:(void *)&param1]; \
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 *)&param1]; \ 193 #define DW_FUNCTION_ADD_PARAM2(param1, param2) [_args addPointer:(void *)&param1]; \
192 [_args addPointer:(void *)&param2]; 194 [_args addPointer:(void *)&param2]; \
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 *)&param1]; \ 197 #define DW_FUNCTION_ADD_PARAM3(param1, param2, param3) [_args addPointer:(void *)&param1]; \
194 [_args addPointer:(void *)&param2]; \ 198 [_args addPointer:(void *)&param2]; \
195 [_args addPointer:(void *)&param3]; 199 [_args addPointer:(void *)&param3]; \
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 *)&param1]; \ 202 #define DW_FUNCTION_ADD_PARAM4(param1, param2, param3, param4) [_args addPointer:(void *)&param1]; \
197 [_args addPointer:(void *)&param2]; \ 203 [_args addPointer:(void *)&param2]; \
198 [_args addPointer:(void *)&param3]; \ 204 [_args addPointer:(void *)&param3]; \
199 [_args addPointer:(void *)&param4]; 205 [_args addPointer:(void *)&param4]; \
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 *)&param1]; \ 208 #define DW_FUNCTION_ADD_PARAM5(param1, param2, param3, param4, param5) [_args addPointer:(void *)&param1]; \
201 [_args addPointer:(void *)&param2]; \ 209 [_args addPointer:(void *)&param2]; \
202 [_args addPointer:(void *)&param3]; \ 210 [_args addPointer:(void *)&param3]; \
203 [_args addPointer:(void *)&param4]; \ 211 [_args addPointer:(void *)&param4]; \
204 [_args addPointer:(void *)&param5]; 212 [_args addPointer:(void *)&param5]; \
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 *)&param1]; \ 216 [_args addPointer:(void *)&param1]; \
207 [_args addPointer:(void *)&param2]; \ 217 [_args addPointer:(void *)&param2]; \
208 [_args addPointer:(void *)&param3]; \ 218 [_args addPointer:(void *)&param3]; \
209 [_args addPointer:(void *)&param4]; \ 219 [_args addPointer:(void *)&param4]; \
210 [_args addPointer:(void *)&param5]; \ 220 [_args addPointer:(void *)&param5]; \
211 [_args addPointer:(void *)&param6]; 221 [_args addPointer:(void *)&param6]; \
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 *)&param1]; \ 225 [_args addPointer:(void *)&param1]; \
214 [_args addPointer:(void *)&param2]; \ 226 [_args addPointer:(void *)&param2]; \
215 [_args addPointer:(void *)&param3]; \ 227 [_args addPointer:(void *)&param3]; \
216 [_args addPointer:(void *)&param4]; \ 228 [_args addPointer:(void *)&param4]; \
217 [_args addPointer:(void *)&param5]; \ 229 [_args addPointer:(void *)&param5]; \
218 [_args addPointer:(void *)&param6]; \ 230 [_args addPointer:(void *)&param6]; \
219 [_args addPointer:(void *)&param7]; 231 [_args addPointer:(void *)&param7]; \
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 *)&param1]; \ 235 [_args addPointer:(void *)&param1]; \
222 [_args addPointer:(void *)&param2]; \ 236 [_args addPointer:(void *)&param2]; \
223 [_args addPointer:(void *)&param3]; \ 237 [_args addPointer:(void *)&param3]; \
224 [_args addPointer:(void *)&param4]; \ 238 [_args addPointer:(void *)&param4]; \
225 [_args addPointer:(void *)&param5]; \ 239 [_args addPointer:(void *)&param5]; \
226 [_args addPointer:(void *)&param6]; \ 240 [_args addPointer:(void *)&param6]; \
227 [_args addPointer:(void *)&param7]; \ 241 [_args addPointer:(void *)&param7]; \
228 [_args addPointer:(void *)&param8]; 242 [_args addPointer:(void *)&param8]; \
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 *)&param1]; \ 246 [_args addPointer:(void *)&param1]; \
231 [_args addPointer:(void *)&param2]; \ 247 [_args addPointer:(void *)&param2]; \
232 [_args addPointer:(void *)&param3]; \ 248 [_args addPointer:(void *)&param3]; \
233 [_args addPointer:(void *)&param4]; \ 249 [_args addPointer:(void *)&param4]; \
234 [_args addPointer:(void *)&param5]; \ 250 [_args addPointer:(void *)&param5]; \
235 [_args addPointer:(void *)&param6]; \ 251 [_args addPointer:(void *)&param6]; \
236 [_args addPointer:(void *)&param7]; \ 252 [_args addPointer:(void *)&param7]; \
237 [_args addPointer:(void *)&param8]; \ 253 [_args addPointer:(void *)&param8]; \
238 [_args addPointer:(void *)&param9]; 254 [_args addPointer:(void *)&param9]; \
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)];