[vlc-commits] [Git][videolan/vlc][master] 13 commits: macosx: Add horizontal expand type

Felix Paul Kühne (@fkuehne) gitlab at videolan.org
Tue Mar 12 19:31:39 UTC 2024



Felix Paul Kühne pushed to branch master at VideoLAN / VLC


Commits:
fa174bff by Claudio Cambra at 2024-03-12T19:01:54+00:00
macosx: Add horizontal expand type

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

- - - - -
0e4fc730 by Claudio Cambra at 2024-03-12T19:01:54+00:00
macosx: Remove unused _lastHeightIndex in VLCLibraryCollectionViewFlowLayout

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

- - - - -
44dac986 by Claudio Cambra at 2024-03-12T19:01:54+00:00
macosx: Display supplementary detail views in VLCLibraryCollectionViewFlowLayout horizontally when the layout is horizontal

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

- - - - -
8d46aebd by Claudio Cambra at 2024-03-12T19:01:54+00:00
macosx: Make VLCLibraryCollectionViewSupplementaryView keep track of collection view layout scroll direction

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

- - - - -
5fc5adf7 by Claudio Cambra at 2024-03-12T19:01:54+00:00
macosx: Extract VLCLibraryCollectionViewSupplementaryDetailView background drawing into separate methods

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

- - - - -
19d520c2 by Claudio Cambra at 2024-03-12T19:01:54+00:00
macosx: Draw supplementary detail view arrow on left in horizontal layouts

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

- - - - -
c6e79297 by Claudio Cambra at 2024-03-12T19:01:54+00:00
macosx: Make VLCLibraryCollectionViewSupplementaryDetailView keep track of content constraints, change according to collection view layout

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

- - - - -
83a33c10 by Claudio Cambra at 2024-03-12T19:01:54+00:00
macosx: only do constraint setting in VLCLibraryCollectionViewSupplementaryDetailView if constraints are valid

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

- - - - -
59771e1a by Claudio Cambra at 2024-03-12T19:01:54+00:00
macosx: Set constraint outlets in VLCLibrraryCollectionViewMediaItemSupplementaryDetailView.xib

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

- - - - -
845e2a96 by Claudio Cambra at 2024-03-12T19:01:54+00:00
macosx: Set constraint outlets in VLCLibrraryCollectionViewAlbumSupplementaryDetailView.xib

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

- - - - -
5e6bd45f by Claudio Cambra at 2024-03-12T19:01:54+00:00
macosx: Set constraint outlets in VLCLibrraryCollectionViewAudioGroupSupplementaryDetailView.xib

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

- - - - -
4f4d26db by Claudio Cambra at 2024-03-12T19:01:54+00:00
macosx: Fix trailing line at bottom-left of horizontal detail supplementary view

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

- - - - -
b40275da by Claudio Cambra at 2024-03-12T19:01:54+00:00
macosx: Adjust horizontal supplementary detail view sizing, add large size

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

- - - - -


10 changed files:

- modules/gui/macosx/UI/VLCLibraryCollectionViewAlbumSupplementaryDetailView.xib
- modules/gui/macosx/UI/VLCLibraryCollectionViewAudioGroupSupplementaryDetailView.xib
- modules/gui/macosx/UI/VLCLibraryCollectionViewMediaItemSupplementaryDetailView.xib
- modules/gui/macosx/library/VLCLibraryCollectionViewFlowLayout.m
- modules/gui/macosx/library/VLCLibraryCollectionViewSupplementaryDetailView.h
- modules/gui/macosx/library/VLCLibraryCollectionViewSupplementaryDetailView.m
- modules/gui/macosx/library/VLCLibraryUIUnits.h
- modules/gui/macosx/library/VLCLibraryUIUnits.m
- modules/gui/macosx/library/audio-library/VLCLibraryAudioDataSource.m
- modules/gui/macosx/library/home-library/VLCLibraryHomeViewVideoContainerViewDataSource.m


Changes:

