[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