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 <develo...@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 <develo...@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 <develo...@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;
+@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"
 
+@interface VLCLibraryMediaSourceViewController ()
+
+#if __MAC_OS_X_VERSION_MAX_ALLOWED >= 260000
+@property (readonly) NSGlassEffectView *pathControlGlassEffectView 
API_AVAILABLE(macos(26.0));
+#endif
+
+@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;
-@property (readwrite, weak) NSVisualEffectView *pathControlVisualEffectView;
+@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
_______________________________________________
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to