changeset 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
files mac/dw.m
diffstat 1 files changed, 24 insertions(+), 4 deletions(-) [+]
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;
 }