Steve Lhomme pushed to branch master at VideoLAN / VLC
Commits:
b5a74723 by Claudio Cambra at 2025-02-05T08:27:29+00:00
macosx: Allow adjustment of number of items in collection view row via defaults
keyvalue
Signed-off-by: Claudio Cambra <[email protected]>
- - - - -
c07362e7 by Claudio Cambra at 2025-02-05T08:27:29+00:00
macosx: Only effect adjustment when the number of items in row has changed
Signed-off-by: Claudio Cambra <[email protected]>
- - - - -
549be659 by Claudio Cambra at 2025-02-05T08:27:29+00:00
macosx: Prevent item size values going below 0 and becoming illegal
Signed-off-by: Claudio Cambra <[email protected]>
- - - - -
419191bf by Claudio Cambra at 2025-02-05T08:27:29+00:00
macosx: Actually set item size during adjustment in collection view
Signed-off-by: Claudio Cambra <[email protected]>
- - - - -
eba084c3 by Claudio Cambra at 2025-02-05T08:27:29+00:00
macosx: Remove internal state in collection view item sizing method
This method's hidden state is a micro optimisation since this method
only gets called when the collection view sizing actually changes. Yet
it makes accurately setting the adjustment more difficult. So let's
remove it
Signed-off-by: Claudio Cambra <[email protected]>
- - - - -
07b609a2 by Claudio Cambra at 2025-02-05T08:27:29+00:00
macosx: Provide extern within nonnull block
Fixes warning
Signed-off-by: Claudio Cambra <[email protected]>
- - - - -
56cd4f82 by Claudio Cambra at 2025-02-05T08:27:29+00:00
macosx: Add ability to make collection view items larger or smaller via CMD+
and CMD-
Signed-off-by: Claudio Cambra <[email protected]>
- - - - -
08085e96 by Claudio Cambra at 2025-02-05T08:27:29+00:00
macosx: Emit notification when the collection view item sizing had been adjusted
Signed-off-by: Claudio Cambra <[email protected]>
- - - - -
c6af4fe3 by Claudio Cambra at 2025-02-05T08:27:29+00:00
macosx: Present message in sidebar when collection view item sizing is adjusted
Signed-off-by: Claudio Cambra <[email protected]>
- - - - -
5 changed files:
- modules/gui/macosx/library/VLCLibraryCollectionView.h
- modules/gui/macosx/library/VLCLibraryCollectionView.m
- modules/gui/macosx/library/VLCLibraryUIUnits.h
- modules/gui/macosx/library/VLCLibraryUIUnits.m
- modules/gui/macosx/views/VLCStatusNotifierView.m
Changes:
=====================================
modules/gui/macosx/library/VLCLibraryCollectionView.h
=====================================
@@ -24,6 +24,9 @@
NS_ASSUME_NONNULL_BEGIN
+extern NSString * const VLCLibraryCollectionViewItemAdjustmentBigger;
+extern NSString * const VLCLibraryCollectionViewItemAdjustmentSmaller;
+
@interface VLCLibraryCollectionView : NSCollectionView
@end
=====================================
modules/gui/macosx/library/VLCLibraryCollectionView.m
=====================================
@@ -22,6 +22,12 @@
#import "VLCLibraryCollectionView.h"
+#import "library/VLCLibraryCollectionViewFlowLayout.h"
+#import "library/VLCLibraryUIUnits.h"
+
+NSString * const VLCLibraryCollectionViewItemAdjustmentBigger =
@"VLCLibraryCollectionViewItemAdjustmentBigger";
+NSString * const VLCLibraryCollectionViewItemAdjustmentSmaller =
@"VLCLibraryCollectionViewItemAdjustmentSmaller";
+
@implementation VLCLibraryCollectionView
- (void)layout
@@ -33,4 +39,36 @@
[super layout];
}
+- (void)keyDown:(NSEvent *)event
+{
+ if (![self.collectionViewLayout
isKindOfClass:VLCLibraryCollectionViewFlowLayout.class] ||
+ !(event.modifierFlags & NSCommandKeyMask)) {
+ return;
+ }
+
+ const unichar key = [event.charactersIgnoringModifiers.lowercaseString
characterAtIndex:0];
+ if (key != '+' && key != '-') {
+ return;
+ }
+
+ NSUserDefaults * const defaults = NSUserDefaults.standardUserDefaults;
+ NSInteger collectionViewAdjustment =
+ [defaults integerForKey:VLCLibraryCollectionViewItemAdjustmentKey];
+ NSNotification *notification;
+ if (key == '+') {
+ collectionViewAdjustment--;
+ notification =
+ [NSNotification
notificationWithName:VLCLibraryCollectionViewItemAdjustmentBigger
+ object:self];
+ } else if (key == '-') {
+ collectionViewAdjustment++;
+ notification =
+ [NSNotification
notificationWithName:VLCLibraryCollectionViewItemAdjustmentSmaller
+ object:self];
+ }
+ [defaults setInteger:collectionViewAdjustment
forKey:VLCLibraryCollectionViewItemAdjustmentKey];
+ [NSNotificationCenter.defaultCenter postNotification:notification];
+ [self.collectionViewLayout invalidateLayout];
+}
+
@end
=====================================
modules/gui/macosx/library/VLCLibraryUIUnits.h
=====================================
@@ -31,6 +31,8 @@ typedef NS_ENUM(NSUInteger,
VLCLibraryCollectionViewItemAspectRatio) {
NS_ASSUME_NONNULL_BEGIN
+extern NSString * const VLCLibraryCollectionViewItemAdjustmentKey;
+
@interface VLCLibraryUIUnits : NSObject
// Note that these values are not necessarily linked to the layout defined in
the .xib files.
=====================================
modules/gui/macosx/library/VLCLibraryUIUnits.m
=====================================
@@ -34,6 +34,8 @@
#import "windows/controlsbar/VLCControlsBarCommon.h"
+NSString * const VLCLibraryCollectionViewItemAdjustmentKey =
@"VLCLibraryCollectionViewItemAdjustmentKey";
+
@implementation VLCLibraryUIUnits
+ (const CGFloat)largeSpacing
@@ -126,8 +128,8 @@
withLayout:(VLCLibraryCollectionViewFlowLayout *)collectionViewLayout
withItemsAspectRatio:(VLCLibraryCollectionViewItemAspectRatio)itemsAspectRatio
{
- static uint numItemsInRow = 5;
- static uint minItemsInRow = 2;
+ uint numItemsInRow = 5;
+ static const uint kMinItemsInCollectionViewRow = 1;
NSSize itemSize = [self itemSizeForCollectionView:collectionView
withLayout:collectionViewLayout
@@ -141,7 +143,7 @@
withItemsAspectRatio:itemsAspectRatio
withNumberOfItemsInRow:numItemsInRow];
}
- while (itemSize.width <
VLCLibraryUIUnits.dynamicCollectionViewItemMinimumWidth && numItemsInRow >
minItemsInRow) {
+ while (itemSize.width <
VLCLibraryUIUnits.dynamicCollectionViewItemMinimumWidth && numItemsInRow >
kMinItemsInCollectionViewRow) {
--numItemsInRow;
itemSize = [self itemSizeForCollectionView:collectionView
withLayout:collectionViewLayout
@@ -149,6 +151,16 @@
withNumberOfItemsInRow:numItemsInRow];
}
+ const NSInteger adjustment =
+ [NSUserDefaults.standardUserDefaults
integerForKey:VLCLibraryCollectionViewItemAdjustmentKey];
+ if (adjustment != 0 && numItemsInRow + adjustment >
kMinItemsInCollectionViewRow) {
+ numItemsInRow += adjustment;
+ itemSize = [self itemSizeForCollectionView:collectionView
+ withLayout:collectionViewLayout
+ withItemsAspectRatio:itemsAspectRatio
+ withNumberOfItemsInRow:numItemsInRow];
+ }
+
return itemSize;
}
@@ -170,7 +182,7 @@
(interItemSpacing * (numItemsInRow - 1)) +
1);
- const CGFloat itemWidth = rowOfItemsWidth / numItemsInRow;
+ const CGFloat itemWidth = MAX(rowOfItemsWidth / numItemsInRow, 1);
const CGFloat itemHeight = itemsAspectRatio ==
VLCLibraryCollectionViewItemAspectRatioDefaultItem ?
itemWidth + VLCLibraryCollectionViewItem.bottomTextViewsHeight :
(itemWidth * [VLCLibraryCollectionViewItem
videoHeightAspectRatioMultiplier]) +
VLCLibraryCollectionViewItem.bottomTextViewsHeight;
=====================================
modules/gui/macosx/views/VLCStatusNotifierView.m
=====================================
@@ -23,6 +23,7 @@
#import "VLCStatusNotifierView.h"
#import "extensions/NSString+Helpers.h"
+#import "library/VLCLibraryCollectionView.h"
#import "library/VLCLibraryModel.h"
NSString * const VLCStatusNotifierViewActivated =
@"VLCStatusNotifierViewActivated";
@@ -144,6 +145,10 @@ NSString * const VLCStatusNotifierViewDeactivated =
@"VLCStatusNotifierViewDeact
[self presentTransientMessage:self.libraryItemsLoadedMessage];
[self removeMessage:self.loadingLibraryItemsMessage];
}
+ } else if ([notificationName
isEqualToString:VLCLibraryCollectionViewItemAdjustmentBigger]) {
+ [self presentTransientMessage:_NS("Increased grid view item size")];
+ } else if ([notificationName
isEqualToString:VLCLibraryCollectionViewItemAdjustmentSmaller]) {
+ [self presentTransientMessage:_NS("Decreased grid view item size")];
}
}
View it on GitLab:
https://code.videolan.org/videolan/vlc/-/compare/259a7cfb63be47330ebc463ad2ee548e881dc384...c6af4fe30801e1a37acaa478698c80e5141854f6
--
View it on GitLab:
https://code.videolan.org/videolan/vlc/-/compare/259a7cfb63be47330ebc463ad2ee548e881dc384...c6af4fe30801e1a37acaa478698c80e5141854f6
You're receiving this email because of your account on code.videolan.org.
VideoLAN code repository instance_______________________________________________
vlc-commits mailing list
[email protected]
https://mailman.videolan.org/listinfo/vlc-commits