[vlc-commits] [Git][videolan/vlc][master] 9 commits: macosx: Add VLCLibraryWindowAutohideToolbar class

Steve Lhomme (@robUx4) gitlab at videolan.org
Fri Feb 3 04:51:56 UTC 2023



Steve Lhomme pushed to branch master at VideoLAN / VLC


Commits:
4b1d22f3 by Claudio Cambra at 2023-02-03T04:30:12+00:00
macosx: Add VLCLibraryWindowAutohideToolbar class

Signed-off-by: Claudio Cambra <developer at claudiocambra.com>

- - - - -
821e9602 by Claudio Cambra at 2023-02-03T04:30:12+00:00
macosx: Implement internal autohide behaviour in VLCLibraryWindowAutohideToolbar

Signed-off-by: Claudio Cambra <developer at claudiocambra.com>

- - - - -
4bdb1e28 by Claudio Cambra at 2023-02-03T04:30:12+00:00
macosx: Add autohide property to VLCLibraryWindowAutohideToolbar

Signed-off-by: Claudio Cambra <developer at claudiocambra.com>

- - - - -
ee56cd3f by Claudio Cambra at 2023-02-03T04:30:12+00:00
macosx: Add displayToolbar method to VLCLibraryWindowAutohideToolbar

Signed-off-by: Claudio Cambra <developer at claudiocambra.com>

- - - - -
6d564d6b by Claudio Cambra at 2023-02-03T04:30:12+00:00
macosx: Observe VLCVideoWindowShouldShowFullscreenController notification in VLCLibraryWindowAutohideToolbar

Signed-off-by: Claudio Cambra <developer at claudiocambra.com>

- - - - -
f7aba26f by Claudio Cambra at 2023-02-03T04:30:12+00:00
macosx: Default VLCLibraryWindowAutohideToolbar property to NO

Signed-off-by: Claudio Cambra <developer at claudiocambra.com>

- - - - -
47e99e7e by Claudio Cambra at 2023-02-03T04:30:12+00:00
macosx: Use VLCLibraryWindowAutohideToolbar in VLCLibraryWindow

Signed-off-by: Claudio Cambra <developer at claudiocambra.com>

- - - - -
0382486a by Claudio Cambra at 2023-02-03T04:30:12+00:00
macosx: Deduplicate setup code in VLCLibraryWindowAutohideToolbar

Signed-off-by: Claudio Cambra <developer at claudiocambra.com>

- - - - -
2ae5c194 by Claudio Cambra at 2023-02-03T04:30:12+00:00
macosx: Notify to display fullscreen controller whenever mouse is moved anywhere in VLCLibraryWindow (including playlist sidebar and toolbar), not just VLCVoutView

Signed-off-by: Claudio Cambra <developer at claudiocambra.com>

- - - - -


6 changed files:

- extras/package/macosx/VLC.xcodeproj/project.pbxproj
- modules/gui/macosx/Makefile.am
- modules/gui/macosx/UI/VLCLibraryWindow.xib
- modules/gui/macosx/library/VLCLibraryWindow.m
- + modules/gui/macosx/library/VLCLibraryWindowAutohideToolbar.h
- + modules/gui/macosx/library/VLCLibraryWindowAutohideToolbar.m


Changes:

=====================================
extras/package/macosx/VLC.xcodeproj/project.pbxproj
=====================================
@@ -79,6 +79,7 @@
 		1CFE8D591EA0D42A00E94451 /* VLCErrorWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CFE8D581EA0D42A00E94451 /* VLCErrorWindowController.m */; };
 		5307A6F52967859F001E0C6A /* NSImage+VLCAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 5307A6F42967859F001E0C6A /* NSImage+VLCAdditions.m */; };
 		5307A6F82969904D001E0C6A /* VLCLibraryMediaSourceViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5307A6F72969904D001E0C6A /* VLCLibraryMediaSourceViewController.m */; };
+		5307E5C3298745AB005F42C1 /* VLCLibraryWindowAutohideToolbar.m in Sources */ = {isa = PBXBuildFile; fileRef = 5307E5C2298745AB005F42C1 /* VLCLibraryWindowAutohideToolbar.m */; };
 		5317FE04294E3DD3001702F0 /* VLCLibraryCollectionViewDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5317FE03294E3DD3001702F0 /* VLCLibraryCollectionViewDelegate.m */; };
 		5325C57D29302E6800B2B63A /* VLCLibraryAudioViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5325C57B29302E6800B2B63A /* VLCLibraryAudioViewController.m */; };
 		5362550D293FD639005D64FA /* VLCLibraryWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5362550C293FD639005D64FA /* VLCLibraryWindowController.m */; };
