Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • videolan/vlc
  • chouquette/vlc
  • bakiewicz.marek122/vlc
  • devnexen/vlc
  • rohanrajpal/vlc
  • blurrrb/vlc
  • gsoc/gsoc2019/darkapex/vlc
  • b1ue/vlc
  • fkuehne/vlc
  • magsoft/vlc
  • chub/vlc
  • cramiro9/vlc
  • robUx4/vlc
  • rom1v/vlc
  • akshayaky/vlc
  • tmk907/vlc
  • akymaster/vlc
  • govind.sharma/vlc
  • psilokos/vlc
  • xjbeta/vlc
  • jahan/vlc
  • 1480c1/vlc
  • amanchande/vlc
  • aaqib/vlc
  • rist/vlc
  • apol/vlc
  • mindfreeze/vlc
  • alexandre-janniaux/vlc
  • sandsmark/vlc
  • jagannatharjun/vlc
  • gsoc/gsoc2020/matiaslgonzalez/vlc
  • gsoc/gsoc2020/jagannatharjun/vlc
  • mstorsjo/vlc
  • gsoc/gsoc2020/vedenta/vlc
  • gsoc/gsoc2020/arnav-ishaan/vlc
  • gsoc/gsoc2020/andreduong/vlc
  • fuzun/vlc
  • gsoc/gsoc2020/vatsin/vlc
  • gsoc/gsoc2020/sagid/vlc
  • yaron/vlc
  • Phoenix/vlc
  • Garf/vlc
  • ePiratWorkarounds/vlc
  • tguillem/vlc
  • jnqnfe/vlc
  • mdc/vlc
  • Vedaa/vlc
  • rasa/vlc
  • quink/vlc
  • yealo/vlc
  • aleksey_ak/vlc
  • ePirat/vlc
  • ilya.yanok/vlc
  • asenat/vlc
  • m/vlc
  • bunjee/vlc
  • BLumia/vlc
  • sagudev/vlc
  • hamedmonji30/vlc
  • nullgemm/vlc
  • DivyamAhuja/vlc
  • thesamesam/vlc
  • dag7/vlc
  • snehil101/vlc
  • haasn/vlc
  • jbk/vlc
  • ValZapod/vlc
  • mfkl/vlc
  • WangChuan/vlc
  • core1024/vlc
  • GhostVaibhav/vlc
  • dfuhrmann/vlc
  • davide.prade/vlc
  • tmatth/vlc
  • Courmisch/vlc
  • zouya/vlc
  • hpi/vlc
  • EwoutH/vlc
  • aleung27/vlc
  • hengwu0/vlc
  • saladin/vlc
  • ashuio/vlc
  • richselwood/vlc
  • verma16Ayush/vlc
  • chemicalflash/vlc
  • PoignardAzur/vlc
  • huangjieNT/vlc
  • Blake-Haydon/vlc
  • AnuthaDev/vlc
  • gsoc/gsoc2021/mpd/vlc
  • nicolas_lequec/vlc
  • sambassaly/vlc
  • thresh/vlc
  • bonniegong/vlc
  • myaashish/vlc
  • stavros.vagionitis/vlc
  • ileoo/vlc
  • louis-santucci/vlc
  • cchristiansen/vlc
  • sabyasachi07/vlc
  • AbduAmeen/vlc
  • ashishb0410/vlc
  • urbanhusky/vlc
  • davidepietrasanta/vlc
  • riksleutelstad/vlc
  • jeremyVignelles/vlc
  • komh/vlc
  • iamjithinjohn/vlc
  • JohannesKauffmann/vlc2
  • kunglao/vlc
  • natzberg/vlc
  • jill/vlc
  • cwendling/vlc
  • adufou/vlc
  • ErwanAirone/vlc
  • HasinduDilshan10/vlc
  • vagrantc/vlc
  • rafiv/macos-bigsur-icon
  • Aymeriic/vlc
  • saranshg20/vlc
  • metzlove24/vlc
  • linkfanel/vlc
  • Ds886/vlc
  • metehan-arslan/vlc
  • Skantes/vlc
  • kgsandundananjaya96/vlc
  • mitchcapper/vlc
  • advaitgupta/vlc
  • StefanBruens/vlc
  • ratajs/vlc
  • T.M.F.B.3761/vlc
  • m222059/vlc
  • casemerrick/vlc
  • joshuaword2alt/vlc
  • sjwaddy/vlc
  • dima/vlc
  • Ybalrid/vlc
  • umxprime/vlc
  • eschmidt/vlc
  • vannieuwenhuysenmichelle/vlc
  • badcf00d/vlc
  • wesinator/vlc
  • louis/vlc
  • xqq/vlc
  • EmperorYP7/vlc
  • NicoLiam/vlc
  • loveleen/vlc
  • rofferom/vlc
  • rbultje/vlc
  • TheUnamed/vlc
  • pratiksharma341/vlc
  • Saurab17/vlc
  • purist.coder/vlc
  • Shuicheng/vlc
  • mdrrubel292/vlc
  • silverbleu00/vlc
  • metif12/vlc
  • asher-m/vlc
  • jeffk/vlc
  • Brandonbr1/vlc
  • beautyyuyanli/vlc
  • rego21/vlc
  • muyangren907/vlc
  • collectionbylawrencejason/vlc
  • evelez/vlc
  • GSMgeeth/vlc
  • Oneric/vlc
  • TJ5/vlc
  • XuanTung95/vlc
  • darrenjenny21/vlc
  • Trenly/vlc
  • RockyTDR/vlc
  • mjakubowski/vlc
  • caprica/vlc
  • ForteFrankie/vlc
  • seannamiller19/vlc
  • junlon2006/vlc
  • kiwiren6666/vlc
  • iuseiphonexs/vlc
  • fenngtun/vlc
  • Rajdutt999/vlc
  • typx/vlc
  • leon.vitanos/vlc
  • robertogarci0938/vlc
  • gsoc/gsoc2022/luc65r/vlc-mpd
  • skeller/vlc
  • MCJack123/vlc
  • luc65r/vlc-mpd
  • popov895/vlc
  • claucambra/vlc
  • brad/vlc
  • matthewmurua88/vlc
  • Tomas8874/vlc
  • philenotfound/vlc
  • makita-do3/vlc
  • LZXCorp/vlc
  • mar0x/vlc
  • senojetkennedy0102/vlc
  • shaneb243/vlc
  • ahmadbader/vlc
  • rajduttcse26/vlc-audio-filters
  • Juniorzito8415/vlc
  • achernyakov/vlc
  • lucasjetgroup/vlc
  • pupdoggy666/vlc
  • gmde9363/vlc
  • alexnwayne/vlc
  • bahareebrahimi781/vlc
  • hamad633666/vlc
  • umghof3112/vlc
  • joe0199771874/vlc
  • Octocats66666666/vlc
  • jjm_223/vlc
  • btech10110.19/vlc
  • sunnykfc028/vlc-audio-filters
  • loic/vlc
  • nguyenminhducmx1/vlc
  • JanekKrueger/vlc
  • bstubbington2/vlc
  • rcombs/vlc
  • Ordissimo/vlc
  • king7532/vlc
  • noobsauce101/vlc
  • schong0525/vlc
  • myQwil/vlc
  • apisbg91/vlc
  • geeboy0101017/vlc
  • kim.faughey/vlc
  • nurupo/vlc
  • yyusea/vlc
  • 0711235879.khco/vlc
  • ialo/vlc
  • iloveyeye2/vlc
  • gdtdftdqtd/vlc
  • leandroconsiglio/vlc
  • AndyHTML2012/vlc
  • ncz/vlc
  • lucenticus/vlc
  • knr1931/vlc
  • kjoonlee/vlc
  • chandrakant100/vlc-qt
  • johge42/vlc
  • polter/vlc
  • hexchain/vlc
  • Tushwrld/vlc
  • mztea928/vlc
  • jbelloncastro/vlc
  • alvinhochun/vlc
  • ghostpiratecrow/vlc
  • ujjwaltwitx/vlc
  • alexsonarin06/vlc
  • adrianbon76/vlc
  • altsod/vlc
  • damien.lucas44/vlc
  • dmytrivtaisa/vlc
  • utk202/vlc
  • aaxhrj/vlc
  • thomas.hermes/vlc
  • structurenewworldorder/vlc
  • slomo/vlc
  • wantlamy/vlc
  • musc.o3cminc/vlc
  • thebarshablog/vlc
  • kerrick/vlc
  • kratos142518/vlc
  • leogps/vlc
  • vacantron/vlc
  • luna_koly/vlc
  • Ratio2/vlc
  • anuoshemohammad/vlc
  • apsun/vlc
  • aaa1115910/vlc
  • alimotmoyo/vlc
  • Ambossmann/vlc
  • Sam-LearnsToCode/vlc
  • Chilledheart/vlc
  • Labnann/vlc
  • ktcoooot1/vlc
  • mohit-marathe/vlc
  • johnddx/vlc
  • manstabuk/vlc
  • Omar-ahmed314/vlc
  • vineethkm/vlc
  • 9Enemi86/vlc
  • radoslav.m.panteleev/vlc
  • ashishami2002/vlc
  • Corbax/vlc
  • firnasahmed/vlc
  • pelayarmalam4/vlc
  • c0ff330k/vlc
  • shikhindahikar/vlc
  • l342723951/vlc
  • christianschwandner/vlc
  • douniwan5788/vlc
  • 7damian7/vlc
  • ferdnyc/vlc
  • f.ales1/vlc
  • pandagby/vlc
  • BaaBaa/vlc
  • jewe37/vlc
  • w00drow/vlc
  • russelltg/vlc
  • ironicallygod/vlc
  • soumyaDghosh/vlc
  • linzihao1999/vlc
  • deyayush6/vlc
  • mibi88/vlc
  • newabdallah10/vlc
  • jhorbincolombia/vlc
  • rimvihaqueshupto/vlc
  • andrewkhon98/vlc
  • fab78/vlc
  • lapaz17/vlc
  • amanna13/vlc
  • mdakram28/vlc
  • 07jw1980/vlc
  • sohamgupta/vlc
  • Eson-Jia1/vlc
  • Sumou/vlc
  • vikram-kangotra/vlc
  • chalice191/vlc
  • olivercalder/vlc
  • aaasg4001/vlc
  • zipdox/vlc
  • kwizart/vlc
  • Dragon-S/vlc
  • jdemeule/vlc
  • gabriel_lt/vlc
  • locutusofborg/vlc
  • sammirata/vlc-librist
  • another/vlc
  • Benjamin_Loison/vlc
  • ahmedmoselhi/vlc
  • petergaal/vlc
  • huynhsontung/vlc
  • dariusmihut/vlc
  • tvermaashutosh/vlc
  • buti/vlc
  • Niram7777/vlc
  • rohan-here/vlc
  • balaji-sivasakthi/vlc
  • rlindner81/vlc
  • Kakadus/vlc
  • djain/vlc
  • ABBurmeister/vlc
  • craighuggins/vlc
  • orbea/vlc
  • maxos/vlc
  • aakarshmj/vlc
  • kblaschke/vlc
  • ankitm/vlc
  • advait-0/vlc
  • mohak2003/vlc
  • yselkowitz/vlc
  • AZM999/vlc-azm
  • andrey.turkin/vlc
  • Disha-Baghel/vlc
  • nowrep/vlc
  • Apeng/vlc
  • Choucroute_melba/vlc
  • autra/vlc
  • eclipseo/vlc
  • fhuber/vlc
  • olafhering/vlc
  • sdasda7777/vlc
  • 1div0/vlc
  • skosnits/vlc-extended-playlist-support
  • dnicolson/vlc
  • Timshel/vlc
  • octopols/vlc
  • MangalK/vlc
  • nima64/vlc
  • misawai/vlc
  • Alexander-Wilms/vlc
  • Maxime2/vlc-fork-for-visualizer
  • ww/vlc
  • jeske/vlc
  • sgross-emlix/vlc
  • morenonatural/vlc
  • freakingLovesVLC/vlc
  • borisgolovnev/vlc
  • mpromonet/vlc
  • diogo.simao-marques/vlc
  • masstock/vlc
  • pratikpatel8982/vlc
  • hugok79/vlc
  • longervision/vlc
  • abhiudaysurya/vlc
  • rishabhgarg/vlc
  • tumic/vlc
  • cart/vlc
  • shubham442/vlc
  • Aditya692005/vlc
  • sammirata/vlc4
  • syrykh/vlc
  • Vvorcun/macos-new-icon
  • AyaanshC/vlc
  • nasso/vlc
  • Quark/vlc
  • sebastinas/vlc
  • rhstone/vlc
  • talregev/vlc
  • Managor/vlc
