diff options
| -rw-r--r-- | Liquid Glass Bezel/BBLiquidGlassBezelInterface.m | 46 | ||||
| -rw-r--r-- | Liquid Glass Bezel/BBObjectCell.m | 45 |
2 files changed, 83 insertions, 8 deletions
diff --git a/Liquid Glass Bezel/BBLiquidGlassBezelInterface.m b/Liquid Glass Bezel/BBLiquidGlassBezelInterface.m index 335eacd..1df5f7e 100644 --- a/Liquid Glass Bezel/BBLiquidGlassBezelInterface.m +++ b/Liquid Glass Bezel/BBLiquidGlassBezelInterface.m @@ -7,6 +7,13 @@ @implementation BBLiquidGlassBezelInterface +- (void)dealloc { + // Remove KVO observers + [[NSUserDefaults standardUserDefaults] removeObserver:self forKeyPath:@"QSLiquidGlassBezelApplyTint"]; + [[NSUserDefaults standardUserDefaults] removeObserver:self forKeyPath:@"QSAppearance1A"]; + [[NSUserDefaults standardUserDefaults] removeObserver:self forKeyPath:@"QSAppearance1T"]; +} + - (id)init { return [self initWithWindowNibName:@"BBLiquidGlassBezelInterface"]; } @@ -42,17 +49,52 @@ [theCell setFont:[NSFont systemFontOfSize:11 weight:NSFontWeightLight]]; [theCell setCellRadiusFactor:32]; - [theCell setHighlightColor:[NSColor colorWithRed:1 green:1 blue:1 alpha:.15]]; - [theCell setTextColor:[NSColor textColor]]; + BOOL shouldApplyTint = [[NSUserDefaults standardUserDefaults] boolForKey:@"QSLiquidGlassBezelApplyTint"]; + NSColor *userHighlightColor = [[NSUserDefaults standardUserDefaults] colorForKey:@"QSAppearance1A"]; + NSColor *userTextColor = shouldApplyTint ? [[NSUserDefaults standardUserDefaults] colorForKey:@"QSAppearance1T"] : [NSColor textColor]; + + [theCell setHighlightColor: userHighlightColor ? userHighlightColor : [NSColor colorWithRed:1 green:1 blue:1 alpha:.15]]; + [theCell setTextColor: userTextColor ? userTextColor : [NSColor textColor]]; [theCell setShowDetails:NO]; [theCell setState:NSControlStateValueOn]; [theCell setIconSize:QSSize128]; [theCell setImagePosition:NSImageAbove]; + + } + // Add KVO observers for preference changes + [[NSUserDefaults standardUserDefaults] addObserver:self forKeyPath:@"QSLiquidGlassBezelApplyTint" options:NSKeyValueObservingOptionNew context:nil]; + [[NSUserDefaults standardUserDefaults] addObserver:self forKeyPath:@"QSAppearance1A" options:NSKeyValueObservingOptionNew context:nil]; + [[NSUserDefaults standardUserDefaults] addObserver:self forKeyPath:@"QSAppearance1T" options:NSKeyValueObservingOptionNew context:nil]; + [self contractWindow:nil]; } +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context { + [self updateColors]; +} + +- (void)updateColors { + NSArray *theControls = [NSArray arrayWithObjects:dSelector, aSelector, iSelector, nil]; +BOOL shouldApplyTint = [[NSUserDefaults standardUserDefaults] boolForKey:@"QSLiquidGlassBezelApplyTint"]; +NSColor *userHighlightColor = [[NSUserDefaults standardUserDefaults] colorForKey:@"QSAppearance1A"]; +NSColor *userTextColor = shouldApplyTint ? [[NSUserDefaults standardUserDefaults] colorForKey:@"QSAppearance1T"] : [NSColor textColor]; + for(QSSearchObjectView *theControl in theControls) { + QSObjectCell *theCell = [theControl cell]; + [theCell setHighlightColor: userHighlightColor ? userHighlightColor : [NSColor colorWithRed:1 green:1 blue:1 alpha:.15]]; + [theCell setTextColor: userTextColor ? userTextColor : [NSColor textColor]]; + + @try { + [theCell setValue:@(NO) forKey:@"stylesLoaded"]; + } @catch (NSException *exception) { + // We couldn't update. Ignore for now.p + } + + [theControl setNeedsDisplay:YES]; + } +} + - (NSSize) maxIconSize { return QSSize32; } diff --git a/Liquid Glass Bezel/BBObjectCell.m b/Liquid Glass Bezel/BBObjectCell.m index 7bf1b3c..a060598 100644 --- a/Liquid Glass Bezel/BBObjectCell.m +++ b/Liquid Glass Bezel/BBObjectCell.m @@ -14,13 +14,20 @@ NSColor *strokeColor = [NSColor clearColor]; if (isFirstResponder) { - fillColor = [NSColor selectedTextBackgroundColor]; + // Use QSAppearance1A (accent color) from UserDefaults instead of selectedTextBackgroundColor + fillColor = [[NSUserDefaults standardUserDefaults] colorForKey:@"QSAppearance1A"]; + if (!fillColor) { + // Fallback to system color if preference not set + fillColor = [NSColor selectedTextBackgroundColor]; + } } else { fillColor = [NSColor clearColor]; } if (dropTarget) { - fillColor = [NSColor controlAccentColor]; + // Use QSAppearance1A (accent color) from UserDefaults instead of controlAccentColor + NSColor *userAccentColor = [[NSUserDefaults standardUserDefaults] colorForKey:@"QSAppearance1A"]; + fillColor = userAccentColor ? userAccentColor : [NSColor controlAccentColor]; } [fillColor setFill]; @@ -68,7 +75,16 @@ } BOOL useAlternateColor = [controlView isKindOfClass:[NSTableView class]] && [(NSTableView *)controlView isRowSelected:[(NSTableView *)controlView rowAtPoint:cellFrame.origin]]; - NSColor *mainColor = (textColor ? textColor : (useAlternateColor ? [NSColor alternateSelectedControlTextColor] : [NSColor controlTextColor])); + NSColor *mainColor; + + BOOL shouldApplyTint = [[NSUserDefaults standardUserDefaults] boolForKey:@"QSLiquidGlassBezelApplyTint"]; + NSColor *userTextColor = shouldApplyTint ? [[NSUserDefaults standardUserDefaults] colorForKey:@"QSAppearance1T"] : [NSColor textColor]; + if (userTextColor) { + mainColor = userTextColor; + } else { + // Fallback to system colors if QSAppearance1T preference not set + mainColor = useAlternateColor ? [NSColor alternateSelectedControlTextColor] : [NSColor controlTextColor]; + } NSColor *fadedColor = [mainColor colorWithAlphaComponent:0.50]; NSRect textDrawRect = [self titleRectForBounds:cellFrame]; @@ -149,7 +165,12 @@ CGContextSetBlendMode(context, kCGBlendModeNormal); [find drawInRect:findImageRect fromRect:rectFromSize([find size]) operation:NSCompositingOperationSourceOver fraction:1]; CGContextSetBlendMode(context, kCGBlendModeSourceIn); - CGContextSetFillColorWithColor(context, [[NSColor textColor] CGColor]); + // Use QSAppearance1T (text color) from UserDefaults if tinting is enabled, otherwise use textColor + BOOL shouldApplyTint = [[NSUserDefaults standardUserDefaults] boolForKey:@"QSLiquidGlassBezelApplyTint"]; + NSColor *userTextColor = shouldApplyTint ? [[NSUserDefaults standardUserDefaults] colorForKey:@"QSAppearance1T"] : [NSColor textColor]; + NSColor *iconTextColor; + iconTextColor = userTextColor ? userTextColor : [NSColor textColor]; + CGContextSetFillColorWithColor(context, [iconTextColor CGColor]); CGContextFillRect(context, findImageRect); CGContextEndTransparencyLayer(context); @@ -169,7 +190,10 @@ } else if ([[image name] isEqualToString: @"Object"]) { iconName = @"cube.transparent"; - iconConfig = [NSImageSymbolConfiguration configurationWithHierarchicalColor:[NSColor controlAccentColor]]; + // Use QSAppearance1A (accent color) from UserDefaults instead of controlAccentColor + NSColor *userAccentColor = [[NSUserDefaults standardUserDefaults] colorForKey:@"QSAppearance1A"]; + NSColor *iconAccentColor = userAccentColor ? userAccentColor : [NSColor controlAccentColor]; + iconConfig = [NSImageSymbolConfiguration configurationWithHierarchicalColor:iconAccentColor]; } else if ([[image name] isEqualToString: @"ContactAddress"]) { iconName = @"mappin.circle"; @@ -195,7 +219,16 @@ NSImage *newIcon = [NSImage imageWithSystemSymbolName:iconName accessibilityDescription:[image name]]; if (iconConfig == nil) { - NSArray *colors = [NSArray arrayWithObjects:[NSColor textColor], [NSColor controlAccentColor], nil]; + // Use QSAppearance1T (text color) and QSAppearance1A (accent color) from UserDefaults + BOOL shouldApplyTint = [[NSUserDefaults standardUserDefaults] boolForKey:@"QSLiquidGlassBezelApplyTint"]; + + NSColor *userTextColor = shouldApplyTint ? [[NSUserDefaults standardUserDefaults] colorForKey:@"QSAppearance1T"] : [NSColor textColor]; + NSColor *userAccentColor = [[NSUserDefaults standardUserDefaults] colorForKey:@"QSAppearance1A"]; + + NSColor *iconTextColor = userTextColor ? userTextColor : [NSColor textColor]; + NSColor *iconAccentColor = userAccentColor ? userAccentColor : [NSColor controlAccentColor]; + + NSArray *colors = [NSArray arrayWithObjects:iconTextColor, iconAccentColor, nil]; iconConfig = [NSImageSymbolConfiguration configurationWithPaletteColors:colors]; } |