From 18896dcc3e6c69e8f388c2d5e4fa5b696daddc3a Mon Sep 17 00:00:00 2001 From: Dzmitry Neviadomski Date: Fri, 19 Feb 2021 01:44:05 +0300 Subject: [PATCH] Rework Titlebar. Show Album art in info button. --- Application/AppController.h | 5 +- Application/AppController.m | 120 +++++++++++------- Base.lproj/MainMenu.xib | 88 ++++++------- Cog.xcodeproj/project.pbxproj | 4 - .../PlaybackStatusToHiddenTransformer.swift | 40 ------ Window/MiniWindow.m | 2 +- 6 files changed, 112 insertions(+), 147 deletions(-) delete mode 100644 Transformers/PlaybackStatusToHiddenTransformer.swift diff --git a/Application/AppController.h b/Application/AppController.h index 7425f249c..c3767ac68 100644 --- a/Application/AppController.h +++ b/Application/AppController.h @@ -23,7 +23,6 @@ IBOutlet NSSplitView *mainView; IBOutlet NSSegmentedControl *playbackButtons; - IBOutlet NSButton *infoButton; IBOutlet NSButton *fileButton; IBOutlet NSButton *shuffleButton; IBOutlet NSButton *repeatButton; @@ -56,8 +55,8 @@ BOOL miniMode; } -@property (strong) IBOutlet NSButton *nowPlayingBar; -@property (nonatomic) BOOL isNowPlayingHidden; +@property (strong) IBOutlet NSButton *infoButton; +@property (strong) IBOutlet NSButton *infoButtonMini; - (IBAction)openURL:(id)sender; diff --git a/Application/AppController.m b/Application/AppController.m index 03f7e592f..141c707d9 100644 --- a/Application/AppController.m +++ b/Application/AppController.m @@ -25,13 +25,6 @@ void* kAppControllerContext = &kAppControllerContext; -@interface AppController () - -@property (nonatomic) BOOL isNowPlayingForceShown; - -@end - - @implementation AppController { BOOL _isFullToolbarStyle; } @@ -51,9 +44,6 @@ void* kAppControllerContext = &kAppControllerContext; NSValueTransformer *miniModeMenuTitleTransformer = [[MiniModeMenuTitleTransformer alloc] init]; [NSValueTransformer setValueTransformer:miniModeMenuTitleTransformer forName:@"MiniModeMenuTitleTransformer"]; - - NSValueTransformer *playbackStatusToHiddenTransformer = [[PlaybackStatusToHiddenTransformer alloc] init]; - [NSValueTransformer setValueTransformer:playbackStatusToHiddenTransformer forName:@"PlaybackStatusToHiddenTransformer"]; } @@ -146,7 +136,8 @@ void* kAppControllerContext = &kAppControllerContext; [[playbackButtons cell] setToolTip:NSLocalizedString(@"PlayButtonTooltip", @"") forSegment: 1]; [[playbackButtons cell] setToolTip:NSLocalizedString(@"PrevButtonTooltip", @"") forSegment: 0]; [[playbackButtons cell] setToolTip:NSLocalizedString(@"NextButtonTooltip", @"") forSegment: 2]; - [infoButton setToolTip:NSLocalizedString(@"InfoButtonTooltip", @"")]; + [self.infoButton setToolTip:NSLocalizedString(@"InfoButtonTooltip", @"")]; + [self.infoButtonMini setToolTip:NSLocalizedString(@"InfoButtonTooltip", @"")]; [shuffleButton setToolTip:NSLocalizedString(@"ShuffleButtonTooltip", @"")]; [repeatButton setToolTip:NSLocalizedString(@"RepeatButtonTooltip", @"")]; [randomizeButton setToolTip:NSLocalizedString(@"RandomizeButtonTooltip", @"")]; @@ -235,7 +226,7 @@ void* kAppControllerContext = &kAppControllerContext; } [self addObserver:self - forKeyPath:@"playbackController.playbackStatus" + forKeyPath:@"playlistController.currentEntry" options:NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew context:kAppControllerContext]; } @@ -244,11 +235,69 @@ void* kAppControllerContext = &kAppControllerContext; ofObject:(id)object change:(NSDictionary *)change context:(void *)context { - if ([keyPath isEqualToString:@"playbackController.playbackStatus"]) { - NSValueTransformer *transformer = - [NSValueTransformer valueTransformerForName:@"PlaybackStatusToHiddenTransformer"]; - NSNumber *value = [transformer transformedValue:@(playbackController.playbackStatus)]; - self.isNowPlayingHidden = value.boolValue; + if (context != kAppControllerContext) { + return; + } + + if ([keyPath isEqualToString:@"playlistController.currentEntry"]) { + PlaylistEntry *entry = playlistController.currentEntry; + if (!entry) { + miniWindow.title = @"Cog"; + mainWindow.title = @"Cog"; + if (@available(macOS 11.0, *)) { + miniWindow.subtitle = @""; + mainWindow.subtitle = @""; + } + + self.infoButton.imageScaling = NSImageScaleNone; + self.infoButton.image = [NSImage imageNamed:@"infoTemplate"]; + self.infoButtonMini.imageScaling = NSImageScaleNone; + self.infoButtonMini.image = [NSImage imageNamed:@"infoTemplate"]; + } + + if (@available(macOS 11.0, *)) { + NSString *title = @"Cog"; + if (entry.title) { + title = entry.title; + } + miniWindow.title = title; + mainWindow.title = title; + + NSString *subtitle = @""; + NSMutableArray *subtitleItems = [NSMutableArray array]; + if (entry.album && ![entry.album isEqualToString:@""]) { + [subtitleItems addObject:entry.album]; + } + if (entry.artist && ![entry.artist isEqualToString:@""]) { + [subtitleItems addObject:entry.artist]; + } + + if ([subtitleItems count]) { + subtitle = [subtitleItems componentsJoinedByString:@" - "]; + } + + miniWindow.subtitle = subtitle; + mainWindow.subtitle = subtitle; + } else { + NSString *title = @"Cog"; + if (entry.display) { + title = entry.display; + } + miniWindow.title = title; + mainWindow.title = title; + } + + if (entry.albumArt) { + self.infoButton.imageScaling = NSImageScaleProportionallyUpOrDown; + self.infoButton.image = playlistController.currentEntry.albumArt; + self.infoButtonMini.imageScaling = NSImageScaleProportionallyUpOrDown; + self.infoButtonMini.image = playlistController.currentEntry.albumArt; + } else { + self.infoButton.imageScaling = NSImageScaleNone; + self.infoButton.image = [NSImage imageNamed:@"infoTemplate"]; + self.infoButtonMini.imageScaling = NSImageScaleNone; + self.infoButtonMini.image = [NSImage imageNamed:@"infoTemplate"]; + } } } @@ -461,18 +510,6 @@ void* kAppControllerContext = &kAppControllerContext; }]; } -- (void)windowDidEnterFullScreen:(NSNotification *)notification -{ - DLog(@"Entering fullscreen"); - self.isNowPlayingForceShown = YES; -} - -- (void)windowDidExitFullScreen:(NSNotification *)notification -{ - DLog(@"Exiting fullscreen"); - self.isNowPlayingForceShown = NO; -} - - (void)clickPlay { [playbackController playPauseResume:self]; @@ -559,32 +596,17 @@ void* kAppControllerContext = &kAppControllerContext; if (@available(macOS 11.0, *)) { NSWindowToolbarStyle style = - full ? NSWindowToolbarStyleExpanded : NSWindowToolbarStyleUnifiedCompact; + full ? NSWindowToolbarStyleExpanded : NSWindowToolbarStyleUnified; mainWindow.toolbarStyle = style; miniWindow.toolbarStyle = style; + } else { + NSWindowTitleVisibility titleVisibility = full ? NSWindowTitleVisible : NSWindowTitleHidden; + mainWindow.titleVisibility = titleVisibility; + miniWindow.titleVisibility = titleVisibility; } - [self.nowPlayingBar setHidden:full]; - - NSWindowTitleVisibility visibility = full ? NSWindowTitleVisible : NSWindowTitleHidden; - mainWindow.titleVisibility = visibility; - miniWindow.titleVisibility = visibility; - // Fix empty area after changing toolbar style in mini window as it has no content view [miniWindow setContentSize:NSMakeSize(miniWindow.frame.size.width, 0)]; } -- (BOOL)isNowPlayingHidden { - if (_isNowPlayingForceShown) { - return NO; - } - return _isNowPlayingHidden; -} - -- (void)setIsNowPlayingForceShown:(BOOL)isNowPlayingForceShown { - [self willChangeValueForKey:@"isNowPlayingHidden"]; - _isNowPlayingForceShown = isNowPlayingForceShown; - [self didChangeValueForKey:@"isNowPlayingHidden"]; -} - @end diff --git a/Base.lproj/MainMenu.xib b/Base.lproj/MainMenu.xib index cce4cee10..2556f5af8 100644 --- a/Base.lproj/MainMenu.xib +++ b/Base.lproj/MainMenu.xib @@ -14,48 +14,35 @@ - + - + - - - + + + - - - - - + + + - + - + - + - + @@ -93,7 +80,7 @@ - + @@ -114,7 +101,7 @@ - + @@ -135,7 +122,7 @@ - + @@ -156,7 +143,7 @@ - + @@ -176,7 +163,7 @@ - + @@ -192,7 +179,7 @@ - + @@ -209,7 +196,7 @@ - + @@ -292,7 +279,7 @@ - + @@ -304,10 +291,8 @@ - - - - + + @@ -321,16 +306,18 @@ - + + + + + - - @@ -451,7 +438,7 @@ - + - +