403 results
Show changes
Commits on Source (13)
Showing
with 191 additions and 30 deletions
......@@ -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>
......
......@@ -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"/>
......
......@@ -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"/>
......
......@@ -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;
......
......@@ -38,6 +38,12 @@ NS_ASSUME_NONNULL_BEGIN
@property (readwrite, assign) NSScrollView *parentScrollView;
@property (readwrite, assign) VLCSubScrollView *internalScrollView;
@property (readwrite, assign, nonatomic) NSCollectionViewScrollDirection layoutScrollDirection;
@property (readwrite, weak) IBOutlet NSLayoutConstraint *contentViewTopConstraint;
@property (readwrite, weak) IBOutlet NSLayoutConstraint *contentViewBottomConstraint;
@property (readwrite, weak) IBOutlet NSLayoutConstraint *contentViewLeftConstraint;
@property (readwrite, weak) IBOutlet NSLayoutConstraint *contentViewRightConstraint;
- (void)updateRepresentation;
@end
......
......@@ -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
......@@ -45,7 +45,9 @@ NS_ASSUME_NONNULL_BEGIN
@property (class, readonly) const CGFloat mediumTableViewRowHeight;
@property (class, readonly) const CGFloat smallTableViewRowHeight;
@property (class, readonly) const CGFloat mediumDetailSupplementaryViewCollectionViewWidth;
@property (class, readonly) const CGFloat mediumDetailSupplementaryViewCollectionViewHeight;
@property (class, readonly) const CGFloat largeDetailSupplementaryViewCollectionViewWidth;
@property (class, readonly) const CGFloat largeDetailSupplementaryViewCollectionViewHeight;
@property (class, readonly) const CGFloat dynamicCollectionViewItemMinimumWidth;
......
......@@ -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;
......
......@@ -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;
}
......
......@@ -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;
}
......