@@ -245,6 +246,8 @@
 		5307A6F42967859F001E0C6A /* NSImage+VLCAdditions.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSImage+VLCAdditions.m"; sourceTree = "<group>"; };
 		5307A6F62969904D001E0C6A /* VLCLibraryMediaSourceViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCLibraryMediaSourceViewController.h; sourceTree = "<group>"; };
 		5307A6F72969904D001E0C6A /* VLCLibraryMediaSourceViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VLCLibraryMediaSourceViewController.m; sourceTree = "<group>"; };
+		5307E5C1298745AB005F42C1 /* VLCLibraryWindowAutohideToolbar.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCLibraryWindowAutohideToolbar.h; sourceTree = "<group>"; };
+		5307E5C2298745AB005F42C1 /* VLCLibraryWindowAutohideToolbar.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VLCLibraryWindowAutohideToolbar.m; sourceTree = "<group>"; };
 		5317FE02294E3DD3001702F0 /* VLCLibraryCollectionViewDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCLibraryCollectionViewDelegate.h; sourceTree = "<group>"; };
 		5317FE03294E3DD3001702F0 /* VLCLibraryCollectionViewDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VLCLibraryCollectionViewDelegate.m; sourceTree = "<group>"; };
 		5317FE05294E8D1A001702F0 /* VLCLibraryCollectionViewDataSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCLibraryCollectionViewDataSource.h; sourceTree = "<group>"; };
@@ -1165,6 +1168,8 @@
 				536283DE291146BC00640C15 /* VLCLibraryTableView.m */,
 				7D713D302201AE350042BEB7 /* VLCLibraryWindow.h */,
 				7D713D312201AE350042BEB7 /* VLCLibraryWindow.m */,
+				5307E5C1298745AB005F42C1 /* VLCLibraryWindowAutohideToolbar.h */,
+				5307E5C2298745AB005F42C1 /* VLCLibraryWindowAutohideToolbar.m */,
 				5362550B293FD639005D64FA /* VLCLibraryWindowController.h */,
 				5362550C293FD639005D64FA /* VLCLibraryWindowController.m */,
 				5317FE02294E3DD3001702F0 /* VLCLibraryCollectionViewDelegate.h */,
@@ -1882,6 +1887,7 @@
 				536283F1291146BC00640C15 /* VLCLibraryAlbumTracksDataSource.m in Sources */,
 				5307A6F52967859F001E0C6A /* NSImage+VLCAdditions.m in Sources */,
 				1CCC89042078A3D500E5626F /* StreamOutput.xib in Sources */,
+				5307E5C3298745AB005F42C1 /* VLCLibraryWindowAutohideToolbar.m in Sources */,
 				536283F7291146BC00640C15 /* VLCLibraryNavigationState.m in Sources */,
 				1CCC89052078A3D500E5626F /* TextfieldPanel.xib in Sources */,
 				1CCC89062078A3D500E5626F /* TimeSelectionPanel.xib in Sources */,


=====================================
modules/gui/macosx/Makefile.am
=====================================
@@ -100,6 +100,8 @@ libmacosx_plugin_la_SOURCES = \
 	gui/macosx/library/VLCLibraryUIUnits.m \
 	gui/macosx/library/VLCLibraryWindow.h \
 	gui/macosx/library/VLCLibraryWindow.m \
+	gui/macosx/library/VLCLibraryWindowAutohideToolbar.h \
+	gui/macosx/library/VLCLibraryWindowAutohideToolbar.m \
 	gui/macosx/library/VLCLibraryWindowController.h \
 	gui/macosx/library/VLCLibraryWindowController.m \
 	gui/macosx/library/video-library/VLCLibraryVideoViewController.h \


=====================================
modules/gui/macosx/UI/VLCLibraryWindow.xib
=====================================
@@ -588,7 +588,7 @@
                     <constraint firstAttribute="bottom" secondItem="vUy-jt-gjY" secondAttribute="bottom" id="vMr-VQ-r4P"/>
                 </constraints>
             </visualEffectView>