=====================================
modules/gui/macosx/UI/VLCLibraryCollectionViewAlbumSupplementaryDetailView.xib
=====================================
@@ -232,6 +232,10 @@
                 <outlet property="albumTitleTextField" destination="nCe-dY-YMM" id="h3l-p0-w3e"/>
                 <outlet property="albumTracksTableView" destination="eEJ-WA-0aM" id="l8k-M9-a8e"/>
                 <outlet property="albumYearAndDurationTextField" destination="QuO-3G-BMT" id="y34-rD-uR"/>
+                <outlet property="contentViewBottomConstraint" destination="bUH-jE-TQQ" id="T0p-C1-8jm"/>
+                <outlet property="contentViewLeftConstraint" destination="D62-3E-aDO" id="T0p-C1-a8j"/>
+                <outlet property="contentViewRightConstraint" destination="cPm-6m-umY" id="T0p-C1-a7l"/>
+                <outlet property="contentViewTopConstraint" destination="Mr1-w0-CQK" id="T0p-C1-1nv"/>
                 <outlet property="internalScrollView" destination="9ZS-oy-iP9" id="afa-6P-b12"/>
                 <outlet property="playAlbumButton" destination="ntd-VT-2KS" id="ah5-as-eqw"/>
             </connections>


=====================================
modules/gui/macosx/UI/VLCLibraryCollectionViewAudioGroupSupplementaryDetailView.xib
=====================================
@@ -84,6 +84,10 @@
             <connections>
                 <outlet property="audioGroupAlbumsTableView" destination="eEJ-WA-0aM" id="l8k-M9-a8e"/>
                 <outlet property="audioGroupNameTextField" destination="nCe-dY-YMM" id="h3l-p0-w3e"/>
+                <outlet property="contentViewBottomConstraint" destination="eS3-iK-oGV" id="T0p-C1-8jm"/>
+                <outlet property="contentViewLeftConstraint" destination="L0r-A5-7Xq" id="T0p-C1-a8j"/>
+                <outlet property="contentViewRightConstraint" destination="8QK-wS-vnX" id="T0p-C1-a7l"/>
+                <outlet property="contentViewTopConstraint" destination="oWk-8b-f1e" id="T0p-C1-1nv"/>
                 <outlet property="internalScrollView" destination="9ZS-oy-iP9" id="afa-6P-b12"/>
                 <outlet property="tableClipView" destination="3V4-tX-owM" id="t4b-1e-Cl1"/>
                 <outlet property="tableScrollView" destination="9ZS-oy-iP9" id="tab-L3-Scr"/>


=====================================
modules/gui/macosx/UI/VLCLibraryCollectionViewMediaItemSupplementaryDetailView.xib
=====================================
@@ -236,6 +236,10 @@
                 <constraint firstAttribute="trailing" secondItem="FWp-yd-2Pm" secondAttribute="trailing" constant="10" id="cPm-6m-umY"/>
             </constraints>
             <connections>
+                <outlet property="contentViewBottomConstraint" destination="bUH-jE-TQQ" id="T0p-C1-8jm"/>
+                <outlet property="contentViewLeftConstraint" destination="D62-3E-aDO" id="T0p-C1-a8j"/>
+                <outlet property="contentViewRightConstraint" destination="cPm-6m-umY" id="T0p-C1-a7l"/>
+                <outlet property="contentViewTopConstraint" destination="Mr1-w0-CQK" id="T0p-C1-1nv"/>
                 <outlet property="mediaItemArtworkImageView" destination="xZd-Hk-h2M" id="J8l-V9-P06"/>
                 <outlet property="mediaItemFileNameTextField" destination="VxL-BW-3eh" id="fiL-3N-m3P"/>
                 <outlet property="mediaItemPathTextField" destination="7gY-3s-Kay" id="P4t-h1-m3P"/>


