[vlc-commits] [Git][videolan/vlc][master] 14 commits: macosx: Add starter VLCMainVideoViewAudioMediaDecorativeView
Felix Paul Kühne (@fkuehne)
gitlab at videolan.org
Thu May 4 07:00:42 UTC 2023
Felix Paul Kühne pushed to branch master at VideoLAN / VLC
Commits:
a0ea2ded by Claudio Cambra at 2023-05-04T06:45:58+00:00
macosx: Add starter VLCMainVideoViewAudioMediaDecorativeView
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
495ef22a by Claudio Cambra at 2023-05-04T06:45:58+00:00
macosx: Add starter VLCMainViewViewAudioMediaDecorativeView class
Signed-off-by: Claudio Cambra <claudio.cambra at nextcloud.com>
- - - - -
41684b74 by Claudio Cambra at 2023-05-04T06:45:58+00:00
macosx: Add cover art image view and background to VLCMainVideoViewAudioMediaDecorativeView
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
a1725fe1 by Claudio Cambra at 2023-05-04T06:45:58+00:00
macosx: Add easy nib instantiator function for VLCMainVideoViewAudioMediaDecorativeView
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
acc6a644 by Claudio Cambra at 2023-05-04T06:45:58+00:00
macosx: Instantiate audio decorative view within VLCMainVideoViewController
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
d6982a8d by Claudio Cambra at 2023-05-04T06:45:58+00:00
macosx: Display audio decorative view over voutview under main video view controller when audio playing
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
57062fed by Claudio Cambra at 2023-05-04T06:45:58+00:00
macosx: Add background artwork image with visual effect view overlaid for VLCMainVideoViewAudioMediaDecorativeView
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
cfd2b8ff by Claudio Cambra at 2023-05-04T06:45:58+00:00
macosx: Don't autohide controls when displaying audio decorative view in VLCMainVideoViewController
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
9236d28c by Claudio Cambra at 2023-05-04T06:45:58+00:00
macosx: Don't hide window controls in VLCFullVideoViewWindow when the VLVMainVideoViewController has autohiding controls disabled
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
e2604b12 by Claudio Cambra at 2023-05-04T06:45:58+00:00
macosx: Connect decorative view XIB components to outlets
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
26d5dd2e by Claudio Cambra at 2023-05-04T06:45:58+00:00
macosx: Add convenience method to set cover arts of VLCMainVideoViewAudioMediaDecorativeView
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
93efb9e6 by Claudio Cambra at 2023-05-04T06:45:58+00:00
macosx: Automatically set cover art on current media item switch in VLCMainVideoViewAudioMediaDecorativeView
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
91fad1c2 by Claudio Cambra at 2023-05-04T06:45:58+00:00
macosx: Don't prevent opening main video view when audio media is playing
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
3900ca14 by Claudio Cambra at 2023-05-04T06:45:58+00:00
macosx: Retain video view open when playback switches to audio, but close when playback is generally over
Signed-off-by: Claudio Cambra <developer at claudiocambra.com>
- - - - -
9 changed files:
- extras/package/macosx/VLC.xcodeproj/project.pbxproj
- modules/gui/macosx/Makefile.am
- + modules/gui/macosx/UI/VLCMainVideoViewAudioMediaDecorativeView.xib
- modules/gui/macosx/library/VLCLibraryWindow.m
- modules/gui/macosx/windows/video/VLCFullVideoViewWindow.m
- + modules/gui/macosx/windows/video/VLCMainVideoViewAudioMediaDecorativeView.h
- + modules/gui/macosx/windows/video/VLCMainVideoViewAudioMediaDecorativeView.m
- modules/gui/macosx/windows/video/VLCMainVideoViewController.h
- modules/gui/macosx/windows/video/VLCMainVideoViewController.m
Changes:
=====================================
extras/package/macosx/VLC.xcodeproj/project.pbxproj
=====================================
@@ -101,6 +101,7 @@
53903D3A29576ED500D0B308 /* VLCLibraryAudioGroupDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 53903D3929576ED500D0B308 /* VLCLibraryAudioGroupDataSource.m */; };
539BA79F298C726200918C36 /* VLCAspectRatioRetainingVideoWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 539BA79E298C726200918C36 /* VLCAspectRatioRetainingVideoWindow.m */; };
539F114B29E83A4200F13460 /* VLCLibraryTwoPaneSplitViewDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 539F114A29E83A4200F13460 /* VLCLibraryTwoPaneSplitViewDelegate.m */; };
+ 539F116D29F9785C00F13460 /* VLCMainVideoViewAudioMediaDecorativeView.m in Sources */ = {isa = PBXBuildFile; fileRef = 539F116C29F9785C00F13460 /* VLCMainVideoViewAudioMediaDecorativeView.m */; };
53B447CA2939823E00857588 /* VLCLibrarySongsTableViewSongPlayingTableCellView.m in Sources */ = {isa = PBXBuildFile; fileRef = 53B447C92939823E00857588 /* VLCLibrarySongsTableViewSongPlayingTableCellView.m */; };
53B447F6293BB47B00857588 /* VLCLibraryVideoCollectionViewContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 53B447EC293BB47A00857588 /* VLCLibraryVideoCollectionViewContainerView.m */; };
53B447F7293BB47B00857588 /* VLCLibraryVideoCollectionViewContainerViewDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 53B447ED293BB47A00857588 /* VLCLibraryVideoCollectionViewContainerViewDataSource.m */; };
@@ -310,6 +311,9 @@
539BA79E298C726200918C36 /* VLCAspectRatioRetainingVideoWindow.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VLCAspectRatioRetainingVideoWindow.m; sourceTree = "<group>"; };
539F114929E83A4200F13460 /* VLCLibraryTwoPaneSplitViewDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCLibraryTwoPaneSplitViewDelegate.h; sourceTree = "<group>"; };
539F114A29E83A4200F13460 /* VLCLibraryTwoPaneSplitViewDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VLCLibraryTwoPaneSplitViewDelegate.m; sourceTree = "<group>"; };
+ 539F116A29F9756000F13460 /* VLCMainVideoViewAudioMediaDecorativeView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = VLCMainVideoViewAudioMediaDecorativeView.xib; sourceTree = "<group>"; };
+ 539F116B29F9785C00F13460 /* VLCMainVideoViewAudioMediaDecorativeView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCMainVideoViewAudioMediaDecorativeView.h; sourceTree = "<group>"; };
+ 539F116C29F9785C00F13460 /* VLCMainVideoViewAudioMediaDecorativeView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VLCMainVideoViewAudioMediaDecorativeView.m; sourceTree = "<group>"; };
53B447C82939823E00857588 /* VLCLibrarySongsTableViewSongPlayingTableCellView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCLibrarySongsTableViewSongPlayingTableCellView.h; sourceTree = "<group>"; };
53B447C92939823E00857588 /* VLCLibrarySongsTableViewSongPlayingTableCellView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VLCLibrarySongsTableViewSongPlayingTableCellView.m; sourceTree = "<group>"; };
53B447EC293BB47A00857588 /* VLCLibraryVideoCollectionViewContainerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCLibraryVideoCollectionViewContainerView.m; sourceTree = "<group>"; };
@@ -944,6 +948,8 @@
children = (
534E8E3829A06325009503F8 /* VLCMainVideoViewController.h */,
534E8E3929A06325009503F8 /* VLCMainVideoViewController.m */,
+ 539F116B29F9785C00F13460 /* VLCMainVideoViewAudioMediaDecorativeView.h */,
+ 539F116C29F9785C00F13460 /* VLCMainVideoViewAudioMediaDecorativeView.m */,
536BFD1729B181E100BD0776 /* VLCMainVideoViewOverlayView.h */,
536BFD1829B181E100BD0776 /* VLCMainVideoViewOverlayView.m */,
1CAC3EE720CD1B3B00613DB2 /* VLCVideoOutputProvider.h */,
@@ -1797,6 +1803,7 @@
7DFFF8FE23682CE400C8B0C9 /* VLCDetachedAudioWindow.xib */,
6B8224181E4D2A9000833BE1 /* VLCFullScreenPanel.xib */,
6B82240B1E4D2A9000833BE1 /* VLCInformationWindow.xib */,
+ 539F116A29F9756000F13460 /* VLCMainVideoViewAudioMediaDecorativeView.xib */,
7DE82E7A228437AA002D341A /* VLCLibraryAlbumTableCellView.xib */,
536283FD2911476A00640C15 /* VLCLibraryCollectionViewAlbumSupplementaryDetailView.xib */,
536283FB2911476A00640C15 /* VLCLibraryCollectionViewAudioGroupSupplementaryDetailView.xib */,
@@ -1974,6 +1981,7 @@
1C3113921E508C6900D4DD76 /* VLCAddonListItem.m in Sources */,
7DFBDCB7226CDFD600B700A5 /* VLCImageView.m in Sources */,
7D404ABF2281892C00B28EF4 /* NSView+VLCAdditions.m in Sources */,
+ 539F116D29F9785C00F13460 /* VLCMainVideoViewAudioMediaDecorativeView.m in Sources */,
7DE9C7DD220728420089108F /* VLCPlayerController.m in Sources */,
536283F4291146BC00640C15 /* VLCLibraryCollectionViewMediaItemSupplementaryDetailView.m in Sources */,
7D93D8FC2316C2DC001C0063 /* VLCCustomCropArWindowController.m in Sources */,
=====================================
modules/gui/macosx/Makefile.am
=====================================
@@ -360,6 +360,8 @@ libmacosx_plugin_la_SOURCES = \
gui/macosx/windows/video/VLCAspectRatioRetainingVideoWindow.m \
gui/macosx/windows/video/VLCFullVideoViewWindow.h \
gui/macosx/windows/video/VLCFullVideoViewWindow.m \
+ gui/macosx/windows/video/VLCMainVideoViewAudioMediaDecorativeView.h \
+ gui/macosx/windows/video/VLCMainVideoViewAudioMediaDecorativeView.m \
gui/macosx/windows/video/VLCMainVideoViewController.h \
gui/macosx/windows/video/VLCMainVideoViewController.m \
gui/macosx/windows/video/VLCMainVideoViewOverlayView.h \
@@ -400,6 +402,7 @@ libmacosx_plugin_la_XIB_SOURCES = \
gui/macosx/UI/VLCLibraryCollectionViewMediaItemSupplementaryDetailView.xib \
gui/macosx/UI/VLCLibrarySongTableCellView.xib \
gui/macosx/UI/VLCMainVideoView.xib \
+ gui/macosx/UI/VLCMainVideoViewAudioMediaDecorativeView.xib \
gui/macosx/UI/VLCMediaSourceCollectionViewItem.xib \
gui/macosx/UI/VLCMediaSourceDeviceCollectionViewItem.xib \
gui/macosx/UI/VLCInformationWindow.xib \
=====================================
modules/gui/macosx/UI/VLCMainVideoViewAudioMediaDecorativeView.xib
=====================================
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="21701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+ <dependencies>
+ <deployment version="101000" identifier="macosx"/>
+ <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21701"/>
+ <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+ </dependencies>
+ <objects>
+ <customObject id="-2" userLabel="File's Owner"/>
+ <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+ <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+ <customView id="WRu-Ic-lQK" customClass="VLCMainVideoViewAudioMediaDecorativeView">
+ <rect key="frame" x="0.0" y="0.0" width="720" height="480"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+ <subviews>
+ <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="cDv-dn-65H">
+ <rect key="frame" x="0.0" y="0.0" width="720" height="480"/>
+ <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="axesIndependently" image="noart" id="3lz-lJ-nIL"/>
+ </imageView>
+ <visualEffectView blendingMode="withinWindow" material="HUDWindow" state="active" translatesAutoresizingMaskIntoConstraints="NO" id="D1e-fS-bwO">
+ <rect key="frame" x="0.0" y="0.0" width="720" height="480"/>
+ </visualEffectView>
+ <imageView wantsLayer="YES" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="40P-sL-Mzq">
+ <rect key="frame" x="232" y="112" width="256" height="256"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="256" id="PdS-Zh-d9T"/>
+ <constraint firstAttribute="width" secondItem="40P-sL-Mzq" secondAttribute="height" multiplier="1:1" id="dje-mE-ZfL"/>
+ </constraints>
+ <shadow key="shadow" blurRadius="20">
+ <color key="color" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ </shadow>
+ <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyUpOrDown" image="noart" id="m7g-tH-8dl"/>
+ </imageView>
+ </subviews>
+ <constraints>
+ <constraint firstItem="40P-sL-Mzq" firstAttribute="centerX" secondItem="WRu-Ic-lQK" secondAttribute="centerX" id="4Ib-c0-egD"/>
+ <constraint firstAttribute="trailing" secondItem="D1e-fS-bwO" secondAttribute="trailing" id="J68-x2-cY5"/>
+ <constraint firstItem="D1e-fS-bwO" firstAttribute="leading" secondItem="WRu-Ic-lQK" secondAttribute="leading" id="KBI-Gr-tTT"/>
+ <constraint firstAttribute="bottom" secondItem="cDv-dn-65H" secondAttribute="bottom" id="Sv1-Hf-eCe"/>
+ <constraint firstItem="cDv-dn-65H" firstAttribute="leading" secondItem="WRu-Ic-lQK" secondAttribute="leading" id="bZL-GN-AAt"/>
+ <constraint firstItem="cDv-dn-65H" firstAttribute="top" secondItem="WRu-Ic-lQK" secondAttribute="top" id="dvc-kq-jk8"/>
+ <constraint firstItem="D1e-fS-bwO" firstAttribute="top" secondItem="WRu-Ic-lQK" secondAttribute="top" id="eDP-U6-Qt6"/>
+ <constraint firstAttribute="bottom" secondItem="D1e-fS-bwO" secondAttribute="bottom" id="toU-5j-lin"/>
+ <constraint firstAttribute="trailing" secondItem="cDv-dn-65H" secondAttribute="trailing" id="vEl-zP-vj9"/>
+ <constraint firstItem="40P-sL-Mzq" firstAttribute="centerY" secondItem="WRu-Ic-lQK" secondAttribute="centerY" id="yFl-gc-ITT"/>
+ </constraints>
+ <connections>
+ <outlet property="backgroundCoverArtView" destination="cDv-dn-65H" id="bw2-8i-Xg6"/>
+ <outlet property="backgroundVisualEffectView" destination="D1e-fS-bwO" id="Jkh-ep-Wyn"/>
+ <outlet property="foregroundCoverArtView" destination="40P-sL-Mzq" id="nVl-ga-BoM"/>
+ </connections>
+ <point key="canvasLocation" x="66" y="-232"/>
+ </customView>
+ </objects>
+ <resources>
+ <image name="noart" width="128" height="128"/>
+ </resources>
+</document>
=====================================
modules/gui/macosx/library/VLCLibraryWindow.m
=====================================
@@ -786,7 +786,20 @@ static void addShadow(NSImageView *__unsafe_unretained imageView)
- (void)setHasActiveVideo:(BOOL)hasActiveVideo
{
[super setHasActiveVideo:hasActiveVideo];
- hasActiveVideo ? [self enableVideoPlaybackAppearance] : [self disableVideoPlaybackAppearance];
+ if (hasActiveVideo) {
+ [self enableVideoPlaybackAppearance];
+ } else if (!self.videoViewController.view.hidden) {
+ // If we are switching to audio media then keep the active main video view open
+ NSURL * const currentMediaUrl = _playlistController.playerController.URLOfCurrentMediaItem;
+ VLCMediaLibraryMediaItem * const mediaItem = [VLCMediaLibraryMediaItem mediaItemForURL:currentMediaUrl];
+ const BOOL decorativeViewVisible = mediaItem != nil && mediaItem.mediaType == VLC_ML_MEDIA_TYPE_AUDIO;
+
+ if (!decorativeViewVisible) {
+ [self disableVideoPlaybackAppearance];
+ }
+ } else {
+ [self disableVideoPlaybackAppearance];
+ }
}
- (void)playerStateChanged:(NSNotification *)notification
@@ -796,10 +809,6 @@ static void addShadow(NSImageView *__unsafe_unretained imageView)
return;
}
- if(_playlistController.playerController.playerState == VLC_PLAYER_STATE_PLAYING) {
- [self reopenVideoView];
- }
-
if (self.videoViewController.view.isHidden) {
[self showControlsBar];
}
@@ -808,16 +817,6 @@ static void addShadow(NSImageView *__unsafe_unretained imageView)
// This handles reopening the video view when the user has closed it.
- (void)reopenVideoView
{
- if(!self.hasActiveVideo) {
- return;
- }
-
- VLCMediaLibraryMediaItem *mediaItem = [VLCMediaLibraryMediaItem mediaItemForURL:_playlistController.playerController.URLOfCurrentMediaItem];
-
- if(mediaItem == nil || mediaItem.mediaType != VLC_ML_MEDIA_TYPE_VIDEO) {
- return;
- }
-
[self enableVideoPlaybackAppearance];
}
=====================================
modules/gui/macosx/windows/video/VLCFullVideoViewWindow.m
=====================================
@@ -107,7 +107,8 @@
if (self.videoViewController.mouseOnControls ||
!_autohideTitlebar ||
self.isInNativeFullscreen ||
- self.videoViewController.view.hidden) {
+ self.videoViewController.view.hidden ||
+ !self.videoViewController.autohideControls) {
[self showTitleBar];
return;
=====================================
modules/gui/macosx/windows/video/VLCMainVideoViewAudioMediaDecorativeView.h
=====================================
@@ -0,0 +1,39 @@
+/*****************************************************************************
+ * VLCMainVideoViewAudioMediaDecorativeView.h: MacOS X interface module
+ *****************************************************************************
+ * Copyright (C) 2023 VLC authors and VideoLAN
+ *
+ * Authors: Claudio Cambra <developer at claudiocambra.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#import <Cocoa/Cocoa.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+ at interface VLCMainVideoViewAudioMediaDecorativeView : NSView
+
++ (instancetype)fromNibWithOwner:(id)owner;
+
+ at property (readwrite, strong) IBOutlet NSImageView *foregroundCoverArtView;
+ at property (readwrite, strong) IBOutlet NSImageView *backgroundCoverArtView;
+ at property (readwrite, strong) IBOutlet NSVisualEffectView *backgroundVisualEffectView;
+
+- (void)setCoverArt:(NSImage *)coverArtImage;
+
+ at end
+
+NS_ASSUME_NONNULL_END
=====================================
modules/gui/macosx/windows/video/VLCMainVideoViewAudioMediaDecorativeView.m
=====================================
@@ -0,0 +1,72 @@
+/*****************************************************************************
+ * VLCMainVideoViewAudioMediaDecorativeView.m: MacOS X interface module
+ *****************************************************************************
+ * Copyright (C) 2023 VLC authors and VideoLAN
+ *
+ * Authors: Claudio Cambra <developer at claudiocambra.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#import "VLCMainVideoViewAudioMediaDecorativeView.h"
+
+#import "extensions/NSView+VLCAdditions.h"
+
+#import "library/VLCLibraryDataTypes.h"
+#import "library/VLCLibraryImageCache.h"
+
+#import "playlist/VLCPlaylistController.h"
+#import "playlist/VLCPlayerController.h"
+
+ at implementation VLCMainVideoViewAudioMediaDecorativeView
+
++ (instancetype)fromNibWithOwner:(id)owner
+{
+ return (VLCMainVideoViewAudioMediaDecorativeView*)[NSView fromNibNamed:@"VLCMainVideoViewAudioMediaDecorativeView"
+ withClass:[VLCMainVideoViewAudioMediaDecorativeView class]
+ withOwner:owner];
+}
+
+- (void)awakeFromNib
+{
+ NSNotificationCenter * const notificationCenter = NSNotificationCenter.defaultCenter;
+ [notificationCenter addObserver:self
+ selector:@selector(playerCurrentMediaItemChanged:)
+ name:VLCPlayerCurrentMediaItemChanged
+ object:nil];
+}
+
+- (void)playerCurrentMediaItemChanged:(NSNotification *)notification
+{
+ NSParameterAssert(notification);
+ VLCPlayerController * const controller = notification.object;
+ NSAssert(controller != nil, @"Player current media item changed notification should carry a valid player controller");
+
+ VLCInputItem * const currentInputItem = controller.currentMedia;
+ dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0), ^{
+ NSImage * const image = [VLCLibraryImageCache thumbnailForInputItem:currentInputItem];
+ dispatch_async(dispatch_get_main_queue(), ^{
+ [self setCoverArt:image];
+ });
+ });
+}
+
+- (void)setCoverArt:(NSImage *)coverArtImage
+{
+ _backgroundCoverArtView.image = coverArtImage;
+ _foregroundCoverArtView.image = coverArtImage;
+}
+
+ at end
=====================================
modules/gui/macosx/windows/video/VLCMainVideoViewController.h
=====================================
@@ -26,6 +26,7 @@
#import <windows/video/VLCVoutView.h>
@class VLCMainVideoViewOverlayView;
+ at class VLCMainVideoViewAudioMediaDecorativeView;
NS_ASSUME_NONNULL_BEGIN
@@ -34,6 +35,7 @@ NS_ASSUME_NONNULL_BEGIN
@property (readwrite, strong) IBOutlet VLCVoutView *voutView;
@property (readwrite, strong) IBOutlet NSBox *mainControlsView;
@property (readwrite, strong) IBOutlet VLCMainVideoViewOverlayView *overlayView;
+ at property (readwrite, strong) IBOutlet VLCMainVideoViewAudioMediaDecorativeView *audioDecorativeView;
@property (readwrite, strong) IBOutlet NSView *bottomBarView;
@property (readwrite, strong) IBOutlet NSStackView *centralControlsStackView;
@property (readwrite, strong) IBOutlet VLCControlsBarCommon *controlsBar;
=====================================
modules/gui/macosx/windows/video/VLCMainVideoViewController.m
=====================================
@@ -22,6 +22,7 @@
#import "VLCMainVideoViewController.h"
+#import "library/VLCLibraryDataTypes.h"
#import "library/VLCLibraryWindow.h"
#import "library/VLCLibraryUIUnits.h"
@@ -32,6 +33,7 @@
#import "views/VLCBottomBarView.h"
+#import "windows/video/VLCMainVideoViewAudioMediaDecorativeView.h"
#import "windows/video/VLCMainVideoViewOverlayView.h"
#import "windows/video/VLCVideoWindowCommon.h"
@@ -52,9 +54,61 @@
- (instancetype)init
{
self = [super initWithNibName:@"VLCMainVideoView" bundle:nil];
+ if (self) {
+ _isFadingIn = NO;
+
+ NSNotificationCenter * const notificationCenter = NSNotificationCenter.defaultCenter;
+ [notificationCenter addObserver:self
+ selector:@selector(playerCurrentMediaItemChanged:)
+ name:VLCPlayerCurrentMediaItemChanged
+ object:nil];
+ }
return self;
}
+- (void)setupAudioDecorativeView
+{
+ _audioDecorativeView = [VLCMainVideoViewAudioMediaDecorativeView fromNibWithOwner:self];
+ _audioDecorativeView.translatesAutoresizingMaskIntoConstraints = NO;
+ [self.view addConstraints:@[
+ [NSLayoutConstraint constraintWithItem:_audioDecorativeView
+ attribute:NSLayoutAttributeTop
+ relatedBy:NSLayoutRelationEqual
+ toItem:self.view
+ attribute:NSLayoutAttributeTop
+ multiplier:1.
+ constant:0.
+ ],
+ [NSLayoutConstraint constraintWithItem:_audioDecorativeView
+ attribute:NSLayoutAttributeBottom
+ relatedBy:NSLayoutRelationEqual
+ toItem:self.view
+ attribute:NSLayoutAttributeBottom
+ multiplier:1.
+ constant:0.
+ ],
+ [NSLayoutConstraint constraintWithItem:_audioDecorativeView
+ attribute:NSLayoutAttributeLeft
+ relatedBy:NSLayoutRelationEqual
+ toItem:self.view
+ attribute:NSLayoutAttributeLeft
+ multiplier:1.
+ constant:0.
+ ],
+ [NSLayoutConstraint constraintWithItem:_audioDecorativeView
+ attribute:NSLayoutAttributeRight
+ relatedBy:NSLayoutRelationEqual
+ toItem:self.view
+ attribute:NSLayoutAttributeRight
+ multiplier:1.
+ constant:0.
+ ],
+ ]];
+
+ [self.view addSubview:_audioDecorativeView positioned:NSWindowAbove relativeTo:_voutView];
+ _audioDecorativeView.hidden = YES;
+}
+
- (void)viewDidLoad
{
_autohideControls = YES;
@@ -87,6 +141,26 @@
_returnButtonBottomConstraint.active = NO;
_playlistButtonBottomConstraint.active = NO;
+
+ [self setupAudioDecorativeView];
+}
+
+- (void)playerCurrentMediaItemChanged:(NSNotification *)notification
+{
+ NSParameterAssert(notification);
+ VLCPlayerController * const controller = notification.object;
+ NSAssert(controller != nil, @"Player current media item changed notification should carry a valid player controller");
+
+ VLCMediaLibraryMediaItem * const mediaItem = [VLCMediaLibraryMediaItem mediaItemForURL:controller.URLOfCurrentMediaItem];
+
+ const BOOL decorativeViewVisible = mediaItem != nil && mediaItem.mediaType == VLC_ML_MEDIA_TYPE_AUDIO;
+ _audioDecorativeView.hidden = !decorativeViewVisible;
+
+ if (decorativeViewVisible) {
+ [self setAutohideControls:NO];
+ } else {
+ [self setAutohideControls:YES];
+ }
}
- (BOOL)mouseOnControls
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/893fd450d52ac76ce832a22cb521068fb8f6e314...3900ca14b219900775d28b53999f1cf044cb103d
--
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/893fd450d52ac76ce832a22cb521068fb8f6e314...3900ca14b219900775d28b53999f1cf044cb103d
You're receiving this email because of your account on code.videolan.org.
VideoLAN code repository instance
More information about the vlc-commits
mailing list