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 <develo...@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.cam...@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 <develo...@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 <develo...@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 <develo...@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 <develo...@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 <develo...@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 <develo...@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 <develo...@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 <develo...@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 <develo...@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 <develo...@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 <develo...@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 <develo...@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 <develo...@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
+
+@interface VLCMainVideoViewAudioMediaDecorativeView : NSView
+
++ (instancetype)fromNibWithOwner:(id)owner;
+
+@property (readwrite, strong) IBOutlet NSImageView *foregroundCoverArtView;
+@property (readwrite, strong) IBOutlet NSImageView *backgroundCoverArtView;
+@property (readwrite, strong) IBOutlet NSVisualEffectView
*backgroundVisualEffectView;
+
+- (void)setCoverArt:(NSImage *)coverArtImage;
+
+@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 <develo...@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"
+
+@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;
+}
+
+@end
=====================================
modules/gui/macosx/windows/video/VLCMainVideoViewController.h
=====================================
@@ -26,6 +26,7 @@
#import <windows/video/VLCVoutView.h>
@class VLCMainVideoViewOverlayView;
+@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;
+@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
_______________________________________________
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits