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 (32)
Showing
with 368 additions and 109 deletions
......@@ -92,6 +92,7 @@
536283F9291146BC00640C15 /* VLCLibraryCollectionViewFlowLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 536283EE291146BC00640C15 /* VLCLibraryCollectionViewFlowLayout.m */; };
53628402291147C500640C15 /* VLCBasicView.m in Sources */ = {isa = PBXBuildFile; fileRef = 536283FF291147C500640C15 /* VLCBasicView.m */; };
53628403291147C500640C15 /* VLCSubScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 53628400291147C500640C15 /* VLCSubScrollView.m */; };
536BFD1929B181E100BD0776 /* VLCMainVideoViewOverlayView.m in Sources */ = {isa = PBXBuildFile; fileRef = 536BFD1829B181E100BD0776 /* VLCMainVideoViewOverlayView.m */; };
536EFBF5295BCB8300F4CB13 /* VLCLibraryUIUnits.m in Sources */ = {isa = PBXBuildFile; fileRef = 536EFBF4295BCB8300F4CB13 /* VLCLibraryUIUnits.m */; };
536EFC39295E521600F4CB13 /* VLCLibraryVideoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 536EFC38295E521600F4CB13 /* VLCLibraryVideoViewController.m */; };
538A7EDA29A63EE40068AD4F /* VLCFullVideoViewWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 538A7ED929A63EE40068AD4F /* VLCFullVideoViewWindow.m */; };
......@@ -281,6 +282,8 @@
536283FF291147C500640C15 /* VLCBasicView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCBasicView.m; sourceTree = "<group>"; };
53628400291147C500640C15 /* VLCSubScrollView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCSubScrollView.m; sourceTree = "<group>"; };
53628401291147C500640C15 /* VLCSubScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCSubScrollView.h; sourceTree = "<group>"; };
536BFD1729B181E100BD0776 /* VLCMainVideoViewOverlayView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCMainVideoViewOverlayView.h; sourceTree = "<group>"; };
536BFD1829B181E100BD0776 /* VLCMainVideoViewOverlayView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VLCMainVideoViewOverlayView.m; sourceTree = "<group>"; };
536EFBF3295BCB8300F4CB13 /* VLCLibraryUIUnits.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCLibraryUIUnits.h; sourceTree = "<group>"; };
536EFBF4295BCB8300F4CB13 /* VLCLibraryUIUnits.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VLCLibraryUIUnits.m; sourceTree = "<group>"; };
536EFC37295E521600F4CB13 /* VLCLibraryVideoViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCLibraryVideoViewController.h; sourceTree = "<group>"; };
......@@ -913,6 +916,8 @@
children = (
534E8E3829A06325009503F8 /* VLCMainVideoViewController.h */,
534E8E3929A06325009503F8 /* VLCMainVideoViewController.m */,
536BFD1729B181E100BD0776 /* VLCMainVideoViewOverlayView.h */,
536BFD1829B181E100BD0776 /* VLCMainVideoViewOverlayView.m */,
1CAC3EE720CD1B3B00613DB2 /* VLCVideoOutputProvider.h */,
1CAC3EE620CD1B3B00613DB2 /* VLCVideoOutputProvider.m */,
7D2E0EDC20CD206F0033A221 /* VLCVideoWindowCommon.h */,
......@@ -1886,6 +1891,7 @@
7DE82E7922843781002D341A /* VLCLibraryAlbumTableCellView.m in Sources */,
7D67318622C8F4060000AD40 /* VLCMediaSourceCollectionViewItem.m in Sources */,
536283F0291146BC00640C15 /* VLCLibraryTableView.m in Sources */,
536BFD1929B181E100BD0776 /* VLCMainVideoViewOverlayView.m in Sources */,
536283F1291146BC00640C15 /* VLCLibraryAlbumTracksDataSource.m in Sources */,
5307A6F52967859F001E0C6A /* NSImage+VLCAdditions.m in Sources */,
1CCC89042078A3D500E5626F /* StreamOutput.xib in Sources */,
......
......@@ -343,6 +343,8 @@ libmacosx_plugin_la_SOURCES = \
gui/macosx/windows/video/VLCFullVideoViewWindow.m \
gui/macosx/windows/video/VLCMainVideoViewController.h \
gui/macosx/windows/video/VLCMainVideoViewController.m \
gui/macosx/windows/video/VLCMainVideoViewOverlayView.h \
gui/macosx/windows/video/VLCMainVideoViewOverlayView.m \
gui/macosx/windows/video/VLCVideoOutputProvider.h \
gui/macosx/windows/video/VLCVideoOutputProvider.m \
gui/macosx/windows/video/VLCVideoWindowCommon.h \
......
......@@ -9,12 +9,18 @@
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="VLCMainVideoViewController">
<connections>
<outlet property="bottomBarView" destination="1GA-GG-Sdx" id="0UY-5o-eVD"/>
<outlet property="centralControlsStackView" destination="CvV-yX-Nbh" id="zyI-Rb-bem"/>
<outlet property="controlsBar" destination="3" id="Mfq-2w-2uR"/>
<outlet property="fakeTitleBar" destination="jnw-gL-nrF" id="7lZ-al-c3d"/>
<outlet property="fakeTitleBarHeightConstraint" destination="wY4-If-nIp" id="wPt-X4-mgu"/>
<outlet property="mainControlsView" destination="D4V-Zd-qvB" id="KwM-ya-ETn"/>
<outlet property="overlayView" destination="FGS-tq-54S" id="RSC-7m-N0y"/>
<outlet property="playlistButton" destination="Drq-if-dw4" id="BZe-Cr-mzZ"/>
<outlet property="playlistButtonTopConstraint" destination="VyM-t4-y6F" id="V94-GS-KcS"/>
<outlet property="playlistButtonTrailingConstraint" destination="rWa-NJ-Aju" id="tzU-Iz-CXl"/>
<outlet property="returnButton" destination="UoQ-34-Pox" id="nyY-OF-9zj"/>
<outlet property="returnButtonLeadingConstraint" destination="BkP-RA-uxn" id="CsI-gH-SYp"/>
<outlet property="returnButtonTopConstraint" destination="0l2-eC-67c" id="78K-sz-kmV"/>
<outlet property="view" destination="WRu-Ic-lQK" id="B9p-x5-Kd8"/>
<outlet property="voutView" destination="mAS-4a-RS8" id="GeX-XO-HYC"/>
......@@ -25,7 +31,6 @@
<customObject id="3" userLabel="Main Video View Controls Bar" customClass="VLCControlsBarCommon">
<connections>
<outlet property="backwardButton" destination="V9d-hX-iyg" id="ZFn-jn-7OB"/>
<outlet property="bottomBarView" destination="1GA-GG-Sdx" id="hk1-nG-zqb"/>
<outlet property="forwardButton" destination="sF5-Z0-bef" id="H6w-Le-NAK"/>
<outlet property="fullscreenButton" destination="dYZ-ri-Kra" id="Cw2-BS-QG9"/>
<outlet property="fullscreenButtonWidthConstraint" destination="quS-fD-Od7" id="6hT-nR-yQI"/>
......@@ -45,48 +50,26 @@
<customView translatesAutoresizingMaskIntoConstraints="NO" id="mAS-4a-RS8" customClass="VLCVoutView">
<rect key="frame" x="0.0" y="0.0" width="720" height="480"/>
</customView>
<box boxType="custom" borderType="none" title="Box" titlePosition="noTitle" translatesAutoresizingMaskIntoConstraints="NO" id="D4V-Zd-qvB">
<box appearanceType="darkAqua" boxType="custom" borderType="none" title="Box" titlePosition="noTitle" transparent="YES" translatesAutoresizingMaskIntoConstraints="NO" id="D4V-Zd-qvB">
<rect key="frame" x="0.0" y="0.0" width="720" height="480"/>
<view key="contentView" id="1tI-8K-e3c">
<view key="contentView" wantsLayer="YES" id="1tI-8K-e3c">
<rect key="frame" x="0.0" y="0.0" width="720" height="480"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button translatesAutoresizingMaskIntoConstraints="NO" id="UoQ-34-Pox">
<rect key="frame" x="7" y="434" width="38" height="39"/>
<visualEffectView blendingMode="withinWindow" material="titlebar" state="followsWindowActiveState" translatesAutoresizingMaskIntoConstraints="NO" id="jnw-gL-nrF">
<rect key="frame" x="0.0" y="480" width="720" height="0.0"/>
<constraints>
<constraint firstAttribute="width" secondItem="UoQ-34-Pox" secondAttribute="height" multiplier="1:1" id="Mvu-rV-2bc"/>
<constraint firstAttribute="width" constant="32" id="cjt-DQ-vMP"/>
<constraint firstAttribute="height" id="wY4-If-nIp"/>
</constraints>
<buttonCell key="cell" type="bevel" bezelStyle="regularSquare" imagePosition="overlaps" alignment="center" borderStyle="border" imageScaling="proportionallyUpOrDown" inset="2" id="CU4-UE-tsW">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
<imageReference key="image" image="arrow.backward" catalog="system" symbolScale="small"/>
</buttonCell>
<color key="bezelColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
<connections>
<action selector="returnToLibrary:" target="-2" id="rnL-S1-zSR"/>
</connections>
</button>
<button translatesAutoresizingMaskIntoConstraints="NO" id="Drq-if-dw4">
<rect key="frame" x="675" y="434" width="38" height="39"/>
<constraints>
<constraint firstAttribute="width" constant="32" id="9vC-fK-tZu"/>
<constraint firstAttribute="width" secondItem="Drq-if-dw4" secondAttribute="height" multiplier="1:1" id="cVK-cW-Opa"/>
</constraints>
<buttonCell key="cell" type="bevel" bezelStyle="regularSquare" image="music.note.list" catalog="system" imagePosition="overlaps" borderStyle="border" inset="2" id="VDP-ql-lW8">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<color key="bezelColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
<connections>
<action selector="togglePlaylist:" target="-2" id="WrP-vg-etw"/>
</connections>
</button>
<visualEffectView blendingMode="withinWindow" material="titlebar" state="followsWindowActiveState" translatesAutoresizingMaskIntoConstraints="NO" id="1GA-GG-Sdx" customClass="VLCBottomBarView">
<rect key="frame" x="0.0" y="0.0" width="720" height="91"/>
</visualEffectView>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="FGS-tq-54S" customClass="VLCMainVideoViewOverlayView">
<rect key="frame" x="0.0" y="0.0" width="720" height="480"/>
</customView>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="1GA-GG-Sdx">
<rect key="frame" x="0.0" y="0.0" width="720" height="107"/>
<subviews>
<textField wantsLayer="YES" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="f4v-2z-dQ1" customClass="VLCTimeField">
<rect key="frame" x="623" y="10" width="79" height="14"/>
<rect key="frame" x="623" y="20" width="79" height="14"/>
<constraints>
<constraint firstAttribute="width" constant="75" id="8Zz-X6-yY1"/>
</constraints>
......@@ -97,15 +80,15 @@
</textFieldCell>
</textField>
<textField wantsLayer="YES" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="lEW-MN-FFU" customClass="VLCWrappableTextField">
<rect key="frame" x="18" y="49" width="503" height="32"/>
<rect key="frame" x="18" y="59" width="495" height="28"/>
<textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingTail" allowsUndo="NO" sendsActionOnEndEditing="YES" alignment="left" placeholderString="Nothing Playing" usesSingleLineMode="YES" id="8l0-zS-fOa">
<font key="font" textStyle="largeTitle" name=".SFNS-Regular"/>
<font key="font" metaFont="systemBold" size="24"/>
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<slider verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="qNZ-Fh-W8i" customClass="VLCSlider">
<rect key="frame" x="18" y="27" width="684" height="19"/>
<rect key="frame" x="18" y="37" width="684" height="19"/>
<constraints>
<constraint firstAttribute="height" constant="15" id="xm6-li-LpC"/>
</constraints>
......@@ -115,19 +98,19 @@
</connections>
</slider>
<stackView distribution="fill" orientation="horizontal" alignment="centerY" spacing="20" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="sJu-ZK-5QH">
<rect key="frame" x="539" y="49" width="161" height="32"/>
<rect key="frame" x="531" y="59" width="169" height="32"/>
<subviews>
<stackView distribution="fill" orientation="horizontal" alignment="centerY" spacing="5" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Y8F-hr-iaW">
<rect key="frame" x="0.0" y="4" width="109" height="24"/>
<rect key="frame" x="0.0" y="0.0" width="117" height="32"/>
<subviews>
<button translatesAutoresizingMaskIntoConstraints="NO" id="tVB-Xs-sJJ" customClass="VLCImageButton">
<rect key="frame" x="0.0" y="-3" width="24" height="30"/>
<button wantsLayer="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="tVB-Xs-sJJ" customClass="VLCImageButton">
<rect key="frame" x="0.0" y="-1" width="32" height="33"/>
<constraints>
<constraint firstAttribute="width" constant="24" id="PGL-rL-Qcp"/>
<constraint firstAttribute="width" constant="32" id="PGL-rL-Qcp"/>
<constraint firstAttribute="width" secondItem="tVB-Xs-sJJ" secondAttribute="height" multiplier="1:1" id="qTO-ie-xwE"/>
</constraints>
<buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="volume.3.fill" catalog="system" imagePosition="only" alignment="center" alternateImage="volume.fill" imageScaling="proportionallyUpOrDown" inset="2" id="skE-5H-zgX">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<buttonCell key="cell" type="recessed" bezelStyle="recessed" image="volume.3.fill" catalog="system" imagePosition="only" alignment="center" controlSize="large" borderStyle="border" imageScaling="proportionallyUpOrDown" inset="2" id="skE-5H-zgX">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
......@@ -135,7 +118,7 @@
</connections>
</button>
<slider verticalHuggingPriority="750" horizontalCompressionResistancePriority="800" translatesAutoresizingMaskIntoConstraints="NO" id="lyY-Zo-4aH" customClass="VLCVolumeSlider">
<rect key="frame" x="27" y="4" width="84" height="17"/>
<rect key="frame" x="35" y="8" width="84" height="17"/>
<constraints>
<constraint firstAttribute="width" constant="80" id="SeC-cP-5Dr"/>
</constraints>
......@@ -154,14 +137,14 @@
<real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
<button translatesAutoresizingMaskIntoConstraints="NO" id="dYZ-ri-Kra" customClass="VLCImageButton">
<rect key="frame" x="129" y="-3" width="32" height="38"/>
<button wantsLayer="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="dYZ-ri-Kra" customClass="VLCImageButton">
<rect key="frame" x="137" y="-1" width="32" height="33"/>
<constraints>
<constraint firstAttribute="width" secondItem="dYZ-ri-Kra" secondAttribute="height" multiplier="1:1" id="cHQ-Fu-L8k"/>
<constraint firstAttribute="width" constant="32" id="quS-fD-Od7"/>
</constraints>
<buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="NSEnterFullScreenTemplate" imagePosition="only" alignment="center" imageScaling="proportionallyUpOrDown" inset="2" id="Z8g-js-0W6">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<buttonCell key="cell" type="recessed" bezelStyle="recessed" image="NSEnterFullScreenTemplate" imagePosition="only" alignment="center" controlSize="large" borderStyle="border" imageScaling="proportionallyUpOrDown" inset="2" id="Z8g-js-0W6">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
......@@ -179,7 +162,7 @@
</customSpacing>
</stackView>
<textField wantsLayer="YES" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="3ri-8b-8mw" customClass="VLCTimeField">
<rect key="frame" x="18" y="10" width="79" height="14"/>
<rect key="frame" x="18" y="20" width="79" height="14"/>
<constraints>
<constraint firstAttribute="width" constant="75" id="S9v-aM-nfL"/>
</constraints>
......@@ -192,7 +175,7 @@
</subviews>
<constraints>
<constraint firstItem="f4v-2z-dQ1" firstAttribute="trailing" secondItem="qNZ-Fh-W8i" secondAttribute="trailing" id="0DA-7x-5iR"/>
<constraint firstAttribute="bottom" secondItem="3ri-8b-8mw" secondAttribute="bottom" constant="10" id="2r5-04-JeD"/>
<constraint firstAttribute="bottom" secondItem="3ri-8b-8mw" secondAttribute="bottom" constant="20" id="2r5-04-JeD"/>
<constraint firstItem="sJu-ZK-5QH" firstAttribute="trailing" secondItem="qNZ-Fh-W8i" secondAttribute="trailing" id="A0O-Nw-jLo"/>
<constraint firstItem="f4v-2z-dQ1" firstAttribute="top" secondItem="qNZ-Fh-W8i" secondAttribute="bottom" constant="5" id="CT6-59-4xB"/>
<constraint firstItem="lEW-MN-FFU" firstAttribute="trailing" secondItem="sJu-ZK-5QH" secondAttribute="leading" constant="-20" id="DXE-mO-c4m"/>
......@@ -200,14 +183,17 @@
<constraint firstItem="sJu-ZK-5QH" firstAttribute="top" relation="greaterThanOrEqual" secondItem="1GA-GG-Sdx" secondAttribute="top" constant="10" id="Vjf-YQ-NXR"/>
<constraint firstItem="3ri-8b-8mw" firstAttribute="leading" secondItem="qNZ-Fh-W8i" secondAttribute="leading" id="WfQ-8B-O7I"/>
<constraint firstAttribute="trailing" secondItem="qNZ-Fh-W8i" secondAttribute="trailing" constant="20" id="YDi-aH-oOI"/>
<constraint firstItem="lEW-MN-FFU" firstAttribute="top" secondItem="1GA-GG-Sdx" secondAttribute="top" constant="10" id="aCc-Gf-kqc"/>
<constraint firstItem="lEW-MN-FFU" firstAttribute="top" secondItem="1GA-GG-Sdx" secondAttribute="top" constant="20" id="aCc-Gf-kqc"/>
<constraint firstItem="lEW-MN-FFU" firstAttribute="bottom" secondItem="qNZ-Fh-W8i" secondAttribute="top" constant="-5" id="dxq-b6-tct"/>
<constraint firstItem="qNZ-Fh-W8i" firstAttribute="leading" secondItem="1GA-GG-Sdx" secondAttribute="leading" constant="20" id="gYg-Ig-cLg"/>
<constraint firstItem="3ri-8b-8mw" firstAttribute="top" secondItem="qNZ-Fh-W8i" secondAttribute="bottom" constant="5" id="jze-EU-1TL"/>
<constraint firstItem="sJu-ZK-5QH" firstAttribute="bottom" secondItem="qNZ-Fh-W8i" secondAttribute="top" constant="-5" id="xsM-6a-gdn"/>
</constraints>
</visualEffectView>
<stackView distribution="fill" orientation="horizontal" alignment="centerY" spacing="20" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="CvV-yX-Nbh">
<shadow key="shadow" blurRadius="2">
<color key="color" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</shadow>
</customView>
<stackView wantsLayer="YES" distribution="fill" orientation="horizontal" alignment="centerY" spacing="20" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="CvV-yX-Nbh">
<rect key="frame" x="260" y="208" width="200" height="64"/>
<subviews>
<button translatesAutoresizingMaskIntoConstraints="NO" id="V9d-hX-iyg" customClass="VLCImageButton">
......@@ -216,11 +202,14 @@
<constraint firstAttribute="width" constant="48" id="XBm-GM-29d"/>
<constraint firstAttribute="width" secondItem="V9d-hX-iyg" secondAttribute="height" multiplier="1:1" id="mjk-wN-72b"/>
</constraints>
<shadow key="shadow" blurRadius="20">
<color key="color" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</shadow>
<buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="backward.fill" catalog="system" imagePosition="only" alignment="center" continuous="YES" imageScaling="proportionallyUpOrDown" inset="2" id="fFm-ZG-R1p">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<color key="contentTintColor" red="0.99999600649999998" green="1" blue="1" alpha="0.70445365650000002" colorSpace="custom" customColorSpace="sRGB"/>
<color key="contentTintColor" red="0.99999600649999998" green="1" blue="1" alpha="0.85338267140000001" colorSpace="custom" customColorSpace="sRGB"/>
<connections>
<action selector="bwd:" target="3" id="nDS-qm-Htv"/>
</connections>
......@@ -231,11 +220,14 @@
<constraint firstAttribute="width" secondItem="PCC-8a-sVF" secondAttribute="height" multiplier="1:1" id="2jF-Y0-kn3"/>
<constraint firstAttribute="width" constant="64" id="OHb-xJ-sqM"/>
</constraints>
<shadow key="shadow" blurRadius="30">
<color key="color" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</shadow>
<buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="play.fill" catalog="system" imagePosition="overlaps" alignment="center" alternateImage="VLCPauseTemplate" imageScaling="proportionallyUpOrDown" inset="2" id="Jk0-sw-EOp">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<color key="contentTintColor" red="0.99999600649999998" green="1" blue="1" alpha="0.70445365646258506" colorSpace="custom" customColorSpace="sRGB"/>
<color key="contentTintColor" red="0.99999600649999998" green="1" blue="1" alpha="0.85338267136324741" colorSpace="custom" customColorSpace="sRGB"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="boolean" keyPath="toggle" value="YES"/>
</userDefinedRuntimeAttributes>
......@@ -249,11 +241,14 @@
<constraint firstAttribute="width" constant="48" id="M5n-CD-fd3"/>
<constraint firstAttribute="width" secondItem="sF5-Z0-bef" secondAttribute="height" multiplier="1:1" id="b5c-td-Idb"/>
</constraints>
<shadow key="shadow" blurRadius="20">
<color key="color" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</shadow>
<buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="forward.fill" catalog="system" imagePosition="only" alignment="center" continuous="YES" imageScaling="proportionallyUpOrDown" inset="2" id="I4n-VO-oYa">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<color key="contentTintColor" red="0.99999600649999998" green="1" blue="1" alpha="0.70445365650000002" colorSpace="custom" customColorSpace="sRGB"/>
<color key="contentTintColor" red="0.99999600649999998" green="1" blue="1" alpha="0.85338267140000001" colorSpace="custom" customColorSpace="sRGB"/>
<connections>
<action selector="fwd:" target="3" id="uPX-Xa-CwO"/>
</connections>
......@@ -270,20 +265,57 @@
<real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="UoQ-34-Pox">
<rect key="frame" x="20" y="431" width="22" height="29"/>
<shadow key="shadow" blurRadius="2">
<color key="color" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</shadow>
<buttonCell key="cell" type="recessed" bezelStyle="recessed" imagePosition="only" controlSize="large" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="CU4-UE-tsW">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
<imageReference key="image" image="NSLeftFacingTriangleTemplate" symbolScale="large"/>
</buttonCell>
<color key="contentTintColor" red="0.99999600649999998" green="1" blue="1" alpha="0.85338267140000001" colorSpace="custom" customColorSpace="sRGB"/>
<connections>
<action selector="returnToLibrary:" target="-2" id="rnL-S1-zSR"/>
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Drq-if-dw4">
<rect key="frame" x="669" y="431" width="31" height="29"/>
<shadow key="shadow" blurRadius="2">
<color key="color" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</shadow>
<buttonCell key="cell" type="recessed" bezelStyle="recessed" imagePosition="only" controlSize="large" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="VDP-ql-lW8">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES" changeBackground="YES" changeGray="YES"/>
<font key="font" metaFont="system"/>
<imageReference key="image" image="NSListViewTemplate" symbolScale="large"/>
</buttonCell>
<color key="contentTintColor" red="0.99999600649999998" green="1" blue="1" alpha="0.85338267140000001" colorSpace="custom" customColorSpace="sRGB"/>
<connections>
<action selector="togglePlaylist:" target="-2" id="WrP-vg-etw"/>
</connections>
</button>
</subviews>
<constraints>
<constraint firstItem="UoQ-34-Pox" firstAttribute="top" secondItem="1tI-8K-e3c" secondAttribute="top" constant="10" id="0l2-eC-67c"/>
<constraint firstItem="UoQ-34-Pox" firstAttribute="leading" secondItem="1tI-8K-e3c" secondAttribute="leading" constant="10" id="BkP-RA-uxn"/>
<constraint firstItem="UoQ-34-Pox" firstAttribute="top" secondItem="1tI-8K-e3c" secondAttribute="top" constant="20" id="0l2-eC-67c"/>
<constraint firstItem="UoQ-34-Pox" firstAttribute="leading" secondItem="1tI-8K-e3c" secondAttribute="leading" constant="20" id="BkP-RA-uxn"/>
<constraint firstItem="FGS-tq-54S" firstAttribute="top" secondItem="jnw-gL-nrF" secondAttribute="bottom" id="Doc-Mq-oOI"/>
<constraint firstAttribute="bottom" secondItem="1GA-GG-Sdx" secondAttribute="bottom" id="KQN-vk-oha"/>
<constraint firstItem="1GA-GG-Sdx" firstAttribute="leading" secondItem="1tI-8K-e3c" secondAttribute="leading" id="Qn0-ts-S0d"/>
<constraint firstItem="Drq-if-dw4" firstAttribute="top" secondItem="1tI-8K-e3c" secondAttribute="top" constant="10" id="VyM-t4-y6F"/>
<constraint firstAttribute="trailing" secondItem="jnw-gL-nrF" secondAttribute="trailing" id="SDl-7h-q9o"/>
<constraint firstItem="Drq-if-dw4" firstAttribute="top" secondItem="1tI-8K-e3c" secondAttribute="top" constant="20" id="VyM-t4-y6F"/>
<constraint firstItem="CvV-yX-Nbh" firstAttribute="centerX" secondItem="1tI-8K-e3c" secondAttribute="centerX" id="YMh-Zl-NSA"/>
<constraint firstItem="jnw-gL-nrF" firstAttribute="leading" secondItem="1tI-8K-e3c" secondAttribute="leading" id="Z37-TJ-B2D"/>
<constraint firstAttribute="trailing" secondItem="1GA-GG-Sdx" secondAttribute="trailing" id="dWk-NI-ekN"/>
<constraint firstItem="CvV-yX-Nbh" firstAttribute="centerY" secondItem="1tI-8K-e3c" secondAttribute="centerY" id="l2Y-IR-aus"/>
<constraint firstAttribute="trailing" secondItem="Drq-if-dw4" secondAttribute="trailing" constant="10" id="rWa-NJ-Aju"/>
<constraint firstAttribute="bottom" secondItem="FGS-tq-54S" secondAttribute="bottom" id="ps4-nL-1Xc"/>
<constraint firstItem="FGS-tq-54S" firstAttribute="leading" secondItem="1tI-8K-e3c" secondAttribute="leading" id="qfd-OD-CHv"/>
<constraint firstAttribute="trailing" secondItem="Drq-if-dw4" secondAttribute="trailing" constant="20" id="rWa-NJ-Aju"/>
<constraint firstItem="jnw-gL-nrF" firstAttribute="top" secondItem="1tI-8K-e3c" secondAttribute="top" id="t6W-5p-Vgt"/>
<constraint firstAttribute="trailing" secondItem="FGS-tq-54S" secondAttribute="trailing" id="t7T-OV-bf0"/>
</constraints>
</view>
<color key="fillColor" red="0.0" green="0.0" blue="0.0" alpha="0.60225340136054417" colorSpace="custom" customColorSpace="sRGB"/>
<color key="fillColor" red="0.0" green="0.0" blue="0.0" alpha="0.35060533940397354" colorSpace="custom" customColorSpace="sRGB"/>
</box>
</subviews>
<constraints>
......@@ -301,13 +333,12 @@
</objects>
<resources>
<image name="NSEnterFullScreenTemplate" width="20" height="18"/>
<image name="NSLeftFacingTriangleTemplate" width="12" height="16"/>
<image name="NSListViewTemplate" width="21" height="14"/>
<image name="VLCPauseTemplate" width="128" height="128"/>
<image name="arrow.backward" catalog="system" width="12" height="10"/>
<image name="backward.fill" catalog="system" width="20" height="12"/>
<image name="forward.fill" catalog="system" width="20" height="12"/>
<image name="music.note.list" catalog="system" width="17" height="15"/>
<image name="play.fill" catalog="system" width="12" height="13"/>
<image name="volume.3.fill" catalog="system" width="22" height="15"/>
<image name="volume.fill" catalog="system" width="13" height="14"/>
</resources>
</document>
......@@ -61,6 +61,8 @@ NS_ASSUME_NONNULL_BEGIN
+ (const NSEdgeInsets)libraryViewScrollViewContentInsets;
+ (const NSEdgeInsets)libraryViewScrollViewScrollerInsets;
+ (const CGFloat)controlsFadeAnimationDuration;
@end
NS_ASSUME_NONNULL_END
......@@ -165,4 +165,9 @@
-contentInsets.right);
}
+ (const CGFloat)controlsFadeAnimationDuration
{
return 0.4f;
}
@end
......@@ -814,11 +814,6 @@ static void addShadow(NSImageView *__unsafe_unretained imageView)
// And repurpose it to hide the video view
[self.backwardsNavigationButton setEnabled:YES];
if (self.isInNativeFullscreen && [self hasActiveVideo] && [self fullscreen]) {
[self hideControlsBar];
[self.videoViewController showControls];
}
[self enableVideoTitleBarMode];
[self hideControlsBar];
[self.videoViewController showControls];
......@@ -844,10 +839,6 @@ static void addShadow(NSImageView *__unsafe_unretained imageView)
[self setViewForSelectedSegment];
if (self.isInNativeFullscreen) {
[self showControlsBar];
}
[self disableVideoTitleBarMode];
[self showControlsBar];
}
......
......@@ -403,7 +403,7 @@
- (void)updateMuteVolumeButtonImage
{
_muteVolumeButton.image = _playerController.mute ?
imageFromRes(@"volume-low") : imageFromRes(@"volume-high");
imageFromRes(@"VLCVolumeOffTemplate") : imageFromRes(@"VLCVolumeOnTemplate");
}
- (void)playerStateUpdated:(NSNotification *)aNotification
......
......@@ -24,6 +24,8 @@
#import "VLCMainVideoViewController.h"
#import "library/VLCLibraryUIUnits.h"
#import "main/VLCMain.h"
#import "playlist/VLCPlaylistController.h"
......@@ -33,6 +35,7 @@
{
BOOL _autohideTitlebar;
NSTimer *_hideTitlebarTimer;
BOOL _isFadingIn;
}
@end
......@@ -50,6 +53,8 @@
object:nil];
self.titleVisibility = NSWindowTitleHidden;
self.ignoresMouseEvents = NO;
self.acceptsMouseMovedEvents = YES;
}
- (void)stopTitlebarAutohideTimer
......@@ -78,16 +83,21 @@
{
[self stopTitlebarAutohideTimer];
NSView *titlebarView = [self standardWindowButton:NSWindowCloseButton].superview;
if (!titlebarView.hidden && !_autohideTitlebar) {
NSView *titlebarView = [self standardWindowButton:NSWindowCloseButton].superview;
if (!_autohideTitlebar) {
titlebarView.alphaValue = 1.0f;
return;
}
titlebarView.hidden = NO;
if (_autohideTitlebar) {
[NSAnimationContext runAnimationGroup:^(NSAnimationContext * _Nonnull context) {
self->_isFadingIn = YES;
[context setDuration:[VLCLibraryUIUnits controlsFadeAnimationDuration]];
[titlebarView.animator setAlphaValue:1.0f];
} completionHandler:^{
self->_isFadingIn = NO;
[self startTitlebarAutohideTimer];
}
}];
}
- (void)hideTitleBar:(id)sender
......@@ -95,12 +105,20 @@
[self stopTitlebarAutohideTimer];
if (self.videoViewController.mouseOnControls ||
VLCMain.sharedInstance.playlistController.playerController.playerState == VLC_PLAYER_STATE_PAUSED) {
!_autohideTitlebar ||
self.isInNativeFullscreen ||
self.videoViewController.view.hidden) {
[self showTitleBar];
return;
}
[self standardWindowButton:NSWindowCloseButton].superview.hidden = YES;
NSView *titlebarView = [self standardWindowButton:NSWindowCloseButton].superview;
[NSAnimationContext runAnimationGroup:^(NSAnimationContext * _Nonnull context) {
[context setDuration:[VLCLibraryUIUnits controlsFadeAnimationDuration]];
[titlebarView.animator setAlphaValue:0.0f];
} completionHandler:nil];
}
- (void)enableVideoTitleBarMode
......@@ -128,4 +146,21 @@
[self showTitleBar];
}
- (void)mouseMoved:(NSEvent *)event
{
[super mouseExited:event];
NSPoint mouseLocation = [event locationInWindow];
BOOL mouseOutsideWindow = ![self.contentView mouse:mouseLocation inRect:self.contentView.frame];
if (_autohideTitlebar && mouseOutsideWindow) {
[self hideTitleBar:self];
}
if (self.videoViewController.autohideControls && mouseOutsideWindow) {
[self.videoViewController hideControls];
}
}
@end
......@@ -25,24 +25,33 @@
#import <windows/mainwindow/VLCControlsBarCommon.h>
#import <windows/video/VLCVoutView.h>
@class VLCMainVideoViewOverlayView;
NS_ASSUME_NONNULL_BEGIN
@interface VLCMainVideoViewController : NSViewController
@property (readwrite, strong) IBOutlet VLCVoutView *voutView;
@property (readwrite, strong) IBOutlet NSBox *mainControlsView;
@property (readwrite, strong) IBOutlet VLCMainVideoViewOverlayView *overlayView;
@property (readwrite, strong) IBOutlet NSView *bottomBarView;
@property (readwrite, strong) IBOutlet NSStackView *centralControlsStackView;
@property (readwrite, strong) IBOutlet VLCControlsBarCommon *controlsBar;
@property (readwrite, strong) IBOutlet NSButton *returnButton;
@property (readwrite, strong) IBOutlet NSButton *playlistButton;
@property (readwrite, strong) IBOutlet NSLayoutConstraint *returnButtonTopConstraint;
@property (readwrite, strong) IBOutlet NSLayoutConstraint *returnButtonLeadingConstraint;
@property (readwrite, strong) IBOutlet NSLayoutConstraint *playlistButtonTopConstraint;
@property (readwrite, strong) IBOutlet NSLayoutConstraint *playlistButtonTrailingConstraint;
@property (readwrite, strong) IBOutlet NSVisualEffectView *fakeTitleBar;
@property (readwrite, strong) IBOutlet NSLayoutConstraint *fakeTitleBarHeightConstraint;
@property (readwrite, nonatomic) BOOL autohideControls;
@property (readwrite, nonatomic) BOOL displayLibraryControls;
@property (readonly) BOOL mouseOnControls;
- (void)showControls;
- (void)hideControls;
- (IBAction)togglePlaylist:(id)sender;
- (IBAction)returnToLibrary:(id)sender;
......
......@@ -32,6 +32,7 @@
#import "views/VLCBottomBarView.h"
#import "windows/video/VLCMainVideoViewOverlayView.h"
#import "windows/video/VLCVideoWindowCommon.h"
#import <vlc_common.h>
......@@ -39,6 +40,10 @@
@interface VLCMainVideoViewController()
{
NSTimer *_hideControlsTimer;
NSLayoutConstraint *_returnButtonBottomConstraint;
NSLayoutConstraint *_playlistButtonBottomConstraint;
BOOL _isFadingIn;
}
@end
......@@ -57,13 +62,31 @@
[self setDisplayLibraryControls:NO];
[self updatePlaylistToggleState];
[self updateLibraryControlsTopConstraint];
[self updateLibraryControls];
NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
[notificationCenter addObserver:self
selector:@selector(shouldShowControls:)
name:VLCVideoWindowShouldShowFullscreenController
object:nil];
_returnButtonBottomConstraint = [NSLayoutConstraint constraintWithItem:_returnButton
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:_fakeTitleBar
attribute:NSLayoutAttributeBottom
multiplier:1.
constant:0];
_playlistButtonBottomConstraint = [NSLayoutConstraint constraintWithItem:_playlistButton
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:_fakeTitleBar
attribute:NSLayoutAttributeBottom
multiplier:1.
constant:0];
_returnButtonBottomConstraint.active = NO;
_playlistButtonBottomConstraint.active = NO;
}
- (BOOL)mouseOnControls
......@@ -93,24 +116,31 @@
_hideControlsTimer = [NSTimer scheduledTimerWithTimeInterval:timeToKeepVisibleInSec
target:self
selector:@selector(hideControls:)
selector:@selector(shouldHideControls:)
userInfo:nil
repeats:NO];
}
- (void)hideControls:(id)sender
- (void)shouldHideControls:(id)sender
{
[self hideControls];
}
- (void)hideControls
{
[self stopAutohideTimer];
NSPoint mousePos = [self.view.window mouseLocationOutsideOfEventStream];
if ([self mouseOnControls] ||
VLCMain.sharedInstance.playlistController.playerController.playerState == VLC_PLAYER_STATE_PAUSED) {
if ([self mouseOnControls]) {
[self showControls];
return;
}
_mainControlsView.hidden = YES;
[NSAnimationContext runAnimationGroup:^(NSAnimationContext * _Nonnull context) {
[context setDuration:[VLCLibraryUIUnits controlsFadeAnimationDuration]];
[self->_mainControlsView.animator setAlphaValue:0.0f];
} completionHandler:nil];
}
- (void)setAutohideControls:(BOOL)autohide
......@@ -137,17 +167,21 @@
{
[self stopAutohideTimer];
[self updatePlaylistToggleState];
[self updateLibraryControlsTopConstraint];
[self updateLibraryControls];
if (!_mainControlsView.hidden && !_autohideControls) {
if (!_autohideControls) {
_mainControlsView.alphaValue = 1.0f;
return;
}
_mainControlsView.hidden = NO;
if (_autohideControls) {
[NSAnimationContext runAnimationGroup:^(NSAnimationContext * _Nonnull context) {
self->_isFadingIn = YES;
[context setDuration:[VLCLibraryUIUnits controlsFadeAnimationDuration]];
[self->_mainControlsView.animator setAlphaValue:1.0f];
} completionHandler:^{
self->_isFadingIn = NO;
[self startAutohideTimer];
}
}];
}
- (void)setDisplayLibraryControls:(BOOL)displayLibraryControls
......@@ -167,7 +201,30 @@
}
}
- (void)updateLibraryControlsTopConstraint
- (NSRect)windowButtonsRect
{
NSWindow * const window = self.view.window;
NSRect buttonBox = NSZeroRect;
NSButton * const closeButton = [window standardWindowButton:NSWindowCloseButton];
if (closeButton) {
buttonBox = NSUnionRect(buttonBox, closeButton.frame);
}
NSButton * const minimizeButton = [window standardWindowButton:NSWindowMiniaturizeButton];
if (minimizeButton) {
buttonBox = NSUnionRect(buttonBox, minimizeButton.frame);
}
NSButton * const zoomButton = [window standardWindowButton:NSWindowZoomButton];
if (zoomButton) {
buttonBox = NSUnionRect(buttonBox, zoomButton.frame);
}
return buttonBox;
}
- (void)updateLibraryControls
{
if (!_displayLibraryControls) {
return;
......@@ -177,20 +234,56 @@
const NSView * const titlebarView = [viewWindow standardWindowButton:NSWindowCloseButton].superview;
const CGFloat windowTitlebarHeight = titlebarView.frame.size.height;
const BOOL windowFullscreen = [(VLCWindow*)viewWindow isInNativeFullscreen] || [(VLCWindow*)viewWindow fullscreen];
const CGFloat spaceToTitlebar = viewWindow.titlebarAppearsTransparent ? [VLCLibraryUIUnits smallSpacing] : [VLCLibraryUIUnits mediumSpacing];
const CGFloat topSpaceWithTitlebar = windowTitlebarHeight + spaceToTitlebar;
const BOOL windowFullscreen = [(VLCWindow*)viewWindow isInNativeFullscreen] ||
[(VLCWindow*)viewWindow fullscreen];
const BOOL placeInFakeToolbar = viewWindow.titlebarAppearsTransparent &&
!windowFullscreen;
const CGFloat buttonTopSpace = placeInFakeToolbar ? 0 : [VLCLibraryUIUnits largeSpacing];
_fakeTitleBarHeightConstraint.constant = windowFullscreen ? 0 : windowTitlebarHeight;
_returnButtonTopConstraint.constant = buttonTopSpace;
_playlistButtonTopConstraint.constant = buttonTopSpace;
_returnButtonBottomConstraint.active = placeInFakeToolbar;
_playlistButtonBottomConstraint.active = placeInFakeToolbar;
NSControlSize buttonSize = NSControlSizeRegular;
if (@available(macOS 11.0, *)) {
if (!placeInFakeToolbar) {
buttonSize = NSControlSizeLarge;
} else if (viewWindow.toolbarStyle != NSWindowToolbarStyleUnified) {
buttonSize = NSControlSizeMini;
}
} else if (placeInFakeToolbar) {
buttonSize = NSControlSizeMini;
}
NSControlSize previousButtonSize = _playlistButton.controlSize;
_returnButton.controlSize = buttonSize;
_playlistButton.controlSize = buttonSize;
// HACK: Upon changing the control size the actual highlight of toggled/hovered buttons doesn't change
// properly, at least for recessed buttons. This is most obvious on the toggleable playlist button.
// So reset the state and then retoggle once done.
if (previousButtonSize != buttonSize) {
NSControlStateValue returnButtonControlState = _returnButton.state;
NSControlStateValue playlistButtonControlState = _playlistButton.state;
_returnButton.state = NSControlStateValueOff;
_playlistButton.state = NSControlStateValueOff;
_returnButton.state = returnButtonControlState;
_playlistButton.state = playlistButtonControlState;
}
const CGFloat realButtonSpace = (windowTitlebarHeight - _playlistButton.cell.cellSize.height) / 2;
const NSRect windowButtonBox = [self windowButtonsRect];
// Since the close/maximise/minimise buttons go on the left, we want to make sure the return
// button does not overlap. But for the playlist button, as long as the toolbar and titlebar
// appears fully transparent, it looks nicer to leave it at the top
const CGFloat returnButtonTopSpace = titlebarView.hidden || windowFullscreen ?
[VLCLibraryUIUnits mediumSpacing] : topSpaceWithTitlebar;
const CGFloat playlistButtonTopSpace = viewWindow.toolbar.visible && viewWindow.titlebarAppearsTransparent && !windowFullscreen ?
topSpaceWithTitlebar : [VLCLibraryUIUnits mediumSpacing];
_returnButtonLeadingConstraint.constant = placeInFakeToolbar ? windowButtonBox.size.width + [VLCLibraryUIUnits mediumSpacing] + realButtonSpace : [VLCLibraryUIUnits largeSpacing];
_playlistButtonTrailingConstraint.constant = placeInFakeToolbar ? realButtonSpace: [VLCLibraryUIUnits largeSpacing];
_returnButtonTopConstraint.constant = returnButtonTopSpace;
_playlistButtonTopConstraint.constant = playlistButtonTopSpace;
_overlayView.drawGradientForTopControls = !placeInFakeToolbar;
[_overlayView drawRect:_overlayView.frame];
}
- (IBAction)togglePlaylist:(id)sender
......
/*****************************************************************************
* VLCMainVideoViewOverlayView.h: MacOS X interface module
*****************************************************************************
* Copyright (C) 2023 VLC authors and VideoLAN
*
* Authors: Claudio Cambra <developer@claudiocambra.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#import <Cocoa/Cocoa.h>
NS_ASSUME_NONNULL_BEGIN
/* Adds darkening gradients in the VLCMainVideoView to make controls more visible.
* NOTE: Needs to occupy the entirety, and exactly, the area of the VLCMainVideoView */
@interface VLCMainVideoViewOverlayView : NSView
@property (readwrite, assign) BOOL drawGradientForTopControls;
@end
NS_ASSUME_NONNULL_END
/*****************************************************************************
* VLCMainVideoViewOverlayView.m: MacOS X interface module
*****************************************************************************
* Copyright (C) 2023 VLC authors and VideoLAN
*
* Authors: Claudio Cambra <developer@claudiocambra.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#import "VLCMainVideoViewOverlayView.h"
@implementation VLCMainVideoViewOverlayView
- (void)drawRect:(NSRect)dirtyRect {
[super drawRect:dirtyRect];
// Drawing code here.
NSColor *_darkestGradientColor = [NSColor colorWithWhite:0 alpha:0.4];
NSGradient *gradient;
if (_drawGradientForTopControls) {
gradient = [[NSGradient alloc] initWithColorsAndLocations:_darkestGradientColor, 0.,
[NSColor clearColor], 0.5,
_darkestGradientColor, 1.,
nil];
} else {
gradient = [[NSGradient alloc] initWithColorsAndLocations:_darkestGradientColor, 0,
[NSColor clearColor], 1.,
nil];
}
// Draws bottom-up
[gradient drawInRect:self.frame angle:90];
}
@end