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