-            <toolbar key="toolbar" implicitIdentifier="CAE4F278-DC20-4A58-B07E-1580E7B14C87" centeredItem="KnW-Lr-R1d" autosavesConfiguration="NO" displayMode="iconOnly" sizeMode="regular" id="pr3-TD-J2z">
+            <toolbar key="toolbar" implicitIdentifier="CAE4F278-DC20-4A58-B07E-1580E7B14C87" centeredItem="KnW-Lr-R1d" autosavesConfiguration="NO" displayMode="iconOnly" sizeMode="regular" id="pr3-TD-J2z" customClass="VLCLibraryWindowAutohideToolbar">
                 <allowedToolbarItems>
                     <toolbarItem implicitItemIdentifier="71EED6C9-B0A2-4964-8846-16159F10619E" label="Sort Order" paletteLabel="Sort Order" image="arrow.up.arrow.down" catalog="system" sizingBehavior="auto" id="Tbc-Ik-FaO">
                         <nil key="toolTip"/>


=====================================
modules/gui/macosx/library/VLCLibraryWindow.m
=====================================
@@ -40,6 +40,7 @@
 #import "library/VLCLibrarySortingMenuController.h"
 #import "library/VLCLibraryNavigationStack.h"
 #import "library/VLCLibraryUIUnits.h"
+#import "library/VLCLibraryWindowAutohideToolbar.h"
 
 #import "library/video-library/VLCLibraryVideoCollectionViewsStackViewController.h"
 #import "library/video-library/VLCLibraryVideoTableViewDataSource.h"
@@ -184,10 +185,6 @@ static void addShadow(NSImageView *__unsafe_unretained imageView)
                            selector:@selector(playerStateChanged:)
                                name:VLCPlayerStateChanged
                              object:nil];
-    [notificationCenter addObserver:self
-                           selector:@selector(videoDisplayToolbar:)
-                               name:VLCVideoWindowShouldShowFullscreenController
-                             object:nil];
 
     if (@available(macOS 10.14, *)) {
         [[NSApplication sharedApplication] addObserver:self
@@ -695,47 +692,6 @@ static void addShadow(NSImageView *__unsafe_unretained imageView)
         _windowFrameBeforePlayback = [self frame];
 }
 
-- (void)startToolbarAutohideTimer
-{
-    /* Do nothing if timer is already in place */
-    if (_hideToolbarTimer.valid) {
-        return;
-    }
-
-    /* Get timeout and make sure it is not lower than 1 second */
-    long long timeToKeepVisibleInSec = MAX(var_CreateGetInteger(getIntf(), "mouse-hide-timeout") / 1000, 1);
-
-    _hideToolbarTimer = [NSTimer scheduledTimerWithTimeInterval:timeToKeepVisibleInSec
-                                                         target:self
-                                                       selector:@selector(videoHideToolbar:)
-                                                       userInfo:nil
-                                                        repeats:NO];
-}
-
-- (void)stopAutohideTimer
-{
-    [_hideToolbarTimer invalidate];
-}
-
-- (void)videoHideToolbar:(id)sender
-{
-    if (self.hasActiveVideo && !self.videoView.hidden) {
-        [self stopAutohideTimer];
-        self.toolbar.visible = NO;
-    }
-}
-
-- (void)videoDisplayToolbar:(id)sender
-{
-    [self stopAutohideTimer];
-
-    if (self.hasActiveVideo && !self.videoView.hidden) {
-        [self startToolbarAutohideTimer];
-    }
-
-    self.toolbar.visible = YES;
-}
-
 - (void)setHasActiveVideo:(BOOL)hasActiveVideo
 {
     [super setHasActiveVideo:hasActiveVideo];
@@ -811,7 +767,7 @@ static void addShadow(NSImageView *__unsafe_unretained imageView)
         [_fspanel shouldBecomeActive:nil];
     }
 
-    [self startToolbarAutohideTimer];
+    [(VLCLibraryWindowAutohideToolbar *)self.toolbar setAutohide:YES];
 }
 
 - (void)disableVideoPlaybackAppearance
@@ -858,7 +814,22 @@ static void addShadow(NSImageView *__unsafe_unretained imageView)
         [_fspanel shouldBecomeInactive:nil];
     }
 
