Revision: 24126
          http://sourceforge.net/p/bibdesk/svn/24126
Author:   hofman
Date:     2019-08-12 13:55:18 +0000 (Mon, 12 Aug 2019)
Log Message:
-----------
separate class for generated dynamic color, separate class factory methods for 
complex and inherited string colors

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-12 06:30:01 UTC (rev 
24125)
+++ trunk/bibdesk/BDSKComplexStringEditor.m     2019-08-12 13:55:18 UTC (rev 
24126)
@@ -189,7 +189,7 @@
 // @@ Dark mode
 
 - (void)setExpandedValue:(NSString *)expandedValue {
-       NSColor *color = [NSColor stringColorForComplex:YES 
inherited:[expandedValue isInherited] selected:NO];
+       NSColor *color = [NSColor complexStringColorInherited:[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-12 06:30:01 UTC (rev 
24125)
+++ trunk/bibdesk/BDSKComplexStringFormatter.m  2019-08-12 13:55:18 UTC (rev 
24126)
@@ -87,9 +87,12 @@
         return nil;
     
     NSMutableDictionary *attrs = [[NSMutableDictionary alloc] 
initWithDictionary:defaultAttrs];
-       NSColor *color = [attrs objectForKey:NSForegroundColorAttributeName];
-    if ([obj isComplex] || [obj isInherited])
-        color = [NSColor stringColorForComplex:[obj isComplex] inherited:[obj 
isInherited] selected:[color isEqual:[NSColor 
alternateSelectedControlTextColor]]];
+       NSColor *color = nil;
+    BOOL isSelected = [[attrs objectForKey:NSForegroundColorAttributeName] 
isEqual:[NSColor alternateSelectedControlTextColor]];
+    if ([obj isComplex])
+        color = [NSColor complexStringColorInherited:[obj isInherited] 
selected:isSelected];
+    else if ([obj isInherited])
+        color = [NSColor inheritedStringColorSelected:isSelected];
        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-12 06:30:01 UTC (rev 
24125)
+++ trunk/bibdesk/NSColor_BDSKExtensions.h      2019-08-12 13:55:18 UTC (rev 
24126)
@@ -56,7 +56,8 @@
 + (NSColor *)mainSourceListHighlightColor;
 + (NSColor *)disabledSourceListHighlightColor;
 
-+ (NSColor *)stringColorForComplex:(BOOL)isComplex inherited:(BOOL)isInherited 
selected:(BOOL)isSelected;
++ (NSColor *)complexStringColorInherited:(BOOL)isInherited 
selected:(BOOL)isSelected;
++ (NSColor *)inheritedStringColorSelected:(BOOL)isSelected;
 
 + (NSColor *)colorWithFourByteString:(NSString *)string;
 - (id)fourByteStringValue;

Modified: trunk/bibdesk/NSColor_BDSKExtensions.m
===================================================================
--- trunk/bibdesk/NSColor_BDSKExtensions.m      2019-08-12 06:30:01 UTC (rev 
24125)
+++ trunk/bibdesk/NSColor_BDSKExtensions.m      2019-08-12 13:55:18 UTC (rev 
24126)
@@ -117,12 +117,14 @@
 @interface BDSKDynamicColor : NSColor {
     NSColor *aquaColor;
     NSColor *darkAquaColor;
+}
+- (id)initWithAquaColor:(NSColor *)aAquaColor darkAquaColor:(NSColor 
*)aDarkAquaColor;
+@end
+
+@interface BDSKGeneratedDynamicColor : BDSKDynamicColor {
     NSColor *(^colorGenerator)(void);
 }
-
-- (id)initWithAquaColor:(NSColor *)aAquaColor darkAquaColor:(NSColor 
*)aDarkAquaColor;
 - (id)initWithColorGenerator:(NSColor *(^)(void))aColorGenerator;
-
 @end
 
 #pragma mark -
@@ -208,37 +210,42 @@
     }
 }
 
-+ (NSColor *)complexStringColor {
-    static NSColor *color = nil;
-    if (color == nil)
-        color = [[NSColor systemBlueColor] retain];
-    return color;
++ (NSColor *)inheritedStringColorSelected:(BOOL)isSelected {
+    static NSColor *colors[2] = {nil, nil};
+    NSUInteger i = isSelected ? 1 : 0;
+    if (colors[i] == nil) {
+        NSColor *color = isSelected ? [NSColor 
alternateSelectedControlTextColor] : [NSColor controlTextColor];
+        if (RUNNING_BEFORE(10_13))
+            colors[i] = [[color colorWithAlphaComponent:0.6 * [color 
alphaComponent]] retain];
+        else
+            colors[i] = [[BDSKGeneratedDynamicColor alloc] 
initWithColorGenerator:^{
+                return [color colorWithAlphaComponent:0.6 * [color 
alphaComponent]];
+            }];
+    }
+    return colors[i];
 }
 
-+ (NSColor *)selectedComplexStringColor {
-    static NSColor *color = nil;
-    if (color == nil)
-        color = [[[self complexStringColor] blendedColorWithFraction:0.8 
ofColor:[NSColor whiteColor]] retain];
-    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];
++ (NSColor *)complexStringColorInherited:(BOOL)isInherited 
selected:(BOOL)isSelected {
+    static NSColor *colors[4] = {nil, nil, nil, nil};
+    NSUInteger i = (isInherited ? 1 : 0) | (isSelected ? 2 : 0);
+    if (colors[i] == nil) {
+        if (i == 0) {
+            colors[0] = [[NSColor systemBlueColor] retain];
+        } else {
+            NSColor *(^generator)(void) = ^{
+                NSColor *color = [NSColor systemBlueColor];
+                if (isSelected)
+                    color = [color blendedColorWithFraction:0.8 
ofColor:[NSColor whiteColor]];
                 if (isInherited)
-                    color = [color colorWithAlphaComponent:0.6 * [color 
alphaComponent]];
+                    color = [color colorWithAlphaComponent:0.6];
                 return color;
-            }];
+            };
+            if (RUNNING_BEFORE(10_13))
+                colors[i] = [generator() retain];
+            else
+                colors[i] = [[BDSKGeneratedDynamicColor alloc] 
initWithColorGenerator:generator];
+        }
+    }
     return colors[i];
 }
 
