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