#import "BBLiquidGlassBezelInterface.h" @interface BBLiquidGlassBezelInterface () { CGRect initialRect; } @end @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"]; } - (void)windowDidLoad { initialRect = centerRectInRect([[self window] frame], [[NSScreen mainScreen] frame]); [super windowDidLoad]; QSWindow *window = (QSWindow *)[self window]; [window setLevel:NSPopUpMenuWindowLevel]; [window setBackgroundColor:[NSColor clearColor]]; [window setOpaque:NO]; [window setHideOffset:NSMakePoint(0, 0)]; [window setShowOffset:NSMakePoint(0, 0)]; [window setMovableByWindowBackground:NO]; [window setFastShow:YES]; [window setHasShadow:YES]; [window setFrame:standardRect display:YES]; NSArray *theControls = [NSArray arrayWithObjects:dSelector, aSelector, iSelector, nil]; for(QSSearchObjectView *theControl in theControls) { QSObjectCell *theCell = [theControl cell]; [theControl setPreferredEdge:NSMinYEdge]; [(QSWindow *)[(theControl)->resultController window] setHideOffset:NSMakePoint(0, NSMinY([iSelector frame]))]; [(QSWindow *)[(theControl)->resultController window] setShowOffset:NSMakePoint(0, NSMinY([dSelector frame]))]; [theCell setBackgroundColor:[NSColor clearColor]]; [theCell setFont:[NSFont systemFontOfSize:11 weight:NSFontWeightLight]]; [theCell setCellRadiusFactor:32]; 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 *)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; } - (void)showMainWindow:(id)sender { [[self window] setFrame:[self rectForState:[self expanded]] display:YES]; if ([[self window] isVisible]) [[self window] pulse:self]; [super showMainWindow:sender]; // Does this need to be here? [[[self window] contentView] setNeedsDisplay:YES]; } - (void)expandWindow:(id)sender { if (![self expanded]) [[self window] setFrame:[self rectForState:YES] display:YES animate:YES]; [super expandWindow:sender]; } - (void)contractWindow:(id)sender { if ([self expanded]) [[self window] setFrame:[self rectForState:NO] display:YES animate:YES]; [super contractWindow:sender]; } - (NSRect)rectForState:(BOOL)shouldExpand { NSRect newRect = initialRect; NSRect screenRect = [[NSScreen mainScreen] frame]; if (!shouldExpand) { newRect.size.width -= 192; } return NSOffsetRect(centerRectInRect(newRect, screenRect), 0, (NSHeight(screenRect) / 5)); } - (NSRect)window:(NSWindow *)window willPositionSheet:(NSWindow *)sheet usingRect:(NSRect)rect { return NSOffsetRect(NSInsetRect(rect, 8, 0), 0, 0); } - (NSTimeInterval)animationResizeTime:(NSRect)newWindowFrame { return 0.01; } - (IBAction)customize:(id)sender{ [[NSClassFromString(@"QSPreferencesController") sharedInstance] showPaneWithIdentifier:@"BBLiquidGlassBezelPrefs"]; } @end