@@ -372,25 +379,13 @@
     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];
 }
 
@@ -399,31 +394,19 @@
         return YES;
     if ([other isMemberOfClass:[self class]] == NO)
         return NO;
-    if (colorGenerator || ((BDSKDynamicColor *)other)->colorGenerator)
-        return NO;
     return [aquaColor isEqual:((BDSKDynamicColor *)other)->aquaColor] && 
[darkAquaColor isEqual:((BDSKDynamicColor *)other)->darkAquaColor];
 }
 
 - (NSUInteger)hash {
-    if (colorGenerator)
-        return [super hash];
     return [aquaColor hash] + 31 * [darkAquaColor hash];
 }
 
 - (NSString *)description {
-    return [NSString stringWithFormat:@"light = %@, dark = %@", aquaColor, 
darkAquaColor];
+    return [NSString stringWithFormat:@"<%@: light = %@, dark = %@>", self, 
aquaColor, darkAquaColor];
 }
 
 - (NSColor *)effectiveColor {
-    if (BDSKHasDarkAppearance(nil)) {
-        if (darkAquaColor == nil && colorGenerator)
-            darkAquaColor = [colorGenerator() retain];
-        return darkAquaColor;
-    } else {
-        if (aquaColor == nil && colorGenerator)
-            aquaColor = [colorGenerator() retain];
-        return aquaColor;
-    }
+    return BDSKHasDarkAppearance(nil) ? darkAquaColor : aquaColor;
 }
 
 - (void)encodeWithCoder:(NSCoder *)aCoder {
@@ -503,3 +486,48 @@
 FORWARD(yellowComponent, CGFloat)
 
 @end
+
+@implementation BDSKGeneratedDynamicColor
+
+- (id)initWithColorGenerator:(NSColor *(^)(void))aColorGenerator {
+    self = [super init];
+    if (self) {
+        colorGenerator = Block_copy(aColorGenerator);
+    }
+    return self;
+}
+
+- (void)dealloc {
+    if (colorGenerator) {
+        Block_release(colorGenerator);
+        colorGenerator = NULL;
+    }
+    [super dealloc];
+}
+
+- (BOOL)isEqual:(id)other {
+    return self == other;
+}
+
+- (NSUInteger)hash {
+    return (NSUInteger)self;
+}
+
+- (NSString *)description {
+    return [NSString stringWithFormat:@"<%@: %p>", [self class], self];
+}
+
+- (NSColor *)effectiveColor {
+    if (BDSKHasDarkAppearance(nil)) {
+        if (darkAquaColor == nil && colorGenerator)
+            darkAquaColor = [colorGenerator() retain];
+        return darkAquaColor;
+    } else {
+        if (aquaColor == nil && colorGenerator)
+            aquaColor = [colorGenerator() retain];
+        return aquaColor;
+    }
+}
+
+@end
+

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