=====================================
modules/gui/macosx/library/VLCLibraryCollectionViewFlowLayout.m
=====================================
@@ -47,8 +47,10 @@ typedef NS_ENUM(NSUInteger, VLCDetailViewAnimationType)
 };
 
 typedef NS_ENUM(NSUInteger, VLCExpandAnimationType) {
-    VLCExpandAnimationTypeDefault = 0,
-    VLCExpandAnimationTypeLarge,
+    VLCExpandAnimationTypeVerticalMedium = 0,
+    VLCExpandAnimationTypeVerticalLarge,
+    VLCExpandAnimationTypeHorizontalMedium,
+    VLCExpandAnimationTypeHorizontalLarge,
 };
 
 static CVReturn detailViewAnimationCallback(CVDisplayLinkRef displayLink,
@@ -61,12 +63,13 @@ static CVReturn detailViewAnimationCallback(CVDisplayLinkRef displayLink,
 #pragma mark - VLCLibraryCollectionViewFlowLayout
 @interface VLCLibraryCollectionViewFlowLayout ()
 {
-    NSUInteger _lastHeightIndex;
     CVDisplayLinkRef _displayLinkRef;
 
-    NSArray *_defaultHeightAnimationSteps;
+    NSArray *_mediumHeightAnimationSteps;
     NSArray *_largeHeightAnimationSteps;
-
+    NSArray *_mediumWidthAnimationSteps;
+    NSArray *_largeWidthAnimationSteps;
+    
     VLCExpandAnimationType _animationType;
     CGFloat _prevProvidedAnimationStep;
 
@@ -86,10 +89,12 @@ static CVReturn detailViewAnimationCallback(CVDisplayLinkRef displayLink,
 {
     self = [super init];
     if (self) {
-        _defaultHeightAnimationSteps = [NSArray arrayWithArray:[self generateAnimationStepsForExpandedViewHeight:VLCLibraryUIUnits.mediumDetailSupplementaryViewCollectionViewHeight]];
-        _largeHeightAnimationSteps = [NSArray arrayWithArray:[self generateAnimationStepsForExpandedViewHeight:VLCLibraryUIUnits.largeDetailSupplementaryViewCollectionViewHeight]];
-
-        _animationType = VLCExpandAnimationTypeDefault;
+        _mediumHeightAnimationSteps = [NSArray arrayWithArray:[self generateAnimationStepsForExpandedViewDimension:VLCLibraryUIUnits.mediumDetailSupplementaryViewCollectionViewHeight]];
+        _largeHeightAnimationSteps = [NSArray arrayWithArray:[self generateAnimationStepsForExpandedViewDimension:VLCLibraryUIUnits.largeDetailSupplementaryViewCollectionViewHeight]];
+        _mediumWidthAnimationSteps = [NSArray arrayWithArray:[self generateAnimationStepsForExpandedViewDimension:VLCLibraryUIUnits.mediumDetailSupplementaryViewCollectionViewWidth]];
+        _largeWidthAnimationSteps = [NSArray arrayWithArray:[self generateAnimationStepsForExpandedViewDimension:VLCLibraryUIUnits.largeDetailSupplementaryViewCollectionViewWidth]];
+        
+        _animationType = VLCExpandAnimationTypeVerticalMedium;
         _prevProvidedAnimationStep = 0;
 
         _invalidateAll = NO;
@@ -100,7 +105,7 @@ static CVReturn detailViewAnimationCallback(CVDisplayLinkRef displayLink,
     return self;
 }
 
-- (NSArray *)generateAnimationStepsForExpandedViewHeight:(NSInteger)height
+- (NSArray *)generateAnimationStepsForExpandedViewDimension:(NSInteger)dimension
 {
     NSMutableArray *generatedAnimationSteps = [NSMutableArray arrayWithCapacity:kAnimationSteps];
 
@@ -108,7 +113,7 @@ static CVReturn detailViewAnimationCallback(CVDisplayLinkRef displayLink,
     for(int i = 0; i < kAnimationSteps; ++i) {
         CGFloat progress = (CGFloat)i  / (CGFloat)kAnimationSteps;
         progress -= 1;
-        generatedAnimationSteps[i] = @(height * (progress * progress * progress + 1) + kDetailViewCollapsedHeight);
+        generatedAnimationSteps[i] = @(dimension * (progress * progress * progress + 1) + kDetailViewCollapsedHeight);
     }
 
     return [generatedAnimationSteps copy];
@@ -121,12 +126,18 @@ static CVReturn detailViewAnimationCallback(CVDisplayLinkRef displayLink,
     }
 
     switch(_animationType) {
-        case VLCExpandAnimationTypeLarge:
+        case VLCExpandAnimationTypeHorizontalMedium:
+            _prevProvidedAnimationStep = [_mediumWidthAnimationSteps[_animationIndex] floatValue];
+            break;
+        case VLCExpandAnimationTypeHorizontalLarge:
+            _prevProvidedAnimationStep = [_largeWidthAnimationSteps[_animationIndex] floatValue];
+            break;
+        case VLCExpandAnimationTypeVerticalLarge:
             _prevProvidedAnimationStep = [_largeHeightAnimationSteps[_animationIndex] floatValue];
             break;
-        case VLCExpandAnimationTypeDefault:
+        case VLCExpandAnimationTypeVerticalMedium:
         default:
-            _prevProvidedAnimationStep = [_defaultHeightAnimationSteps[_animationIndex] floatValue];
+            _prevProvidedAnimationStep = [_mediumHeightAnimationSteps[_animationIndex] floatValue];
             break;
     }
 
@@ -187,7 +198,11 @@ static CVReturn detailViewAnimationCallback(CVDisplayLinkRef displayLink,
         return contentSize;
     }
 
-    contentSize.height += [self currentAnimationStep];
+    if (self.scrollDirection == NSCollectionViewScrollDirectionVertical) {
+        contentSize.height += [self currentAnimationStep];
+    } else if (self.scrollDirection == NSCollectionViewScrollDirectionHorizontal) {
+        contentSize.width += [self currentAnimationStep];
+    }
     return contentSize;
 }
 
@@ -283,13 +298,13 @@ static CVReturn detailViewAnimationCallback(CVDisplayLinkRef displayLink,
     if ([elementKind isEqualToString:VLCLibraryCollectionViewAudioGroupSupplementaryDetailViewKind]) {
 
         isLibrarySupplementaryView = YES;
-        _animationType = VLCExpandAnimationTypeLarge;
+        _animationType = self.scrollDirection == NSCollectionViewScrollDirectionVertical ? VLCExpandAnimationTypeVerticalLarge : VLCExpandAnimationTypeHorizontalLarge;
 
     } else if ([elementKind isEqualToString:VLCLibraryCollectionViewAlbumSupplementaryDetailViewKind] ||
                [elementKind isEqualToString:VLCLibraryCollectionViewMediaItemSupplementaryDetailViewKind]) {
 
         isLibrarySupplementaryView = YES;
-        _animationType = VLCExpandAnimationTypeDefault;
+        _animationType = self.scrollDirection == NSCollectionViewScrollDirectionVertical ? VLCExpandAnimationTypeVerticalMedium : VLCExpandAnimationTypeHorizontalMedium;
     }
 
     if(isLibrarySupplementaryView) {
@@ -299,11 +314,24 @@ static CVReturn detailViewAnimationCallback(CVDisplayLinkRef displayLink,
                   @"Failed to create NSCollectionViewLayoutAttributes for view of kind %@.",
                   elementKind);
 
-        float selectedItemFrameMaxY = _selectedIndexPath == nil ? 0 : NSMaxY([[self layoutAttributesForItemAtIndexPath:_selectedIndexPath] frame]);
-        detailViewAttributes.frame = NSMakeRect(NSMinX(self.collectionView.frame) + self.minimumInteritemSpacing,
-                                                selectedItemFrameMaxY + VLCLibraryUIUnits.mediumSpacing,
-                                                self.collectionViewContentSize.width - (self.minimumInteritemSpacing * 2),
-                                                [self currentAnimationStep]);
+        const NSRect selectedItemFrame = [[self layoutAttributesForItemAtIndexPath:_selectedIndexPath] frame];
+
+        if (self.scrollDirection == NSCollectionViewScrollDirectionVertical) {
+            const float selectedItemFrameMaxY = _selectedIndexPath == nil ? 0 : NSMaxY(selectedItemFrame);
+            detailViewAttributes.frame = NSMakeRect(NSMinX(self.collectionView.frame) + self.minimumInteritemSpacing,
+                                                    selectedItemFrameMaxY + VLCLibraryUIUnits.mediumSpacing,
+                                                    self.collectionViewContentSize.width - (self.minimumInteritemSpacing * 2),
+                                                    [self currentAnimationStep]);
+
+        } else if (self.scrollDirection == NSCollectionViewScrollDirectionHorizontal) {
+            const float selectedItemFrameMinY = _selectedIndexPath == nil ? 0 : NSMinY(selectedItemFrame);
+            const float selectedItemFrameMaxX = _selectedIndexPath == nil ? 0 : NSMaxX(selectedItemFrame);
+            const float selectedItemFrameHeight = _selectedIndexPath == nil ? 0 : selectedItemFrame.size.height;
+            detailViewAttributes.frame = NSMakeRect(selectedItemFrameMaxX + self.minimumInteritemSpacing,
+                                                    selectedItemFrameMinY,
+                                                    [self currentAnimationStep],
+                                                    selectedItemFrameHeight);
+        }
 
         return detailViewAttributes;
     }
@@ -345,8 +373,16 @@ static CVReturn detailViewAnimationCallback(CVDisplayLinkRef displayLink,
 
         NSRect selectedItemFrame = selectedItemLayoutAttributes.frame;
 
-        if (NSMinY(attributesFrame) > (NSMaxY(selectedItemFrame))) {
+        if (self.scrollDirection == NSCollectionViewScrollDirectionVertical &&
+            NSMinY(attributesFrame) > (NSMaxY(selectedItemFrame))) {
+
+            attributesFrame.origin.y += [self currentAnimationStep] + VLCLibraryUIUnits.mediumSpacing;
+
+        } else if (self.scrollDirection == NSCollectionViewScrollDirectionHorizontal &&
+                   NSMinX(attributesFrame) > (NSMaxX(selectedItemFrame))) {
+
             attributesFrame.origin.y += [self currentAnimationStep] + VLCLibraryUIUnits.mediumSpacing;
+            attributesFrame.origin.x += [self currentAnimationStep] + VLCLibraryUIUnits.mediumSpacing;
         }
     }
 
@@ -359,11 +395,9 @@ static CVReturn detailViewAnimationCallback(CVDisplayLinkRef displayLink,
     if (type == VLCDetailViewAnimationTypeExpand) {
         _animationIsCollapse = NO;
         _animationIndex = kWrapAroundValue;
-        _lastHeightIndex = kAnimationSteps - 1;
     } else {
         _animationIsCollapse = YES;
         _animationIndex = kAnimationSteps;
-        _lastHeightIndex = 0;
     }
 
     _detailViewIsAnimating = YES;


=====================================
modules/gui/macosx/library/VLCLibraryCollectionViewSupplementaryDetailView.h
=====================================
@@ -38,6 +38,12 @@ NS_ASSUME_NONNULL_BEGIN
 @property (readwrite, assign) NSScrollView *parentScrollView;
 @property (readwrite, assign) VLCSubScrollView *internalScrollView;
 
+ at property (readwrite, assign, nonatomic) NSCollectionViewScrollDirection layoutScrollDirection;
+ at property (readwrite, weak) IBOutlet NSLayoutConstraint *contentViewTopConstraint;
+ at property (readwrite, weak) IBOutlet NSLayoutConstraint *contentViewBottomConstraint;
+ at property (readwrite, weak) IBOutlet NSLayoutConstraint *contentViewLeftConstraint;
+ at property (readwrite, weak) IBOutlet NSLayoutConstraint *contentViewRightConstraint;
+
 - (void)updateRepresentation;
 
 @end


=====================================
modules/gui/macosx/library/VLCLibraryCollectionViewSupplementaryDetailView.m
=====================================
@@ -21,6 +21,8 @@
  *****************************************************************************/
 
 #import "VLCLibraryCollectionViewSupplementaryDetailView.h"
+
+#import "library/VLCLibraryUIUnits.h"
 #import "views/VLCSubScrollView.h"
 
 static const CGFloat kArrowHeight = 20.;
@@ -47,12 +49,21 @@ static const CGFloat kBackgroundCornerRadius = 10.;
         _arrowSize = NSMakeSize(kArrowWidth, kArrowHeight);
     }
 
-    const NSRect selectedItemFrame = _selectedItem.view.frame;
+    if (_layoutScrollDirection == NSCollectionViewScrollDirectionVertical) {
+        [self drawBackgroundWithTopArrow];
+    } else if (_layoutScrollDirection == NSCollectionViewScrollDirectionHorizontal) {
+        [self drawBackgroundWithLeftArrow];
+    }
+}
 
+- (void)drawBackgroundWithTopArrow
+{
+    const NSRect selectedItemFrame = _selectedItem.view.frame;
     const NSPoint itemCenterPoint = NSMakePoint(NSMinX(selectedItemFrame) + NSWidth(selectedItemFrame) / 2,
                                                 NSMinY(selectedItemFrame) + NSHeight(selectedItemFrame) / 2);
     const NSRect backgroundRect = NSMakeRect(NSMinX(self.bounds),
-                                             NSMinY(self.bounds), NSWidth(self.bounds) + 2,
+                                             NSMinY(self.bounds),
+                                             NSWidth(self.bounds) + 2,
                                              NSHeight(self.bounds) - _arrowSize.height);
     const CGFloat backgroundTop = NSMaxY(backgroundRect);
     const CGFloat backgroundLeft = NSMinX(backgroundRect);
@@ -76,7 +87,45 @@ static const CGFloat kBackgroundCornerRadius = 10.;
                    controlPoint2:NSMakePoint(itemCenterPoint.x + _arrowSize.width / 6, backgroundTop)];
 
     [backgroundPath closePath];
+    [self colorBackground:backgroundPath];
+}
+
+- (void)drawBackgroundWithLeftArrow
+{
+    const NSRect selectedItemFrame = _selectedItem.view.frame;
+    const NSPoint itemCenterPoint = NSMakePoint(NSMinX(selectedItemFrame) + NSWidth(selectedItemFrame) / 2,
+                                                NSMinY(selectedItemFrame) + NSHeight(selectedItemFrame) / 2);
+    const NSRect backgroundRect = NSMakeRect(NSMinX(self.bounds) + _arrowSize.height,
+                                             NSMinY(self.bounds),
+                                             NSWidth(self.bounds) - _arrowSize.height,
+                                             NSHeight(self.bounds));
+    const CGFloat backgroundBottom = NSMinY(backgroundRect);
+    const CGFloat backgroundLeft = NSMinX(backgroundRect);
+
+    const NSPoint arrowBottomPoint = NSMakePoint(backgroundLeft, itemCenterPoint.y + _arrowSize.width / 2);
+    const NSPoint arrowLeftMostPoint = NSMakePoint(backgroundLeft - kArrowHeight + 1, itemCenterPoint.y);
+    const NSPoint arrowTopPoint = NSMakePoint(backgroundLeft, itemCenterPoint.y - _arrowSize.width / 2);
+
+    const NSPoint bottomLeftCorner = NSMakePoint(backgroundLeft, backgroundBottom);
+    const NSPoint bottomLeftCornerAfterCurve = NSMakePoint(backgroundLeft, backgroundBottom + kBackgroundCornerRadius);
+
+    const NSBezierPath *backgroundPath = [NSBezierPath bezierPathWithRoundedRect:backgroundRect xRadius:kBackgroundCornerRadius yRadius:kBackgroundCornerRadius];
+
+    [backgroundPath moveToPoint:bottomLeftCornerAfterCurve];
+    [backgroundPath lineToPoint:arrowBottomPoint];
+    [backgroundPath curveToPoint:arrowLeftMostPoint
+                   controlPoint1:NSMakePoint(backgroundLeft, itemCenterPoint.y + _arrowSize.width / 6)
+                   controlPoint2:NSMakePoint(backgroundLeft - _arrowSize.height, itemCenterPoint.y + kArrowTipRadius)];
+    [backgroundPath curveToPoint:arrowTopPoint
+                   controlPoint1:NSMakePoint(backgroundLeft - _arrowSize.height, itemCenterPoint.y - kArrowTipRadius)
+                   controlPoint2:NSMakePoint(backgroundLeft, itemCenterPoint.y - _arrowSize.width / 6)];
 
+    [backgroundPath closePath];
+    [self colorBackground:backgroundPath];
+}
+
+- (void)colorBackground:(const NSBezierPath*)backgroundPath
+{
     //[[NSColor.gridColor colorWithAlphaComponent:self.container.alphaValue] setFill];
     [NSColor.gridColor setFill];
     [backgroundPath fill];
@@ -105,10 +154,31 @@ static const CGFloat kBackgroundCornerRadius = 10.;
     _internalScrollView.parentScrollView = parentScrollView;
 }
 
-- (void)setRepresentedItem:(VLCLibraryRepresentedItem *)representedItem
+- (BOOL)validConstraintProps
 {
-    _representedItem = representedItem;
-    [self updateRepresentation];
+    return _contentViewTopConstraint != nil &&
+           _contentViewLeftConstraint != nil &&
+           _contentViewRightConstraint != nil &&
+           _contentViewBottomConstraint != nil;
+}
+
+- (void)setLayoutScrollDirection:(NSCollectionViewScrollDirection)layoutScrollDirection
+{
+    _layoutScrollDirection = layoutScrollDirection;
+
+    if (_layoutScrollDirection == NSCollectionViewScrollDirectionVertical && [self validConstraintProps]) {
+        _contentViewTopConstraint.constant = kArrowHeight + [VLCLibraryUIUnits mediumSpacing];
+        _contentViewBottomConstraint.constant = [VLCLibraryUIUnits mediumSpacing];
+        _contentViewLeftConstraint.constant = [VLCLibraryUIUnits mediumSpacing];
+        _contentViewRightConstraint.constant = [VLCLibraryUIUnits mediumSpacing];
+    } else if (_layoutScrollDirection == NSCollectionViewScrollDirectionHorizontal  && [self validConstraintProps]) {
+        _contentViewTopConstraint.constant = [VLCLibraryUIUnits mediumSpacing];
+        _contentViewBottomConstraint.constant = [VLCLibraryUIUnits mediumSpacing];
+        _contentViewLeftConstraint.constant = kArrowHeight + [VLCLibraryUIUnits mediumSpacing];
+        _contentViewRightConstraint.constant = [VLCLibraryUIUnits mediumSpacing];
+    }
+
+    self.needsDisplay = YES;
 }
 
 - (void)updateRepresentation
@@ -117,4 +187,10 @@ static const CGFloat kBackgroundCornerRadius = 10.;
     return;
 }
 
+- (void)setRepresentedItem:(VLCLibraryRepresentedItem *)representedItem
+{
+    _representedItem = representedItem;
+    [self updateRepresentation];
+}
+
 @end


=====================================
modules/gui/macosx/library/VLCLibraryUIUnits.h
=====================================
@@ -45,7 +45,9 @@ NS_ASSUME_NONNULL_BEGIN
 @property (class, readonly) const CGFloat mediumTableViewRowHeight;
 @property (class, readonly) const CGFloat smallTableViewRowHeight;
 
+ at property (class, readonly) const CGFloat mediumDetailSupplementaryViewCollectionViewWidth;
 @property (class, readonly) const CGFloat mediumDetailSupplementaryViewCollectionViewHeight;
+ at property (class, readonly) const CGFloat largeDetailSupplementaryViewCollectionViewWidth;
 @property (class, readonly) const CGFloat largeDetailSupplementaryViewCollectionViewHeight;
 
 @property (class, readonly) const CGFloat dynamicCollectionViewItemMinimumWidth;


=====================================
modules/gui/macosx/library/VLCLibraryUIUnits.m
=====================================
@@ -71,11 +71,21 @@
     return 25;
 }
 
++ (const CGFloat)mediumDetailSupplementaryViewCollectionViewWidth
+{
+    return 600;
+}
+
 + (const CGFloat)mediumDetailSupplementaryViewCollectionViewHeight
 {
     return 300;
 }
 
++ (const CGFloat)largeDetailSupplementaryViewCollectionViewWidth
+{
+    return 800;
+}
+
 + (const CGFloat)largeDetailSupplementaryViewCollectionViewHeight
 {
     return 500;


=====================================
modules/gui/macosx/library/audio-library/VLCLibraryAudioDataSource.m
=====================================
@@ -811,6 +811,11 @@ viewForSupplementaryElementOfKind:(NSCollectionViewSupplementaryElementKind)kind
         albumSupplementaryDetailView.parentScrollView = VLCMain.sharedInstance.libraryWindow.audioCollectionViewScrollView;
         albumSupplementaryDetailView.internalScrollView.scrollParentY = YES;
 
+        VLCLibraryCollectionViewFlowLayout *flowLayout = (VLCLibraryCollectionViewFlowLayout*)collectionView.collectionViewLayout;
+        if (flowLayout != nil) {
+            albumSupplementaryDetailView.layoutScrollDirection = flowLayout.scrollDirection;
+        }
+
         return albumSupplementaryDetailView;
 
     } else if ([kind isEqualToString:VLCLibraryCollectionViewAudioGroupSupplementaryDetailViewKind]) {
@@ -825,6 +830,11 @@ viewForSupplementaryElementOfKind:(NSCollectionViewSupplementaryElementKind)kind
         audioGroupSupplementaryDetailView.parentScrollView = VLCMain.sharedInstance.libraryWindow.audioCollectionViewScrollView;
         audioGroupSupplementaryDetailView.internalScrollView.scrollParentY = YES;
 
+        VLCLibraryCollectionViewFlowLayout *flowLayout = (VLCLibraryCollectionViewFlowLayout*)collectionView.collectionViewLayout;
+        if (flowLayout != nil) {
+            audioGroupSupplementaryDetailView.layoutScrollDirection = flowLayout.scrollDirection;
+        }
+
         return audioGroupSupplementaryDetailView;
 
     } else if ([kind isEqualToString:VLCLibraryCollectionViewMediaItemSupplementaryDetailViewKind]) {
@@ -836,6 +846,11 @@ viewForSupplementaryElementOfKind:(NSCollectionViewSupplementaryElementKind)kind
         mediaItemSupplementaryDetailView.representedItem = representedItem;
         mediaItemSupplementaryDetailView.selectedItem = [collectionView itemAtIndex:indexPath.item];
 
+        VLCLibraryCollectionViewFlowLayout *flowLayout = (VLCLibraryCollectionViewFlowLayout*)collectionView.collectionViewLayout;
+        if (flowLayout != nil) {
+            mediaItemSupplementaryDetailView.layoutScrollDirection = flowLayout.scrollDirection;
+        }
+
         return mediaItemSupplementaryDetailView;
     }
 


=====================================
modules/gui/macosx/library/home-library/VLCLibraryHomeViewVideoContainerViewDataSource.m
=====================================
@@ -326,6 +326,12 @@ viewForSupplementaryElementOfKind:(NSCollectionViewSupplementaryElementKind)kind
 
         mediaItemSupplementaryDetailView.representedItem = representedItem;
         mediaItemSupplementaryDetailView.selectedItem = [collectionView itemAtIndexPath:indexPath];
+
+        VLCLibraryCollectionViewFlowLayout *flowLayout = (VLCLibraryCollectionViewFlowLayout*)collectionView.collectionViewLayout;
+        if (flowLayout != nil) {
+            mediaItemSupplementaryDetailView.layoutScrollDirection = flowLayout.scrollDirection;
+        }
+        
         return mediaItemSupplementaryDetailView;
     }
 



View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/ee6ccb11962653f7aab525a18b10be6b80cf5d17...b40275da9c70f228f3742d8e5b07e613121dcea6

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