-    [self videoDisplayToolbar:self];
+    [(VLCLibraryWindowAutohideToolbar *)self.toolbar setAutohide:NO];
+}
+
+- (void)mouseMoved:(NSEvent *)o_event
+{
+    if (!self.videoView.hidden) {
+        NSPoint mouseLocation = [o_event locationInWindow];
+        NSRect windowRectWithFrame = [self frameRectForContentRect:self.contentView.frame];
+
+        if ([self.contentView mouse:mouseLocation inRect:windowRectWithFrame]) {
+            [[NSNotificationCenter defaultCenter] postNotificationName:VLCVideoWindowShouldShowFullscreenController
+                                                                object:self];
+        }
+    }
+
+    [super mouseMoved:o_event];
 }
 
 #pragma mark -


=====================================
modules/gui/macosx/library/VLCLibraryWindowAutohideToolbar.h
=====================================
@@ -0,0 +1,35 @@
+/*****************************************************************************
+ * VLCLibraryWindowAutohideToolbar.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 VLCLibraryWindowAutohideToolbar : NSToolbar
+
+ at property (readwrite, nonatomic) BOOL autohide;
+
+- (void)displayToolbar;
+
+ at end
+
+NS_ASSUME_NONNULL_END


=====================================
modules/gui/macosx/library/VLCLibraryWindowAutohideToolbar.m
=====================================
@@ -0,0 +1,126 @@
+/*****************************************************************************
+ * VLCLibraryWindowAutohideToolbar.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 "VLCLibraryWindowAutohideToolbar.h"
+
+#import "main/VLCMain.h"
+
+#import "windows/video/VLCVideoWindowCommon.h"
+
+#import <vlc_common.h>
+
+ at interface VLCLibraryWindowAutohideToolbar()
+{
+    NSTimer *_hideToolbarTimer;
+}
+ at end
+
+ at implementation VLCLibraryWindowAutohideToolbar
+
+- (instancetype)init
+{
+    self = [super init];
+    if (self) {
+        [self setup];
+    }
+    return self;
+}
+
+- (void)awakeFromNib
+{
+    [self setup];
+}
+
+- (void)setup
+{
+    NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
+    [notificationCenter addObserver:self
+                           selector:@selector(shouldShowToolbar:)
+                               name:VLCVideoWindowShouldShowFullscreenController
+                             object:nil];
+    _autohide = NO;
+}
+
+- (void)stopAutohideTimer
+{
+    [_hideToolbarTimer invalidate];
+}
+
+- (void)startAutohideTimer
+{
+    /* Do nothing if timer is already in place */
+    if (_hideToolbarTimer.valid) {
+        return;
+    }
+
+    /* Get timeout and make sure it is not lower than 1 second */
+    long long timeToKeepVisibleInSec = MAX(var_CreateGetInteger(getIntf(), "mouse-hide-timeout") / 1000, 1);
+
+    _hideToolbarTimer = [NSTimer scheduledTimerWithTimeInterval:timeToKeepVisibleInSec
+                                                         target:self
+                                                       selector:@selector(hideToolbar:)
+                                                       userInfo:nil
+                                                        repeats:NO];
+}
+
+- (void)hideToolbar:(id)sender
+{
+    [self stopAutohideTimer];
+    self.visible = NO;
+}
+
+- (void)setAutohide:(BOOL)autohide
+{
+    if (_autohide == autohide) {
+        return;
+    }
+
+    _autohide = autohide;
+
+    if (autohide) {
+        [self startAutohideTimer];
+    } else {
+        [self displayToolbar];
+    }
+}
+
+- (void)shouldShowToolbar:(NSNotification *)aNotification
+{
+    [self displayToolbar];
+}
+
+- (void)displayToolbar
+{
+    [self stopAutohideTimer];
+
+    if (self.visible && !_autohide) {
+        return;
+    }
+
+    self.visible = YES;
+
+    if (_autohide) {
+        [self startAutohideTimer];
+    }
+}
+
+ at end



View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/46ca013bb6c23922609e1d936fc9f31cdcf7859f...2ae5c194b14663fe14eae12ef7941c86e7407862

-- 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/46ca013bb6c23922609e1d936fc9f31cdcf7859f...2ae5c194b14663fe14eae12ef7941c86e7407862
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