[vlc-commits] [Git][videolan/vlc][master] 3 commits: macosx: Replace visual effect background view with glass effect view

Marvin Scholz (@ePirat) gitlab at videolan.org
Tue Aug 5 22:00:07 UTC 2025



Marvin Scholz pushed to branch master at VideoLAN / VLC


Commits:
6b926e3d by Claudio Cambra at 2025-08-05T21:41:19+00:00
macosx: Replace visual effect background view with glass effect view

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

- - - - -
3fcbdafb by Claudio Cambra at 2025-08-05T21:41:19+00:00
macosx: Use correct path control container view in base data source

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

- - - - -
bdb08656 by Claudio Cambra at 2025-08-05T21:41:19+00:00
macosx: Do not build glass stuff in macOS <26

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

- - - - -


4 changed files:

- modules/gui/macosx/library/media-source/VLCLibraryMediaSourceViewController.h
- modules/gui/macosx/library/media-source/VLCLibraryMediaSourceViewController.m
- modules/gui/macosx/library/media-source/VLCMediaSourceBaseDataSource.h
- modules/gui/macosx/library/media-source/VLCMediaSourceBaseDataSource.m


Changes:

=====================================
modules/gui/macosx/library/media-source/VLCLibraryMediaSourceViewController.h
=====================================
@@ -49,6 +49,7 @@ NS_ASSUME_NONNULL_BEGIN
 
 @property (readonly) VLCMediaSourceBaseDataSource *baseDataSource;
 @property (readonly) VLCLibraryMediaSourceViewNavigationStack *navigationStack;
+ at property (readonly) NSView *pathControlContainerView;
 
 - (instancetype)initWithLibraryWindow:(VLCLibraryWindow *)libraryWindow;
 


=====================================
modules/gui/macosx/library/media-source/VLCLibraryMediaSourceViewController.m
=====================================
@@ -35,12 +35,21 @@
 #import "library/VLCLibraryCollectionViewFlowLayout.h"
 #import "library/VLCLibraryCollectionViewItem.h"
 #import "library/VLCLibraryController.h"
+#import "library/VLCInputNodePathControl.h"
 #import "library/VLCLibrarySegment.h"
 #import "library/VLCLibraryUIUnits.h"
 #import "library/VLCLibraryWindow.h"
 
 #import "main/VLCMain.h"
 
+ at interface VLCLibraryMediaSourceViewController ()
+
+#if __MAC_OS_X_VERSION_MAX_ALLOWED >= 260000
+ at property (readonly) NSGlassEffectView *pathControlGlassEffectView API_AVAILABLE(macos(26.0));
+#endif
+
+ at end
+
 @implementation VLCLibraryMediaSourceViewController
 
 - (instancetype)initWithLibraryWindow:(VLCLibraryWindow *)libraryWindow
