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 (17)
......@@ -97,6 +97,7 @@
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 */; };
5387FFF52A15127100A3A70A /* NSWindow+VLCAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 5387FFF42A15127100A3A70A /* NSWindow+VLCAdditions.m */; };
538A7EDA29A63EE40068AD4F /* VLCFullVideoViewWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 538A7ED929A63EE40068AD4F /* VLCFullVideoViewWindow.m */; };
53903D3A29576ED500D0B308 /* VLCLibraryAudioGroupDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 53903D3929576ED500D0B308 /* VLCLibraryAudioGroupDataSource.m */; };
539BA79F298C726200918C36 /* VLCAspectRatioRetainingVideoWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 539BA79E298C726200918C36 /* VLCAspectRatioRetainingVideoWindow.m */; };
......@@ -303,6 +304,8 @@
536EFC37295E521600F4CB13 /* VLCLibraryVideoViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCLibraryVideoViewController.h; sourceTree = "<group>"; };
536EFC38295E521600F4CB13 /* VLCLibraryVideoViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VLCLibraryVideoViewController.m; sourceTree = "<group>"; };
536EFC3A295F828000F4CB13 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
5387FFF32A15127100A3A70A /* NSWindow+VLCAdditions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSWindow+VLCAdditions.h"; sourceTree = "<group>"; };
5387FFF42A15127100A3A70A /* NSWindow+VLCAdditions.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSWindow+VLCAdditions.m"; sourceTree = "<group>"; };
538A7ED829A63EE40068AD4F /* VLCFullVideoViewWindow.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCFullVideoViewWindow.h; sourceTree = "<group>"; };
538A7ED929A63EE40068AD4F /* VLCFullVideoViewWindow.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VLCFullVideoViewWindow.m; sourceTree = "<group>"; };
53903D3829576ED500D0B308 /* VLCLibraryAudioGroupDataSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VLCLibraryAudioGroupDataSource.h; sourceTree = "<group>"; };
......@@ -1157,6 +1160,8 @@
5307A6F42967859F001E0C6A /* NSImage+VLCAdditions.m */,
53ED473A29CBC64200795DB1 /* NSPasteboardItem+VLCAdditions.h */,
53ED473B29CBC64200795DB1 /* NSPasteboardItem+VLCAdditions.m */,
5387FFF32A15127100A3A70A /* NSWindow+VLCAdditions.h */,
5387FFF42A15127100A3A70A /* NSWindow+VLCAdditions.m */,
);
path = extensions;
sourceTree = "<group>";
......@@ -2010,6 +2015,7 @@
7DBB7639227F3FBC002649E1 /* VLCLibraryCollectionViewSupplementaryElementView.m in Sources */,
1C3113A31E508C6900D4DD76 /* VLCCoreDialogProvider.m in Sources */,
6B2EFC631F281A0900F3C0EA /* VLCVolumeSliderCell.m in Sources */,
5387FFF52A15127100A3A70A /* NSWindow+VLCAdditions.m in Sources */,
1C3113A71E508C6900D4DD76 /* VLCLogWindowController.m in Sources */,
53F0E930299B17DF00491D49 /* VLCInputNodePathControl.m in Sources */,
1C3113A91E508C6900D4DD76 /* VLCDocumentController.m in Sources */,
......
......@@ -75,6 +75,8 @@ libmacosx_plugin_la_SOURCES = \
gui/macosx/extensions/NSString+Helpers.m \
gui/macosx/extensions/NSView+VLCAdditions.h \
gui/macosx/extensions/NSView+VLCAdditions.m \
gui/macosx/extensions/NSWindow+VLCAdditions.h \
gui/macosx/extensions/NSWindow+VLCAdditions.m \
gui/macosx/extensions/NSPasteboardItem+VLCAdditions.h \
gui/macosx/extensions/NSPasteboardItem+VLCAdditions.m \
gui/macosx/extensions/VLCHexNumberFormatter.h \
......
......@@ -8,44 +8,48 @@
<customObject id="-2" userLabel="File's Owner" customClass="VLCLibraryInformationPanel">
<connections>
<outlet property="imageView" destination="N4h-LP-IRY" id="Ned-Ju-hyu"/>
<outlet property="scrollView" destination="JzV-HY-whQ" id="19b-bb-AK0"/>
<outlet property="textField" destination="eeq-7b-IbI" id="tex-TF-135"/>
<outlet property="titleTextField" destination="Ode-s8-X3t" id="Ahy-Gv-rPN"/>
<outlet property="titleTextFieldTopConstraint" destination="uPW-bq-Yz8" id="J75-Rk-mlI"/>
<outlet property="topBarView" destination="g0J-FC-bJg" id="Bkb-Cr-226"/>
<outlet property="window" destination="oPi-wT-0nK" id="ODs-Hv-85I"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" frameAutosaveName="" animationBehavior="default" id="oPi-wT-0nK" customClass="NSPanel">
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES" utility="YES" HUD="YES"/>
<window title="Media information" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" frameAutosaveName="" animationBehavior="default" titlebarAppearsTransparent="YES" id="oPi-wT-0nK" customClass="NSPanel">
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES" utility="YES" HUD="YES" fullSizeContentView="YES"/>
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
<rect key="contentRect" x="136" y="189" width="512" height="640"/>
<rect key="screenRect" x="0.0" y="0.0" width="1920" height="1055"/>
<value key="minSize" type="size" width="386" height="227"/>
<view key="contentView" id="Nfs-rF-cUN">
<rect key="frame" x="0.0" y="0.0" width="544" height="640"/>
<rect key="frame" x="0.0" y="0.0" width="512" height="640"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<scrollView horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="JzV-HY-whQ">
<scrollView borderType="none" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="JzV-HY-whQ">
<rect key="frame" x="0.0" y="0.0" width="512" height="640"/>
<clipView key="contentView" id="Bl4-q7-swx">
<rect key="frame" x="1" y="1" width="495" height="623"/>
<rect key="frame" x="0.0" y="0.0" width="512" height="640"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view translatesAutoresizingMaskIntoConstraints="NO" id="bU3-vL-IQb">
<rect key="frame" x="15" y="194" width="480" height="429"/>
<rect key="frame" x="0.0" y="216" width="512" height="424"/>
<subviews>
<stackView distribution="fill" orientation="vertical" alignment="leading" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Wv4-dn-5EA">
<rect key="frame" x="0.0" y="0.0" width="480" height="429"/>
<rect key="frame" x="0.0" y="0.0" width="512" height="424"/>
<subviews>
<textField verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="eeq-7b-IbI">
<rect key="frame" x="0.0" y="408" width="495" height="21"/>
<textFieldCell key="cell" selectable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" id="Jc0-rT-PNg">
<rect key="frame" x="8" y="408" width="496" height="16"/>
<textFieldCell key="cell" selectable="YES" sendsActionOnEndEditing="YES" state="on" title="Media data" id="Jc0-rT-PNg">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="N4h-LP-IRY">
<rect key="frame" x="0.0" y="0.0" width="400" height="400"/>
<rect key="frame" x="55" y="0.0" width="400" height="400"/>
<constraints>
<constraint firstAttribute="width" secondItem="N4h-LP-IRY" secondAttribute="height" multiplier="1:1" id="0Uq-LT-xPG"/>
<constraint firstAttribute="height" constant="400" id="wfM-2D-T6r"/>
......@@ -54,9 +58,9 @@
</imageView>
</subviews>
<constraints>
<constraint firstAttribute="trailing" secondItem="eeq-7b-IbI" secondAttribute="trailing" id="hIV-HK-m3A"/>
<constraint firstAttribute="trailing" secondItem="eeq-7b-IbI" secondAttribute="trailing" constant="10" id="hIV-HK-m3A"/>
<constraint firstItem="N4h-LP-IRY" firstAttribute="centerX" secondItem="Wv4-dn-5EA" secondAttribute="centerX" id="iwt-XU-iJg"/>
<constraint firstItem="eeq-7b-IbI" firstAttribute="leading" secondItem="Wv4-dn-5EA" secondAttribute="leading" id="k7h-rh-AJ1"/>
<constraint firstItem="eeq-7b-IbI" firstAttribute="leading" secondItem="Wv4-dn-5EA" secondAttribute="leading" constant="10" id="k7h-rh-AJ1"/>
</constraints>
<visibilityPriorities>
<integer value="1000"/>
......@@ -82,21 +86,44 @@
<constraint firstItem="bU3-vL-IQb" firstAttribute="leading" secondItem="Bl4-q7-swx" secondAttribute="leading" id="oko-yV-hzs"/>
</constraints>
</clipView>
<edgeInsets key="contentInsets" left="0.0" right="0.0" top="58" bottom="0.0"/>
<scroller key="horizontalScroller" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="ePK-Cw-UmB">
<rect key="frame" x="1" y="624" width="495" height="15"/>
<rect key="frame" x="1" y="623" width="510" height="16"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
<scroller key="verticalScroller" wantsLayer="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="NO" id="SJs-Xf-ZA5">
<rect key="frame" x="496" y="1" width="15" height="623"/>
<rect key="frame" x="495" y="58" width="16" height="581"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
</scrollView>
<visualEffectView blendingMode="withinWindow" material="titlebar" state="followsWindowActiveState" translatesAutoresizingMaskIntoConstraints="NO" id="g0J-FC-bJg">
<rect key="frame" x="0.0" y="582" width="512" height="58"/>
<subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Ode-s8-X3t">
<rect key="frame" x="8" y="10" width="496" height="28"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="Media title" id="zdh-w0-JZI">
<font key="font" metaFont="systemBold" size="24"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</subviews>
<constraints>
<constraint firstAttribute="bottom" secondItem="Ode-s8-X3t" secondAttribute="bottom" constant="10" id="oE4-HB-V0G"/>
<constraint firstItem="Ode-s8-X3t" firstAttribute="top" secondItem="g0J-FC-bJg" secondAttribute="top" constant="20" id="uPW-bq-Yz8"/>
<constraint firstAttribute="trailing" secondItem="Ode-s8-X3t" secondAttribute="trailing" constant="10" id="vQs-z2-uLJ"/>
<constraint firstItem="Ode-s8-X3t" firstAttribute="leading" secondItem="g0J-FC-bJg" secondAttribute="leading" constant="10" id="z5w-VS-BIE"/>
</constraints>
</visualEffectView>
</subviews>
<constraints>
<constraint firstAttribute="trailing" secondItem="g0J-FC-bJg" secondAttribute="trailing" id="7ae-5U-Vrw"/>
<constraint firstAttribute="bottom" secondItem="JzV-HY-whQ" secondAttribute="bottom" id="BzO-t8-fnM"/>
<constraint firstItem="g0J-FC-bJg" firstAttribute="top" secondItem="Nfs-rF-cUN" secondAttribute="top" id="IcV-al-V2S"/>
<constraint firstItem="JzV-HY-whQ" firstAttribute="top" secondItem="Nfs-rF-cUN" secondAttribute="top" id="Rs3-rb-V0C"/>
<constraint firstAttribute="trailing" secondItem="JzV-HY-whQ" secondAttribute="trailing" id="cpi-7A-Gzv"/>
<constraint firstItem="JzV-HY-whQ" firstAttribute="leading" secondItem="Nfs-rF-cUN" secondAttribute="leading" id="eFQ-HA-0eR"/>
<constraint firstItem="g0J-FC-bJg" firstAttribute="leading" secondItem="Nfs-rF-cUN" secondAttribute="leading" id="lXa-Mv-lIm"/>
</constraints>
</view>
<point key="canvasLocation" x="209.5" y="121"/>
......
/*****************************************************************************
* NSWindow+VLCAdditions.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
@interface NSWindow (VLCAdditions)
@property (readonly) CGFloat titlebarHeight;
@end
NS_ASSUME_NONNULL_END
/*****************************************************************************
* NSWindow+VLCAdditions.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 "NSWindow+VLCAdditions.h"
@implementation NSWindow (Helpers)
- (CGFloat)titlebarHeight
{
const NSView * const titlebarView = [self standardWindowButton:NSWindowCloseButton].superview;
return titlebarView.frame.size.height;
}
@end
......@@ -28,8 +28,13 @@ NS_ASSUME_NONNULL_BEGIN
@interface VLCLibraryInformationPanel : NSWindowController
@property (readwrite, weak) IBOutlet NSTextField *titleTextField;
@property (readwrite, weak) IBOutlet NSTextField *textField;
@property (readwrite, weak) IBOutlet NSImageView *imageView;
@property (readwrite, weak) IBOutlet NSVisualEffectView *topBarView;
@property (readwrite, weak) IBOutlet NSScrollView *scrollView;
@property (readwrite, weak) IBOutlet NSLayoutConstraint *titleTextFieldTopConstraint;
- (void)setRepresentedItem:(id<VLCMediaLibraryItemProtocol>)representedItem;
......
......@@ -23,22 +23,37 @@
#import "VLCLibraryInformationPanel.h"
#import "extensions/NSString+Helpers.h"
#import "extensions/NSWindow+VLCAdditions.h"
#import "library/VLCLibraryDataTypes.h"
#import "library/VLCLibraryImageCache.h"
#import "library/VLCLibraryUIUnits.h"
#import "library/VLCInputItem.h"
@interface VLCLibraryInformationPanel ()
{
id<VLCMediaLibraryItemProtocol> _representedItem;
NSFont *_boldSystemFont;
NSDictionary<NSAttributedStringKey, id> *_boldStringAttribute;
}
@end
@implementation VLCLibraryInformationPanel
- (void)windowDidLoad {
- (void)windowDidLoad
{
[super windowDidLoad];
_titleTextFieldTopConstraint.constant = self.window.titlebarHeight + [VLCLibraryUIUnits smallSpacing];
NSEdgeInsets scrollViewInsets = _scrollView.contentInsets;
scrollViewInsets.top = _topBarView.frame.size.height + [VLCLibraryUIUnits mediumSpacing];
_scrollView.contentInsets = scrollViewInsets;
_boldSystemFont = [NSFont boldSystemFontOfSize:NSFont.systemFontSize];
_boldStringAttribute = @{NSFontAttributeName: _boldSystemFont};
[self updateRepresentation];
}
......@@ -48,93 +63,133 @@
[self updateRepresentation];
}
- (NSAttributedString *)detailLineWithTitle:(NSString *)title detailText:(NSString *)detailText
{
NSString * const detailStringStart = [NSString stringWithFormat:@"%@:", title];
NSMutableAttributedString * const detailLine = [[NSMutableAttributedString alloc] initWithString:detailStringStart attributes:_boldStringAttribute];
NSString * const detailStringEnd = [NSString stringWithFormat:@" %@\n", detailText];
[detailLine appendAttributedString:[[NSAttributedString alloc] initWithString:detailStringEnd]];
return [detailLine copy];
}
- (void)updateRepresentation
{
NSMutableString * const textContent = [[NSMutableString alloc] initWithFormat:@"Title: '%@', ID: %lli\n", _representedItem.displayString, _representedItem.libraryID];
_titleTextField.stringValue = _representedItem.displayString;
NSMutableAttributedString * const textContent = [[NSMutableAttributedString alloc] init];
[textContent appendAttributedString:[self detailLineWithTitle:@"Title" detailText:_representedItem.displayString]];
[textContent appendAttributedString:[self detailLineWithTitle:@"ID" detailText:[NSString stringWithFormat:@"%lli", _representedItem.libraryID]]];
NSString * itemDetailsString;
if([_representedItem isKindOfClass:[VLCMediaLibraryMediaItem class]]) {
itemDetailsString = [self detailsStringForMediaItem:(VLCMediaLibraryMediaItem *)_representedItem];
[textContent appendAttributedString:[self detailsStringForMediaItem:(VLCMediaLibraryMediaItem *)_representedItem]];
} else {
itemDetailsString = [self detailsStringForLibraryItem:_representedItem];
[textContent appendAttributedString:[self detailsStringForLibraryItem:_representedItem]];
}
[textContent appendString:itemDetailsString];
NSString * const fileDetailsString = [self fileDetailsStringForLibraryItem:_representedItem];
[textContent appendString:fileDetailsString];
[textContent appendAttributedString:[[NSAttributedString alloc] initWithString:fileDetailsString]];
_textField.attributedStringValue = [[NSAttributedString alloc] initWithString:textContent];
_textField.attributedStringValue = textContent;
_textField.font = [NSFont systemFontOfSize:13.];
_textField.textColor = [NSColor whiteColor];
[VLCLibraryImageCache thumbnailForLibraryItem:_representedItem withCompletion:^(NSImage * const thumbnail) {
self->_imageView.image = thumbnail;
}];
self.window.title = _representedItem.displayString;
}
- (NSString *)detailsStringForMediaItem:(VLCMediaLibraryMediaItem *)mediaItem
- (NSAttributedString *)detailsStringForMediaItem:(VLCMediaLibraryMediaItem *)mediaItem
{
NSMutableString *detailsString = [[NSMutableString alloc] init];
NSMutableAttributedString * const detailsString = [[NSMutableAttributedString alloc] init];
NSMutableString * const mediaTypeString = [[NSMutableString alloc] initWithFormat:@" %@", mediaItem.readableMediaType];
if (mediaItem.mediaSubType != VLC_ML_MEDIA_SUBTYPE_UNKNOWN) {
[detailsString appendFormat:@"Type: %@ — %@\n", mediaItem.readableMediaType, mediaItem.readableMediaSubType];
} else {
[detailsString appendFormat:@"Type: %@\n", mediaItem.readableMediaType];
[mediaTypeString appendFormat:@" — %@", mediaItem.readableMediaSubType];
}
[mediaTypeString appendString:@"\n"];
[detailsString appendAttributedString:[self detailLineWithTitle:@"Type" detailText:mediaTypeString]];
[detailsString appendAttributedString:[self detailLineWithTitle:@"Duration" detailText:_representedItem.durationString]];
[detailsString appendFormat:@"Duration: %@\n", _representedItem.durationString];
NSString * const playCountString = [NSString stringWithFormat:@"%u", mediaItem.playCount];
[detailsString appendAttributedString:[self detailLineWithTitle:@"Play count" detailText:playCountString]];
[detailsString appendFormat:@"Play count: %u, last played: %@\n", mediaItem.playCount, [NSDateFormatter localizedStringFromDate:[NSDate dateWithTimeIntervalSince1970:mediaItem.lastPlayedDate] dateStyle:NSDateFormatterShortStyle timeStyle:NSDateFormatterShortStyle]];
NSDate * const lastPlayedDate = [NSDate dateWithTimeIntervalSince1970:mediaItem.lastPlayedDate];
NSString * const lastPlayedString = [NSDateFormatter localizedStringFromDate:lastPlayedDate
dateStyle:NSDateFormatterShortStyle
timeStyle:NSDateFormatterShortStyle];
[detailsString appendAttributedString:[self detailLineWithTitle:@"Last played" detailText:lastPlayedString]];
[detailsString appendFormat:@"Small artwork generated? %@\n", _representedItem.smallArtworkGenerated ? _NS("Yes") : _NS("No")];
NSString * const smallArtworkGeneratedString = _representedItem.smallArtworkGenerated ? _NS("Yes") : _NS("No");
[detailsString appendAttributedString:[self detailLineWithTitle:@"Small artwork generated" detailText:smallArtworkGeneratedString]];
[detailsString appendFormat:@"Favorited? %@\n", mediaItem.favorited ? _NS("Yes") : _NS("No")];
NSString * const favouritedString = mediaItem.favorited ? _NS("Yes") : _NS("No");
[detailsString appendAttributedString:[self detailLineWithTitle:@"Favourited" detailText:favouritedString]];
[detailsString appendFormat:@"Playback progress: %2.f%%\n", mediaItem.progress * 100.]; // TODO: Calculate progress for other library item types
NSString * const playbackProgressString = [NSString stringWithFormat:@"%2.f%%", mediaItem.progress * 100.];
[detailsString appendAttributedString:[self detailLineWithTitle:@"Playback progress" detailText:playbackProgressString]];
// TODO: Calculate progress for other library item types
[detailsString appendFormat:@"\nNumber of tracks: %lu\n", mediaItem.tracks.count];
NSString * const trackCountString = [NSString stringWithFormat:@"%lu", mediaItem.tracks.count];
[detailsString appendAttributedString:[self detailLineWithTitle:@"Number of tracks" detailText:trackCountString]];
for (VLCMediaLibraryTrack *track in mediaItem.tracks) {
NSString *trackDetailsString = [self detailsStringForTrack:track];
[detailsString appendString:trackDetailsString];
[detailsString appendAttributedString:[self detailsStringForTrack:track]];
}
return detailsString;
}
- (NSString *)detailsStringForTrack:(VLCMediaLibraryTrack *)track
- (NSAttributedString *)detailsStringForTrack:(VLCMediaLibraryTrack *)track
{
NSMutableString *detailsString = [[NSMutableString alloc] init];
NSMutableAttributedString * const detailsString = [[NSMutableAttributedString alloc] init];
[detailsString appendAttributedString:[self detailLineWithTitle:@"Type" detailText:track.readableTrackType]];
NSString * const codecString = [NSString stringWithFormat:@"%@ (%@) @ %u kB/s\n",
track.readableCodecName,
track.codec,
track.bitrate / 1024 / 8];
[detailsString appendAttributedString:[self detailLineWithTitle:@"Codec" detailText:codecString]];
[detailsString appendFormat:@"Type: %@\n", track.readableTrackType];
[detailsString appendFormat:@"Codec: %@ (%@) @ %u kB/s\n", track.readableCodecName, track.codec, track.bitrate / 1024 / 8];
if (track.language.length > 0) {
[detailsString appendFormat:@"Language: %@\n", track.language];
[detailsString appendAttributedString:[self detailLineWithTitle:@"Language" detailText:track.language]];
}
if (track.trackDescription.length > 0) {
[detailsString appendFormat:@"Description: %@\n", track.trackDescription];
[detailsString appendAttributedString:[self detailLineWithTitle:@"Description" detailText:track.trackDescription]];
}
if (track.trackType == VLC_ML_TRACK_TYPE_AUDIO) {
[detailsString appendFormat:@"Number of Channels: %u, Sample rate: %u\n", track.numberOfAudioChannels, track.audioSampleRate];
NSString * const numChannelsString = [NSString stringWithFormat:@"%u", track.numberOfAudioChannels];
[detailsString appendAttributedString:[self detailLineWithTitle:@"Number of channels" detailText:numChannelsString]];
NSString * const sampleRateString = [NSString stringWithFormat:@"%u", track.audioSampleRate];
[detailsString appendAttributedString:[self detailLineWithTitle:@"Sample rate" detailText:sampleRateString]];
} else if (track.trackType == VLC_ML_TRACK_TYPE_VIDEO) {
[detailsString appendFormat:@"Dimensions: %ux%u px, Aspect-Ratio: %2.f\n", track.videoWidth, track.videoHeight, (float)track.sourceAspectRatio / track.sourceAspectRatioDenominator];
[detailsString appendFormat:@"Framerate: %2.f\n", (float)track.frameRate / track.frameRateDenominator];
NSString * const dimensionsString = [NSString stringWithFormat:@"%ux%u px", track.videoWidth, track.videoHeight];
[detailsString appendAttributedString:[self detailLineWithTitle:@"Dimensions" detailText:dimensionsString]];
NSString * const aspectRatioString = [NSString stringWithFormat:@"%2.f", (float)track.sourceAspectRatio / track.sourceAspectRatioDenominator];
[detailsString appendAttributedString:[self detailLineWithTitle:@"Aspect ratio" detailText:aspectRatioString]];
NSString * const frameRateString = [NSString stringWithFormat:@"%2.f", (float)track.frameRate / track.frameRateDenominator];
[detailsString appendAttributedString:[self detailLineWithTitle:@"Framerate" detailText:frameRateString]];
}
[detailsString appendString:@"\n"];
return detailsString;
return [detailsString copy];
}
- (NSString *)detailsStringForLibraryItem:(id<VLCMediaLibraryItemProtocol>)libraryItem
- (NSAttributedString *)detailsStringForLibraryItem:(id<VLCMediaLibraryItemProtocol>)libraryItem
{
NSMutableString *detailsString = [[NSMutableString alloc] init];
NSMutableAttributedString * const detailsString = [[NSMutableAttributedString alloc] init];
[detailsString appendAttributedString:[self detailLineWithTitle:@"Duration" detailText:libraryItem.durationString]];
[detailsString appendFormat:@"Duration: %@\n", libraryItem.durationString];
[detailsString appendFormat:@"Small artwork generated? %@\n", libraryItem.smallArtworkGenerated ? _NS("Yes") : _NS("No")];
NSString * const smallArtworkGeneratedString = libraryItem.smallArtworkGenerated ? _NS("Yes") : _NS("No");
[detailsString appendAttributedString:[self detailLineWithTitle:@"Small artwork generated" detailText:smallArtworkGeneratedString]];
return detailsString;
return [detailsString copy];
}
- (NSString *)fileDetailsStringForLibraryItem:(id<VLCMediaLibraryItemProtocol>)libraryItem
......
......@@ -22,6 +22,8 @@
#import "VLCMainVideoViewController.h"
#import "extensions/NSWindow+VLCAdditions.h"
#import "library/VLCLibraryDataTypes.h"
#import "library/VLCLibraryWindow.h"
#import "library/VLCLibraryUIUnits.h"
......@@ -305,8 +307,7 @@
}
const NSWindow * const viewWindow = self.view.window;
const NSView * const titlebarView = [viewWindow standardWindowButton:NSWindowCloseButton].superview;
const CGFloat windowTitlebarHeight = titlebarView.frame.size.height;
const CGFloat windowTitlebarHeight = viewWindow.titlebarHeight;
const BOOL windowFullscreen = [(VLCWindow*)viewWindow isInNativeFullscreen] ||
[(VLCWindow*)viewWindow fullscreen];
......