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

Reply via email to