@@ -48,11 +57,11 @@
     self = [super initWithLibraryWindow:libraryWindow];
     if (self) {
         [self setupPropertiesFromLibraryWindow:libraryWindow];
+        [self setupPathControlView];
         [self setupBaseDataSource];
         [self setupCollectionView];
         [self setupMediaSourceLibraryViews];
         [self setupPlaceholderLabel];
-        [self setupPathControlView];
 
         NSNotificationCenter * const defaultCenter = NSNotificationCenter.defaultCenter;
         [defaultCenter addObserver:self 
@@ -89,7 +98,7 @@
     _baseDataSource.collectionViewScrollView = _collectionViewScrollView;
     _baseDataSource.homeButton = _homeButton;
     _baseDataSource.pathControl = _pathControl;
-    _baseDataSource.pathControlVisualEffectView = _pathControlVisualEffectView;
+    _baseDataSource.pathControlContainerView = self.pathControlContainerView;
     _baseDataSource.tableView = _tableView;
     _baseDataSource.tableViewScrollView = _tableViewScrollView;
     [_baseDataSource setupViews];
@@ -139,14 +148,41 @@
 
 - (void)setupPathControlView
 {
-    _pathControlViewTopConstraintToSuperview = [NSLayoutConstraint constraintWithItem:self.pathControlVisualEffectView
-                                                                                    attribute:NSLayoutAttributeTop
-                                                                                    relatedBy:NSLayoutRelationEqual
-                                                                                       toItem:self.mediaSourceView
-                                                                                    attribute:NSLayoutAttributeTop
-                                                                                   multiplier:1.
-                                                                                     constant:self.libraryWindow.titlebarHeight];
-    [self.mediaSourceView addConstraint:_pathControlViewTopConstraintToSuperview];
+    if (@available(macOS 26.0, *)) {
+#if __MAC_OS_X_VERSION_MAX_ALLOWED >= 260000
+        NSButton * const homeButton = self.homeButton;
+        VLCInputNodePathControl * const pathControl = self.pathControl;
+        pathControl.translatesAutoresizingMaskIntoConstraints = NO;
+        const CGFloat pathControlHeight = pathControl.frame.size.height;
+        
+        _pathControlGlassEffectView = [[NSGlassEffectView alloc] initWithFrame:self.pathControlVisualEffectView.frame];
+        self.pathControlGlassEffectView.translatesAutoresizingMaskIntoConstraints = NO;
+        [self.pathControlVisualEffectView removeFromSuperview];
+        [self.mediaSourceView addSubview:self.pathControlGlassEffectView];
+
+        _pathControlViewTopConstraintToSuperview =
+            [self.pathControlGlassEffectView.topAnchor constraintEqualToAnchor:self.mediaSourceView.topAnchor constant:self.libraryWindow.titlebarHeight];
+        [NSLayoutConstraint activateConstraints:@[
+            [self.pathControlGlassEffectView.leadingAnchor constraintEqualToAnchor:self.mediaSourceView.leadingAnchor constant:VLCLibraryUIUnits.smallSpacing],
+            [self.pathControlGlassEffectView.trailingAnchor constraintEqualToAnchor:self.mediaSourceView.trailingAnchor constant:-VLCLibraryUIUnits.smallSpacing],
+            [self.pathControlGlassEffectView.heightAnchor constraintEqualToConstant:pathControlHeight + (VLCLibraryUIUnits.smallSpacing * 2)],
+        ]];
+        NSView * const pathControlContainer = [[NSView alloc] initWithFrame:pathControl.frame];
+        [pathControlContainer addSubview:homeButton];
+        [pathControlContainer addSubview:pathControl];
+        [NSLayoutConstraint activateConstraints:@[
+            [homeButton.leadingAnchor constraintEqualToAnchor:pathControlContainer.leadingAnchor constant:VLCLibraryUIUnits.smallSpacing],
+            [homeButton.centerYAnchor constraintEqualToAnchor:pathControlContainer.centerYAnchor],
+            [pathControl.leadingAnchor constraintEqualToAnchor:homeButton.trailingAnchor constant:VLCLibraryUIUnits.smallSpacing],
+            [pathControl.trailingAnchor constraintEqualToAnchor:pathControlContainer.trailingAnchor constant:-VLCLibraryUIUnits.smallSpacing],
+            [pathControl.centerYAnchor constraintEqualToAnchor:pathControlContainer.centerYAnchor],
+        ]];
+        self.pathControlGlassEffectView.contentView = pathControlContainer;
+#endif
+    } else {
+        _pathControlViewTopConstraintToSuperview =
+            [self.pathControlVisualEffectView.topAnchor constraintEqualToAnchor:self.mediaSourceView.topAnchor constant:self.libraryWindow.titlebarHeight];
+    }
     _pathControlViewTopConstraintToSuperview.active = YES;
 }
 
@@ -155,6 +191,15 @@
     self.browsePlaceholderLabel.hidden = self.mediaSourceTableView.numberOfRows > 0;
 }
 
+- (NSView *)pathControlContainerView
+{
+#if __MAC_OS_X_VERSION_MAX_ALLOWED >= 260000
+    if (@available(macOS 26.0, *))
+        return self.pathControlGlassEffectView;
+#endif
+    return self.pathControlVisualEffectView;
+}
+
 - (void)presentBrowseView
 {
     [self presentMediaSourceView:VLCLibraryBrowseSegmentType];


=====================================
modules/gui/macosx/library/media-source/VLCMediaSourceBaseDataSource.h
=====================================
@@ -49,7 +49,7 @@ extern NSString * const VLCMediaSourceBaseDataSourceNodeChanged;
 @property (readwrite, weak) NSScrollView *tableViewScrollView;
 @property (readwrite, weak) NSButton *homeButton;
 @property (readwrite, weak) VLCInputNodePathControl *pathControl;
- at property (readwrite, weak) NSVisualEffectView *pathControlVisualEffectView;
+ at property (readwrite, weak) NSView *pathControlContainerView;
 @property (readwrite, nonatomic) VLCMediaSourceMode mediaSourceMode;
 @property (readwrite, nonatomic) VLCMediaSourceDataSource *childDataSource;
 


=====================================
modules/gui/macosx/library/media-source/VLCMediaSourceBaseDataSource.m
=====================================
@@ -151,7 +151,7 @@ NSString * const VLCMediaSourceBaseDataSourceNodeChanged = @"VLCMediaSourceBaseD
     } else {
         NSAssert(false, @"View mode must be grid or list mode");
     }
-    [self togglePathControlVisibility:!_pathControlVisualEffectView.hidden];
+    [self togglePathControlVisibility:!_pathControlContainerView.hidden];
 }
 
 - (void)loadMediaSources
@@ -539,10 +539,10 @@ referenceSizeForHeaderInSection:(NSInteger)section
 
 - (void)togglePathControlVisibility:(BOOL)visible
 {
-    _pathControlVisualEffectView.hidden = !visible;
+    _pathControlContainerView.hidden = !visible;
 
-    const CGFloat pathControlVisualEffectViewHeight = _pathControlVisualEffectView.frame.size.height;
-    const CGFloat scrollViewsTopSpace = visible ? pathControlVisualEffectViewHeight : 0;
+    const CGFloat pathControlContainerViewHeight = _pathControlContainerView.frame.size.height;
+    const CGFloat scrollViewsTopSpace = visible ? pathControlContainerViewHeight : 0;
 
     NSEdgeInsets scrollViewInsets = VLCLibraryUIUnits.libraryViewScrollViewContentInsets;
     scrollViewInsets.top += scrollViewsTopSpace;



View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/fbdcb7d6fdbb39ffeeafe5882395988e0a133a2f...bdb08656bf6d373cb74f6376a4fc78e5d28d3453

-- 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/fbdcb7d6fdbb39ffeeafe5882395988e0a133a2f...bdb08656bf6d373cb74f6376a4fc78e5d28d3453
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