Mercurial > dwindows
diff mac/dw.m @ 1957:c15af2f757e2
Mac: Initial code to support Dark Mode on Mojave.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Wed, 24 Jul 2019 20:31:55 +0000 |
parents | 2924bc788170 |
children | 45abd53a3fc6 |
line wrap: on
line diff
--- a/mac/dw.m Wed Jul 24 18:51:57 2019 +0000 +++ b/mac/dw.m Wed Jul 24 20:31:55 2019 +0000 @@ -395,6 +395,9 @@ return NULL; } +unsigned long _DW_COLOR_ROW_ODD = DW_RGB(230, 230, 230); +unsigned long _DW_COLOR_ROW_EVEN = DW_RGB_TRANSPARENT; + unsigned long _get_color(unsigned long thiscolor) { if(thiscolor & DW_RGB_COLOR) @@ -421,7 +424,24 @@ void _init_colors(void) { NSColor *fgcolor = [[NSColor grayColor] retain]; - +#ifdef BUILDING_FOR_MOJAVE + if (@available(macOS 10.14, *)) + { + NSArray<NSColor *> *bgColors = [NSColor alternatingContentBackgroundColors]; + if(bgColors) + { + NSColor *color = bgColors[0]; + NSColor* device_color = [color colorUsingColorSpace:[NSColorSpace deviceRGBColorSpace]]; + CGFloat red, green, blue; + [device_color getRed:&red green:&green blue:&blue alpha:NULL]; + _DW_COLOR_ROW_ODD = DW_RGB((int)(red * 255), (int)(green *255), (int)(blue *255)); + color = bgColors[1]; + device_color = [color colorUsingColorSpace:[NSColorSpace deviceRGBColorSpace]]; + [device_color getRed:&red green:&green blue:&blue alpha:NULL]; + _DW_COLOR_ROW_EVEN = DW_RGB((int)(red * 255), (int)(green *255), (int)(blue *255)); + } + } +#endif pthread_setspecific(_dw_fg_color_key, fgcolor); pthread_setspecific(_dw_bg_color_key, NULL); } @@ -1909,7 +1929,7 @@ } } } --(void)setTag:(NSInteger)tag { self.Tag = tag; } +-(void)setTag:(NSInteger)tag { Tag = tag; } -(void *)userdata { return userdata; } -(void)setUserdata:(void *)input { userdata = input; } -(float)percent { return percent; } @@ -7412,8 +7432,8 @@ { DW_FUNCTION_INIT; DWContainer *cont = handle; - [cont setRowBgOdd:(oddcolor == DW_CLR_DEFAULT ? DW_RGB(230,230,230) : oddcolor) - andEven:(evencolor == DW_CLR_DEFAULT ? DW_RGB_TRANSPARENT : evencolor)]; + [cont setRowBgOdd:(oddcolor == DW_CLR_DEFAULT ? _DW_COLOR_ROW_ODD : oddcolor) + andEven:(evencolor == DW_CLR_DEFAULT ? _DW_COLOR_ROW_EVEN : evencolor)]; DW_FUNCTION_RETURN_NOTHING; }