Revision: 24122
          http://sourceforge.net/p/bibdesk/svn/24122
Author:   hofman
Date:     2019-08-11 21:44:35 +0000 (Sun, 11 Aug 2019)
Log Message:
-----------
generate colors for complex and inherited strings lazily for the current 
appearance

Modified Paths:
--------------
    trunk/bibdesk/BDSKComplexStringEditor.m
    trunk/bibdesk/BDSKComplexStringFormatter.m
    trunk/bibdesk/NSColor_BDSKExtensions.h
    trunk/bibdesk/NSColor_BDSKExtensions.m

Modified: trunk/bibdesk/BDSKComplexStringEditor.m
===================================================================
--- trunk/bibdesk/BDSKComplexStringEditor.m     2019-08-11 06:29:52 UTC (rev 
24121)
+++ trunk/bibdesk/BDSKComplexStringEditor.m     2019-08-11 21:44:35 UTC (rev 
24122)
@@ -189,9 +189,7 @@
 // @@ Dark mode
 
 - (void)setExpandedValue:(NSString *)expandedValue {
-       NSColor *color = [NSColor complexStringColor];
-    if ([expandedValue isInherited])
-        color = [color colorWithAlphaComponent:0.6];
+       NSColor *color = [NSColor stringColorForComplex:YES 
inherited:[expandedValue isInherited] selected:NO];
     [expandedValueTextField setTextColor:color];
        [expandedValueTextField setStringValue:expandedValue];
        [expandedValueTextField setToolTip:NSLocalizedString(@"This field 
contains macros and is being edited as it would appear in a BibTeX file. This 
is the expanded value.", @"Tool tip message")];

Modified: trunk/bibdesk/BDSKComplexStringFormatter.m
===================================================================
--- trunk/bibdesk/BDSKComplexStringFormatter.m  2019-08-11 06:29:52 UTC (rev 
24121)
+++ trunk/bibdesk/BDSKComplexStringFormatter.m  2019-08-11 21:44:35 UTC (rev 
24122)
@@ -88,16 +88,8 @@
     
     NSMutableDictionary *attrs = [[NSMutableDictionary alloc] 
initWithDictionary:defaultAttrs];
        NSColor *color = [attrs objectForKey:NSForegroundColorAttributeName];
-    
-       if ([obj isComplex]) {
-               if ([color isEqual:[NSColor alternateSelectedControlTextColor]])
-            color = [NSColor selectedComplexStringColor];
-        else
-            color = [NSColor complexStringColor];
-       }
-    if ([obj isInherited]) {
-        color = [color colorWithAlphaComponent:0.6 * [color alphaComponent]];
-       }
+    if ([obj isComplex] || [obj isInherited])
+        color = [NSColor stringColorForComplex:[obj isComplex] inherited:[obj 
isInherited] selected:[color isEqual:[NSColor 
alternateSelectedControlTextColor]]];
        if (color)
         [attrs setObject:color forKey:NSForegroundColorAttributeName];
     NSAttributedString *attStr = [[[NSAttributedString alloc] 
initWithString:obj attributes:attrs] autorelease];

Modified: trunk/bibdesk/NSColor_BDSKExtensions.h
===================================================================
--- trunk/bibdesk/NSColor_BDSKExtensions.h      2019-08-11 06:29:52 UTC (rev 
24121)
+++ trunk/bibdesk/NSColor_BDSKExtensions.h      2019-08-11 21:44:35 UTC (rev 
24122)
@@ -56,8 +56,7 @@
 + (NSColor *)mainSourceListHighlightColor;
 + (NSColor *)disabledSourceListHighlightColor;
 
-+ (NSColor *)complexStringColor;
-+ (NSColor *)selectedComplexStringColor;
++ (NSColor *)stringColorForComplex:(BOOL)isComplex inherited:(BOOL)isInherited 
selected:(BOOL)isSelected;
 
 + (NSColor *)colorWithFourByteString:(NSString *)string;
 - (id)fourByteStringValue;

Modified: trunk/bibdesk/NSColor_BDSKExtensions.m
===================================================================
--- trunk/bibdesk/NSColor_BDSKExtensions.m      2019-08-11 06:29:52 UTC (rev 
24121)
+++ trunk/bibdesk/NSColor_BDSKExtensions.m      2019-08-11 21:44:35 UTC (rev 
24122)
@@ -117,9 +117,12 @@
 @interface BDSKDynamicColor : NSColor {
     NSColor *aquaColor;
     NSColor *darkAquaColor;
+    NSColor *(^colorGenerator)(void);
 }
 
 - (id)initWithAquaColor:(NSColor *)aAquaColor darkAquaColor:(NSColor 
*)aDarkAquaColor;
+- (id)initWithColorGenerator:(NSColor *(^)(void))aColorGenerator;
+
 @end
 
 #pragma mark -
@@ -219,6 +222,26 @@
     return color;
 }
 
++ (NSColor *)stringColorForComplex:(BOOL)isComplex inherited:(BOOL)isInherited 
selected:(BOOL)isSelected {
+    static NSColor *colors[8] = {nil, nil, nil, nil, nil, nil, nil, nil};
+    NSUInteger i = 0;
+    if (isComplex) i |= 1<<0;
+    if (isInherited) i |= 1<<1;
+    if (isSelected) i |= 1<<2;
+    if (colors[i] == 0)
+        colors[i] = [[BDSKDynamicColor alloc] initWithColorGenerator:^{
+                NSColor *color = nil;
+                if (isComplex)
+                    color = isSelected ? [[NSColor systemBlueColor] 
blendedColorWithFraction:0.8 ofColor:[NSColor whiteColor]] : [NSColor 
systemBlueColor];
+                else
+                    color = isSelected ? [NSColor 
alternateSelectedControlTextColor] : [NSColor controlTextColor];
+                if (isInherited)
+                    color = [color colorWithAlphaComponent:0.6 * [color 
alphaComponent]];
+                return color;
+            }];
+    return colors[i];
+}
+
 typedef union _BDSKRGBAInt {
     struct {
         uint8_t r;
@@ -349,13 +372,25 @@
     if (self) {
         aquaColor = [aAquaColor retain];
         darkAquaColor = [aDarkAquaColor retain];
+        colorGenerator = NULL;
     }
     return self;
 }
 
+- (id)initWithColorGenerator:(NSColor *(^)(void))aColorGenerator {
+    self = [super init];
+    if (self) {
+        aquaColor = nil;
+        darkAquaColor = nil;
+        colorGenerator = Block_copy(aColorGenerator);
+    }
+    return self;
+}
+
 - (void)dealloc {
     BDSKDESTROY(aquaColor);
     BDSKDESTROY(darkAquaColor);
+    BDSKDESTROY(colorGenerator);
     [super dealloc];
 }
 
@@ -362,6 +397,8 @@
 - (BOOL)isEqual:(id)other {
     if ([other isMemberOfClass:[self class]] == NO)
         return NO;
+    if (aquaColor == nil || darkAquaColor == nil || ((BDSKDynamicColor 
*)other)->aquaColor == nil || ((BDSKDynamicColor *)other)->darkAquaColor)
+        return NO;
     return [aquaColor isEqual:((BDSKDynamicColor *)other)->aquaColor] && 
[darkAquaColor isEqual:((BDSKDynamicColor *)other)->darkAquaColor];
 }
 
@@ -374,7 +411,15 @@
 }
 
 - (NSColor *)effectiveColor {
-    return BDSKHasDarkAppearance(nil) ? darkAquaColor : aquaColor;
+    if (BDSKHasDarkAppearance(nil)) {
+        if (darkAquaColor == nil && colorGenerator)
+            darkAquaColor = [colorGenerator() retain];
+        return darkAquaColor;
+    } else {
+        if (aquaColor == nil && colorGenerator)
+            aquaColor = [colorGenerator() retain];
+        return aquaColor;
+    }
 }
 
 - (void)encodeWithCoder:(NSCoder *)aCoder {

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.



_______________________________________________
Bibdesk-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bibdesk-commit

Reply via email to