[vlc-devel] [PATCH] macosx: Add a new fullscreen controller

Marvin Scholz epirat07 at gmail.com
Mon Oct 10 20:45:31 CEST 2016


This introduces a new fullscreen controller
which uses NSVisualEffectView for it's background
and the icons that are used throughout the rest of
the macOS user interface, hence making it more
consistent with the overall look of VLC.

Additionally the new fullscreen controller is
resizable and, as it already used to be, can be
move around on the screen.

The user interface is now described in a interface
builder file (xib) instead of doing everything in
code. This allows easy usage of autolayout, which
is heavily used to allow adaption of the
buttons/sliders depending on the panel width and
height.
---
 Makefile.am                                        |   7 +
 .../Resources/Button-Icons/VLCBackwardTemplate.pdf | Bin 0 -> 5425 bytes
 .../Resources/Button-Icons/VLCForwardTemplate.pdf  | Bin 0 -> 5424 bytes
 .../Button-Icons/VLCFullscreenOffTemplate.pdf      | Bin 0 -> 5515 bytes
 .../Button-Icons/VLCFullscreenOnTemplate.pdf       | Bin 0 -> 5720 bytes
 .../Button-Icons/VLCVolumeOffTemplate.pdf          | Bin 0 -> 5428 bytes
 .../Resources/Button-Icons/VLCVolumeOnTemplate.pdf | Bin 0 -> 5472 bytes
 .../Resources/English.lproj/VLCFullScreenPanel.xib | 252 +++++++++++++
 .../Resources/vlcmenubaricon/VLCPlayTemplate.pdf   | Bin 3034 -> 5399 bytes
 .../package/macosx/vlc.xcodeproj/project.pbxproj   |  42 +++
 modules/gui/macosx/Makefile.am                     |   3 +-
 modules/gui/macosx/VLCFSPanelController.h          |  83 +++++
 modules/gui/macosx/VLCFSPanelController.m          | 404 +++++++++++++++++++++
 modules/gui/macosx/VLCMainWindow.h                 |   4 +-
 modules/gui/macosx/VLCMainWindow.m                 |  14 +-
 modules/gui/macosx/Windows.m                       |  18 +-
 16 files changed, 807 insertions(+), 20 deletions(-)
 create mode 100644 extras/package/macosx/Resources/Button-Icons/VLCBackwardTemplate.pdf
 create mode 100644 extras/package/macosx/Resources/Button-Icons/VLCForwardTemplate.pdf
 create mode 100644 extras/package/macosx/Resources/Button-Icons/VLCFullscreenOffTemplate.pdf
 create mode 100644 extras/package/macosx/Resources/Button-Icons/VLCFullscreenOnTemplate.pdf
 create mode 100644 extras/package/macosx/Resources/Button-Icons/VLCVolumeOffTemplate.pdf
 create mode 100644 extras/package/macosx/Resources/Button-Icons/VLCVolumeOnTemplate.pdf
 create mode 100644 extras/package/macosx/Resources/English.lproj/VLCFullScreenPanel.xib
 create mode 100644 modules/gui/macosx/VLCFSPanelController.h
 create mode 100644 modules/gui/macosx/VLCFSPanelController.m

diff --git a/Makefile.am b/Makefile.am
index c5c24cd..eef85cd 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -162,6 +162,7 @@ EXTRA_DIST += \
 	extras/package/macosx/Resources/English.lproj/VideoEffects.xib \
 	extras/package/macosx/Resources/English.lproj/VLCStatusBarIconMainMenu.xib \
 	extras/package/macosx/Resources/English.lproj/VLCRendererDialog.xib \
+	extras/package/macosx/Resources/English.lproj/VLCFullScreenPanel.xib \
 	extras/package/macosx/Resources/fspanel/fs_background.png \
 	extras/package/macosx/Resources/fspanel/fs_background at 2x.png \
 	extras/package/macosx/Resources/fspanel/fs_exit_fullscreen.png \
@@ -863,6 +864,12 @@ EXTRA_DIST += \
    	extras/package/macosx/Resources/vlcmenubaricon/VLCPreviousTemplate.pdf \
    	extras/package/macosx/Resources/vlcmenubaricon/VLCShuffleTemplate.pdf \
    	extras/package/macosx/Resources/vlcmenubaricon/VLCStatusBarIcon.pdf \
+   	extras/package/macosx/Resources/Button-Icons/VLCBackwardTemplate.pdf \
+   	extras/package/macosx/Resources/Button-Icons/VLCForwardTemplate.pdf \
+   	extras/package/macosx/Resources/Button-Icons/VLCVolumeOnTemplate.pdf \
+   	extras/package/macosx/Resources/Button-Icons/VLCVolumeOffTemplate.pdf \
+   	extras/package/macosx/Resources/Button-Icons/VLCVolumeOnTemplate.pdf \
+   	extras/package/macosx/Resources/Button-Icons/VLCVolumeOffTemplate.pdf \
 	extras/package/macosx/Resources/vlc.scriptSuite \
 	extras/package/macosx/Resources/vlc.scriptTerminology \
 	extras/package/macosx/ub.sh \
diff --git a/extras/package/macosx/Resources/Button-Icons/VLCBackwardTemplate.pdf b/extras/package/macosx/Resources/Button-Icons/VLCBackwardTemplate.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..d8c49df8fb21abbd94a643cd2be70849a21a87bd
GIT binary patch
literal 5425
zcmb_g2|Sc*7e`SIlJ%zRY7!#Nyt5c)CNsqtOJVG5y2i|4n5~(?n2<=8ib^V}YyB+c
zmQa_H7TV>iT-z<OCnO~)<a<Z7+~xc3 at ArLvzcJ4|&w0-Cf6sHy`JeabIa*r5kZ at Co
zUT at E@k059$0?PFdhM1WFb_`CSFbIkQXPf~mCQHcR16C}mkYUN7ap?@e0g48kshmKD
z4+4q=g+6_JiA0D%$Y)U55K;T7qv5WuEgA{GUI`cHJU~3s6sN%vG2?LP4~v~v2FR_v
zCsnIp&q^%XY^kg)O+J_%Bb}FHQ<CVv#-PYg$!3M4KO(uPh;G%qB{Cvnw6E{o?JJ$_
zfun+VZ9B6rz@>C4tKop`Q5k5)x at Swo*vB66){W<9q~t^~(gjioufgIP^Ox5*>jI|V
zi7(w*HodPyLE2`zhVgumQW!T&c~s(BBPDg`$GU!&1Ac4WdmV>+YWc|{Xq|#vy2+YW
zNg2Qv$2z`$icjyqvZ6HFoa%?^+CFvNCtcd^vXJi*MLYK%T<c$FT_>x#&7mNXyU!DC
zd%RwK%x4D+m5{MqDp~iUJhnunoSAsMPHDMNd5kZ`%dZ5m{qh>Tvc=t`s{H(bH&r{v
zWG=zCrgDPW53+aiQE6D2-8q}m((m+^55f)a7Taw%k=hsdaf9X#_F%4#&k1iI?^P!>
zGoqb}W-m>e>b)G%xdNGdf=+CHmoRc}+WCc)Uwv|L`H+%NeY6z*q6{>ARw=W8jg&4q
zD&*?e&4{4xh@|h9I<xm5K%>zIDz%Ots?5GRv<pA27&S&%I~I2JSi;MDNeoEZV&RUb
zo`$xD7DNIe{cd-o;;dQSEcVs8H=e8RB=x<*nK at Y&1>LKx#yVY&V4aQ0ypbn}m at Q74
zMGRBCPlg;ac$+1Kxwq8jX|_!705K+ag|te9<CC|YQ~hyDvfY{A72wZf-(|_pOr7N=
zO&)4EFr_u1veGVa*?Y}>A>AR%8e^n%rPc2&QqPta?p}jf<bF*9D`Q$JGr8Mu#qwqu
zjl?B)W0X+l at Ky!LX607diP$ZUi(Z(o4U%5Bc?nh#9&`U0zH-^im?eIT_s0$R$yH0g
zS+SV924%Usca58kJSwIhDo0nUGABAh)s~Y<J60&ESX4D?6fIpJzdpyiNcn>XUe-6}
zti_^6LXg^t*y#9<+NE}}#ighc#qVnsT9-}ijqAejv`)$mTzmh at p;G2-T<Z0aSF)4%
z$R*mlvuewiZcbdP=tNRbmg|n4T%&BW;fA#dG~Nd1oKOMvwE_6 at n&t(E!VMIXV{`Kq
zoGuzrT$d)tZy~WatLLqEvUVCN(r$t^83fC{U1o1(l%v>a5(JE|7i!^EePiI(rrEzY
z9%~G5?0IgwQep4jhu1x+X2`DNi|g at r$bP8;b%8cIMzglw|GZ~JiFEVwp#+A%Y^%(0
z^e}Q5Hw+Ean$obYEAFo6y{ufSrF1O8=r*RSp<8Z;YGp*V+ID$v+`HQHv9?K-NJ5SL
zu0 at +tvewzC3YUiM@w1SjqH|&!Eh;TVHX^dF%5O={by7OVDw90T%^a#NwDfA$-aR;O
z3(vPXe6S)-xJUStFm*iHPCq2=hr7yj>4<ezhawM6AD?!Q)uHNk>0LkCYT%^z5RNn$
zvrqww^#*mT+)>tL+g|7QD&A!pRv)=|WS^Q#aGYy;lVLHn*o&E5QCyKFEEAp=rj5G|
z+G>{UzqmhB!AJkc{?dAK1`=ZNFuT&x^9byS_ at 3T9tUBqp9I=yX5xI$5G}EN%rP;<P
z%PI3Jb1Ms^TL&$*&+I2}%}sA~Xxtk#ddvXW;eErajAncP at O3=_KbfDx*Q&Cpa<AIR
zAMG1_&3T>l`f}gK-qnWLYUAoMYAE&P>$f={ch6tnzP?ONUY%ml;SrlYo-UK#Z1{uw
z3zrja?oJbq4sIRiBAp_<;|scr4re<T at ZA|((sP5)-E)Jv5DGu+hi?tfUH8!FIbmEA
zqlckja=d@`zS>@WDMg$p{z-i1!&=2yInrA9Ji9y}nw5*&V-K`Px!0Q-jqUq#)X!a@
zobd>8 at Uh-#w=**=VIn`}WXdsz6o>K#l5g4BIL-;qsh4cRer*!qG#b-kALZF;v1$9&
zEwg*2S$@oG7_1+nRP9QW*pSP7`iM$8oRdb~OD*pzQhspfw!yDOwa??v7wp(G#_8GK
zL($jJx7B~EuVlxt^Elq05ti{WxPW^Lbp~~r?O+ma+8NZr{K(I^j%p~2yZ_SLaYH2R
zqL<JovZA7_*XN?AgBR1A?BnL6h%QptWrgfX#<aJ$iSynvhr&&cn#g3Tnp|yN)vn)e
z(&hkf at oMneel@b*;b{ufBgE97@=NN)P4rFO+5OjqMFLTGQP-U?7VjkQkzflC-#>n%
ztuABqNx#{Ee@|IQU$s&9i!Sfy?W6iV8r|-L6Ro~a2 at O};qHfjRpq;uML8&PGWq|W5
z6<`2IJ at Q)WA!pQwJjO+7)p6BESF$FbPrZt|6iMw=uh|*7`fQW;U7xnDCDYZ at 6O)A3
zEn}27vqUM?XR966Ul}(VBTP$86IImIo7BejTXB`Tljez>L`42ZSClcT0x5*oV at ix!
z^z^aQZ_k`fFxn%i-MF??IY(Jhx%|vi_fcPhHdEPa1+Ky>(7yS^nGp46{htY{dYU))
z<24VYEZ at gT{&;Pi){G3KRr{Z&1$e?sqDlr>)?u1ElWDgN`|Rr4ZyvqnaI5X+NK$5U
zcp{LR)qja+R0XJ-sRpa`tIVjR>cVy7^)Bf59L`IljL}6&)jz4FA1OJq+cmB!w&{>@
zX2lgII+7br!XK&8zv8l4ea7zXve0;+_&m)CO*c(0nuMkV*anW3eJFcd9!{t9Rt`j7
zS$-kq!r6@;uyDc4=i<V*7rxI{M1FtCG?-Q2iLJRyd;IXho(D;pyY8Ux8a>!~MUS=B
zqlW*nVEX*e+CG``x{yiP+TU5f{Km3o4{%01sWr6O6iWQ?jS#XvxsSX$+3RLY4Ql3e
z_nG)p=QmDm-LQ4}%NxVpBdgj+N~eN~g-nORR_#v02xGkLMp?_wyov3wAKkZ?r<PJG
zx%oE=a|KuXKl)B>a=qozQOrLZ{ImP%4kto*OqAcN?4IjKSM{C9J at GD~GT~*jxandG
zvn74?Ev*LZbOo`Z=3U6GmII0qMY7`R)K at 9{wG_?T9|!%`+M3_w`bfc4KC>`|tbO_Y
zfg#gVu)VMgKUXy8_B^Y6HCfKhyZQsZD=K$Nw}*Z|+`H557pHc}?>Q606B#L!DTf+f
zHSBgVatIA?3%d}-9iKV$IJodk!=0ZDaa*yOyTZD*HB_~|DIO>U>U>uYrM!sd?fC8H
z?*wVW%&}^~w`w^0z5h9v(JG at b4~HKwREb}#>hZoEdVgpnN+XKB$#c4~ncLPGUHign
zz<wyxchUVN4a at Ng+bjFTL$BHAes38qsYWBzP{MF5U(^eqdf9s=e<v^+_#|sr>EN0V
z)ULI~)_tkz+AT9h?`T7beRndPS{~M{GpA_pKY#0|*&`nxCyY%O_7?W3o>o1O7LZn0
z_ at t0S^qFBzN4$9RelRxcU%Spm=S+29{!we!V5S!a{qgWDzpJI&<Mp|e>g^Mkb~f*t
z7|ZN6eItnH_H}AU-4?Y>5r=2$BKwyNCnTqeS6?PZ>=IWVtS)`^{kuJHrXUOseZE)(
zN0PczQf<zCV{pcjRms at oPc<p#Z)(!7Yfr}g%Zf1w1 at glVm&yXfj%izz^rF&5IWck*
z$7~+O?0G`yL<1q$#H4G{9<m<(CO38RSIJTke8ZFx<-^aA5c}j at -J?@wwI<TH^*2QO
z$#3OH_u0Ir5GU$ZG5-u(0!RWChh6}UM0`Ol<WqS(1|4b;KxGLSh7f=R*2h9FA8O#j
z;4=fD<^cgr4pSHbuDCLVEC$rT-Hv2IrG<o3`E*wXn<uHd;XHc4!d51iV+l?{4J`2}
z1kwbFK%kL03>u9yLZH?m5bHoWdoKOIi8%7P^iUcDgaN(-u$cZvj+VAi92^11z?jf&
z2KH1Ml;Q&Qgdq`d9Mr^ko1q~DH1PbTAQx`x%bNmH@&@1xxJK|8fIUM<rBj7ez$MgQ
zD4FoIxBGHCW}8Gj at bMTzs6Qi+$sy>BUcRaWWzq>c9vFLsJ&(i)V%muL3>UG3D@`0i
z!_jp%5g}0U&rF0Dv3YDzJ5<DGaRhh~L5B)@2?Gy~CDVY;CqYn at PY=L5TUyNvg1-nl
zK|&!94*=oe;qY)YoXZackT at I;K%f8=3I<BR1Q8q|RRrS*)_&GAugQ`jpz)bJA!vK3
zL^IW&8!9B|=q%u1^X%<EAHWg7=TO0ETs9!0@&F_p0kGL$z<qia$sW8dM<AqfXbf9R
zVrVFnjz^l1OtF?0RxmOWg at j>@Nhp{V+1v_-vN9%{W3eVE6JwMa09xVOy>sS~sFfIL
zZqbrU3uQAn!q19HmPo8Q5(gubu_PGT!UO at s;=m(JF$gjaX^bV4F%}DozuNm*u^AwF
z?yu~yVCjEsq5o{3uPpxQ8Sry)!jSkeQR3&IC&CbDS0oOPLF4C~9gjfFA^uwOGv0Y6
zU?eaDBL0bzuO$DdWIkeDxm*_U+o1jGd at g@({f~PWV&NY_n2(z|+0TmpN6Ukm<F73b
zE`Xki{)1bBv-pMFK>Ul;@TbgRXa;<<=l_Ts4Db1v{U)Tq<3xXrT!f#`w#2z)JBRGc
z-2V$1o%R_QFO<)k%OrFfz+f>X0Ve>VA^%`hIt?$B<n}KyGZ(3nh%#phznz_rCl*tZ
zTktHf$3oB%!RU+tYA8#nL;M?Z_~axk=C`^&&HmvCGvLo~{?^AnEr5yilVZ@{7g8`0
z at +Fajv_R0|OVTtr`j*q at ctOIBNDKn;nLobjG|e#v31kZvHxO{71~LS5%_Qf~ECQWl
z8|N?VgZo0R^KB}m at f`X5MW1R;JH<cPMaTwwR>oi}i!TsDQOGZJBx-j{xekd#DC`}L
zO0G7~v=30~HaDd!+%CPGlz=K<qiS?9cIVUu)InL5$;sL2q{Y|$6AzJNWHe>A&~0xB
z9%tGf_+YM`GTtN at J*{)*J?>XDyEvY(wCIF!U*S#ld(7`n#;dGYvgU2y`;VGTG|w$~
zs^0_MSkN(Uv_DC1$x8Q`k?Rp<JkRqwA^n5q8ol at QE}Uwpca~4BOv}lfH5)?rAG{6t
zhJ++WUyYXL$CELCVPeVC&zacN<g<kriV~2a|IRF)&Wr%S!v_g=`B1)q3scO1B255i
zE>{ReN-oG5u;m1Bp>xFyIJWdLBZGMuElI{`tU1UUBx3~1!o(71Zj7)%kx0fk;(wR$
z1wM5U9jSb_00c+kvO?J$0Tcr`@)>j{O;Q;lQAFZG2NH{(V>R&K*H at -~|NOF;%`0Rd
zwxt?~Gg?#pWW)S|f3VW<=in~#pY1-&c^$i3`5FA7x87)&_94 at QP6y2nRNpve5OLE|
w;q}L9`FF}Dh8sLQDLD_;EQ%!FR8{)3RY6|n3q^cJ00e`;q9A&DWQrB!-*TynasU7T

literal 0
HcmV?d00001

diff --git a/extras/package/macosx/Resources/Button-Icons/VLCForwardTemplate.pdf b/extras/package/macosx/Resources/Button-Icons/VLCForwardTemplate.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..54135e08db32d1c84051d3940939a80aedc1892b
GIT binary patch
literal 5424
zcmb_g2UJtp)&^`CDN;uq#fX3)liU<SiX<9BReCR?h9p2B%_K- at f*?{<P!SbTsY6jm
z=>tkpz=9%!%Fsq(=prDX2q+*gK@^>F{x at s=kF`Qh&e><5?|x^uyEUv0jUjL-8l=(N
z^V?Gp5)1>gJ$yj=`hYo&<;C{~BZM=yfH9rHr*Q#e2ANMYq*2&Z8ej=V0=8t97tIX@
zh6{y0ecTBI5RcELk(nSt`=zt~_Vz8xQNLCA2c|uSJyi)zfWpEipx}+mZPt0NT=!6{
zM#_Q_owL(WPEOqDWNMgrMw;ohXphZWIs0Wz*IIkPVsmn+#?8Be0|G|-`ljwzbhdkq
z@}}B?Qi`Es>Q<Yez>2dH;H0g8t_s9FbBZ)+%%2lmDF_qK5`(!6=2jA4-`S}SpnnLw
z`C#?zu?{J5)7eVe%R#H`h<U50*X%3B#2)Oc?PplxcGtdFvwWzS89Rbh%eto?t706J
z1njb|<$A=q_5Pd^qTFUvKTK71tL?sM*H*`XPeluYj-K4&QEO7WLS>I-Ry6yVGt%sQ
zz0$bb0R|!}Nk%MIy<`pMnm{f&`h2ad3}0 at XE5^wz1u*?<lsN^<yGdo4nVxUU4vb6O
zgzk=K`7j at +25}Jy7>UDaI}#Ef^cD_6wd-=t_v(oq^ZNLc$^qtJx|-VsS2x%77gUlC
z+2qXMoJMQB9#N|RO+QCQH%~>4+?cg}CAPml)~9et)~)`K7_LMD>_0D?+`m~&-6+Jj
zYW!}1cXvR{50bXb<0p_v<cZP^XHS);Rt<&XW~D>M at mt0ZR-KD_{V;|GN?6W6 at WNT!
zOxu8f$0ycxH%iaz*Un?cZoG9~{~)Gs46AQrnB)Dhv>an|D}Zr5EV(*^7cie2GY=cK
za=qw#O6y&U80w*<>5Ei}-T^{b`dV at M0PE-PI%oPLWLI=2|B!{t$4sTHn47uIiJ3mt
zaAIb|fc!dhuhs8Wj`?=`u5JtyQx{iyuuLgcoPT&TY?<S2WsC$mPh$G;{<SjA63Wr5
z>cV6ZL};rNXs2B3iplU@*2`WIw|I+h-MI=Q4GnwrC$4n$>#$Y(mmiN9*uSz|{O#K1
z<jn}f!@ZjwOxGa7>cK0ivSmbqHCR!`h;(4Bth_;4qjHYqw#aR1t~qialyNKE!>$`F
zYs7miUI;%F*-;~D9-f<rxF-E$ja2LE$)gcnD9(n9D+g}BAG0i#xE>LIXJl-}G%k3R
z>fw}{Ldl)clF~LLDY=#1;nSPtOn<62(E~@CVr`>}!0x61cZ~`$>y*EiRBU*9hLlZ-
zmX*C^Y~(HybEi_qHX9S0ksQ?~NRyV&%6F?RjCIna8}+<_iEaE1I0g4Gs0ljtkH&M2
z{*65^(d(p+9({7hnXC`*I={RgXAbWd%TnU0BEwW_>OJzE1FnfT%M3-)JXW+y3?CYX
z4`YYH2RF<po7CoZ*K=N%N^X!n7o~F_)z#3w at _<5VK)K at HHSCC~n!@q6Y58D$<(klC
zJK|Ednkw)m4<6ZXAVEf^g*O_M8VXDWM(Xmv$28Z9shum0aVF|pmK$u)sN7O_a>5Ln
zX?pr(Q3C%6|1v**BGz2fH(_I)992AEYuTybQ?uu19mCbg>RlRl&bDgVXgq<!wZ;wP
zfn1G2^)g3<Nx_~snZ43=bnWspC1;K)+WAD-CpKy4l5<_?u|>H>Df|L{K0jf?VbDzF
z+VPU($x?2b`}*_hjgsIXgD0t_*3M at jX96E;Jj5uGeoqUuQOGfBV&}{?sko at L(F)QE
zTnZctyr?GLk`~GRM!VA!8!a1;dXJvd0uH!VyA)8&9-Y3U!Q;kq<G35j49XnKwsS}O
z2H&vW#JsuHx4n0hcB<lpl7u2cNoLy~+w+c at +uFAkD6Ubm(&}&uPn<}UNNm>L==jR+
zf`g;Yq_w3($Bkf{0N2Q@?wr%9wpm<9+OEWOpBoPyAa?ld567Xq{nNKT(RqoVP(f*+
ztWasLzqnSlm*0#Fj1IgUc=f{;>F|}LEsh!H8EzC~JBMdZNT))Vx0T9!kEJQyD7L!l
z<ZJ0>vfVr=`C!y!X57WNbCz+Ig$*S4g6k2i3#?18nfT+XB*11gtivM2xzk|B-l|>m
zN5vWY>9<js{jfa6il#tqHvPp at GU;?$0{JMpuq#LI at q_zXzva}tjLgqEaAcg-v$w}e
zQ(4nY^PQ%wInCVZe1Foxq>nyX?0bl-h+9lcJ%4nkcL)6=H|Y+dp&;VXYgg-^f*~a?
ze7E4DqJmzx5@$;nx~q|!gPSxmM=I19-V=*zZ*L3Cct;=d*E_2xk*uIs)w;f2vt6&v
z658U@;Ig+WxZd(b9Nozm?P2w6e8~>#j_%a{+x#4!pgX7Q!9fP+BIhY at 7YElrQQcOX
zH2S<>f54-sprfx`r~6fx>&y00%^u}$$HB=~_ZRqvinfq at HPw_$_XDhovVR?5{YD08
zz*(n^mU_ at tr6H#YK|*;%xlTpO^vjvCkek8ePNmAA;7!+?T<hH0x>n7W&rVL`-?WTd
zy`3kBDg3#~T4_wTQ5S~JLr2RiDm5uiXtrWY)u)NktY}!~c6)>_q6p51)}yZJGN_5;
zSKeK{9;I`HSF?Rfo?M!ov|QoU7mlOucvZTb%UW!av6n^jg{!_w&6>a96*N at t9>=Mi
zh?6<Siv4(dg3=84qLh1Fp?Eq&uZ3J2V3-_K35uoM*X}c~ZNGc=p5?u^yCX5lvHsCO
zd`kaKj!qe%ps(N~-!DHWAFmEokJKpE>^Ys0U^Pw^#FSrFOgwY#%whY8rtqdyy2(Wq
zbYw955D9mtQnSKtr_!AHyVZV?Zjl)(lPV4>Y$OS3<!R<MUhtvdU7<hKs<(6?xI(5l
zuK4<PCx}1q^~=EQcf~)ZO2dD=iS}XCcVa5*D9 at feKJqvwIrIUtPUmq@g$84{QziFf
z)@=SSs&2_^)IrlLYW`sS`a8pfIlvn2Bv(@A<E$cwt9^|$jrxo>#k$;WsYJ|O>Ao6y
zDS!LS?w at wcysjSZ9$DW$k~ia>%colowyJjGM`#lT)dej<8IyY<`yBTc#^+g;vNNl*
z(|J|>AKhnm*xz&N$mL%5`Ni={hYj98EM)&!YR{ds>-#RGUzmz2je6Z2*i_O&Z%N#A
zZ$krSwun$vIpuq=<%Bdy+DLj+{8-%a4buAU&%A$cZOv at 5e=3DulbjuAq<ZW9i6QhQ
z$Wch~FGbDiJ%5&tO&78=sy5=fLegi{d#I26T{|6qwP^?akv2IznG`o2cdB8m;jo>K
zrJsM>!Qv41#N4T8KG|0r9$ePO?#3jC9_-rFP}cS~cOV<6bze6W_v#Sm!0&hez>DMO
z&Xoi1Wy6Qwd)%-aEz>#ZWVx at nEb!I(9 at qPRkA_A<ltY+1oM#)G*=?PNYF-%+SPUh*
zFMG7AK?Wzax3n*C=neD6A1$NT%8 at Wd1m7RS74$-9UiVgH1_7g9&r?G41~-2ocWucv
z>5ETPZJEoNq6|g%JxH=?c~ZHRXr+2Q|K8>KGasKtjn8KHX7?#vQ8<y{nUJ0RJex&u
zn`6udyn6e7Fg)ew(CdfNX1Z_f+YmaK?1DmmJU!3tYUy@*b0e;N at 8r#(=FrLU<X-e!
zUL?D(Q#Itipk;<IJXagsziK!tHa>9EEkZzOVCl*7ys;mrj=Y@#(OA^QVo^8})t#bh
zbKx6>)fKIZ#(ICNNm2h$lYU)$x*yAz4ueT853=gIP>so_Y*m1XZC?xW-XFR;`&c77
zyXD2rk>hhK?&W7kD0y60Nj~YLT)w&Q_7(44!{I+H*ZuWKy86#?14k%_4f^Y{VC9*F
zNU~{R=#=>LsrAIa;}#(jVO>HEhb_V8bIBYIjSANCBr|w4Z4f{b7RY=y7p!GR<I+9B
zL{CpTi_Q-auGrK03>sL=(VS$==K7PlRC^keBdWTg9IEH%opd(KP&ftFGQ=TZa6LE-
zhJ<5Lx-g^;46zjk+bWc^U{n8_h&7i@^`p>)D1`3-47!JowV at dp3xz>Z5IT5|mIavt
zwz2~|L*Otd7ObbcM_U^tBzW;s;Gb`5=}iGHdIPWp>;pJ7z=FmnQ^|ZXVCUz-7fm=@
zm at nOq{tf|$O!1}h!5%a(It#BhdaFteOsC at 2oKO}p3l53qO*akX((D2)?J0r26f9M3
z2LS{Y{^<*F0w#wk)D9Lf87v-7fL9|6t%QaXjz!ae+9yGwD3|Jqvo$nc6cql#t9kSJ
z92@}n`};%vkx(|*3xH#>SOA6q5D17+0>TSm at yP-Ri?`*Ao<&WDG#-UZ=kSHxgGHLj
z9&A58UQO*Y4kpLK;>!Un9&`Z}l)`2L0x}1HLty}uxdiUhvxxTK%vd}=nMI+Q84~>b
z=u{jGZj40|4G|C+3aJY*)YH?2ph;LPgk*?8V|0-SG?J*N4+vTKcJBf`BDErt78VWJ
z6h9`7#s93>0EI*lVFpA935G#K5J+Ppgb0HhLa=aM65N<%j4(35d{+F`-Y<&v0nu}R
z#lvT&|20GZH$Pu7{^=QT3vNOa*)c(6=R!+_z>xNEEDoiMTQGJU47PyyYsoKo7nKM-
zf$kabZ<Kr``Bx>24r|Y5GYH at M>{sWrxeM!m-TT=W{uP8pzgdv|qUit0yfAWnpLyYe
z&@z#KF-zer?sIG)d?z&gEi!291K;fVAL16e_oB~!<5I%o1m8z4z%2$_!a}TFK(;jZ
zzd}Z(e8I)><1!W^36%oS7&MW?@r2Oee<77h!SO|*eaUAQJXPdTL<axc*+qY1&_%HY
z#}M{d at M;1GmF7wIWAN1o-_H%7Y=lAoR at JB3znq{C{2k3dn%JiWVI2LWSZMB_BQOE9
z6vu^G0k6gtMQP#a+mybL7DTxbu8YNfNgrP|nidiUNti4cY%jo?>_y`(^pb49BoXjJ
zvawxCKG>zyy4a<H>n`M;@3g5Fv|D-j*zuXdmX)rslf~un!3g+LHWIWu#N7c!z@(0j
zhQyW=lPx at DyNPJ3)cw3$F;R%Z%?dgt;XyOSh?6Vir>Ey<W0v3Xh(2W$CZQs+i)vQQ
zdzNf=;sa4NZlZ}ddPVK(d+cvWW^N>2GUtMBU-n(4hx8vVM#`^UwfSA&`;RJgB*(#L
zrr!zKnAI_%b3A6{s&$TYBX<G{IL`TMzWswl<=%%H#g`iDZP&z?CZr|L>klFOPu>UI
zeSM=3RUH!NMjD~ML$T=T7br&SePQ@>Ng_<p|3r(kEzJ{fa)S$-d<b{Ijvhz@!}S1L
zHk%KIi!R6(Fk^YL!3(8~aBS$N4<{i=Xk8>0j)r3~a1;We3&Ws@#%MG`7jBF+Mic(K
zggfx5foM(UGI>I9BsRm3$>M=gfHjv!rBg(85gb7vd~QHukPAso`0wj0Q+jkqdgsoy
z#$D*pBR`>SWH;vAcG+mT?SOr}tzQ1>nmv^@yDy9R$50c?Uj!I->@+66Vf89i8rJD(
ydYqgZ*jE~#XGSio4g at h}RQ_B>C{d94JFCL9%;gKXG*1u;hJk}LG>oi_LH_}kY>U?b

literal 0
HcmV?d00001

diff --git a/extras/package/macosx/Resources/Button-Icons/VLCFullscreenOffTemplate.pdf b/extras/package/macosx/Resources/Button-Icons/VLCFullscreenOffTemplate.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..e14daf4a5b6463363af25f0fd3dc6c0f79f43a12
GIT binary patch
literal 5515
zcmb_g2{@E%`$wC`Qr6OOGzpP2^Uh)zlaXb{QW*Q1PGe>;%+}1v*dmgpqLNA~#Ahj$
zP=`V%sU%6|*v^S#PxcZD`M)#LcFy^}@4Eh<>l*XS^W4w<-p}v3 at B4SZx28S80)~Ve
zKs0-Mo<4`5p$I73Cjeq(1lZ76etdr at 3Y>8SEa(hAjSE;X$b1 at sMqyKFfE^SKIFea@
zG%o}c2?{NKyp4?^JU*93W<mt*=T8MYJGUsuJ*^B5&3b}(t`eF8M?_7+p+7EnSns=X
zeVy1nX<J5oz6n82PMmlwGfF%=%c?NmXOnjRo;6l$?R^l5`T10f<{jZ7A!B`g(+?{<
z+x^CP(`{iHH{fC#q>XT3#VHAB+Lk|8g<@a0#acFApBGyxh!W2gLwF1pRGE(6HPHYJ
z)`i}xT|IZWLt5Nwu8Q_*kdzm*Kzd&2TqPz}`*Te{!w$Ez=DoUIonlVn2wFY&fkvW=
zMM4^|!@h>=ljPO=uZ#%gHi!CQs+w0#_c^DwM-1e2yddn*vCTd;mNhF>cG=~|vk$wY
zt<TgeO?d5PpyJYG#S%4cN?{8Ha_RABYSzf|<tDgdoSZTM+b^ZeDPG=fUY?WV`?h at V
zgv2fQ&SX{q^GRkH7nOpQIFPkHCAGG<WDu_NsK92ozSv>Ek3XsGWe#3c_d4t8<+<Uk
zO4@#h{DoUH2AZQI>Xne0KhW{b({Ur$<{V#(?Ws=;C>dJgRli>hcT)lyys##{f0LL7
zF(UBJ#QhNe?vR9al8($HN6~2X(K6Lj$ICMB3`OGRWFjW;n<w_&IUP4zmq3H0Ea&fi
z>8 at j~V`hxUr#|X#lvyyUS-_58d+WZTHlc6a(8z(1?_XC|fpxeY!nhihUY*SgStv+Y
zKn#;S&jlXWewQJJsgtyNnJLjbU>tREt+;%M{U7f-XZvH;tmsZ(my5fOoz7S>KYNvv
zFmt@&=&b61{CXR|)$dgf2X+UpZj2Js5Lc>Qrj#kpKd=e0%=K4gtb{?4#LR&`Yh{}y
zl;c-Didus*g||vWOypWuOhxaoU-sH`v%mNjlT}z5c+}%Rab>GVqgL%%ek5jK&&mq%
zw`-S^H=zgzdN;XPNui?Zp)09t%1w>!p^CCZ^Sx`=$eWcnD(6dXjoq5%nJ at Q28Mnea
z>Z;kYM!dh`+35YT9rq+{q6>;pg)%?flWtu-btt9_!%;oAa^TnZ<91~dS7Vazj*PFE
z!G*6<JCJd&MA9T)QpUktT5e@`^votXtDmYZ^`Ws=hK_NiP;V=ME2UzZdpuZMIx+fU
zwzR`dZIZKOV(bocrioJaRtHOmk$kl#Sd(_Z%6F at 6Ep)SF8uk5w$*p`<oPu{0+|nTP
z_r}wW!Hqqy4Ax5 at I`r(WJJ|@?b!K at z&IZ{pmaD{5Lr1CHtM|F?9#SaYEISlO^I6d<
zF}!~mIczu#-KRRMY*|y#UC$XUlT=-EI!^Z?rmLZQ<z9udkP5}!QtX)NdnFTXGxFj1
zDyhh2+mkZ3SSj!&_Z{40CP7ALMK_w25d>BOqK5o$3C%TP>Zi*R+)a(_D$G<ht2RG6
zHfasdu{v?AG=+bVe}SJonP{UGnDXNzIjVTbmh$7_$LG$>xkjs#HM%tKo@&*0(0m3*
zYEPKS0|lCc8s)Ai%i>*ca(ZPR(RC_L-aL6&(J3ItIkicrfL!1~Pb at 7c&EOaFuk%wT
zT?VaH3Xj}8k}mC~^>cqwJuwXlF?*I-X77Fyb~3b1vkt3d{##b4gF-&BiJd>+q~f8{
zMk~%L_9%8K_M=+*OWLOQ6L(%rZM17V<Ue*=8`$ev?NLmzethDtCXbuQP2#GSo0Yqk
zZ{v>j4ZdN$NqBR+Z(Hw1olM0^B?(28lI+%9j%QqRwzh9AR+LgAX?M6qr%t9yq&DmP
z==$2}tc$C|l)arx$F*>W5YO1$?)(#(j=5Y{+K$wV0oUqWU{3hF4 at clTgD-A*ruzy%
zse;kOkT6-ES3K{uSKLYpjSsyLdild<ndp_~n_aVQvb`u4PA)Ip&~7CjZ>yAdAI?&`
zc7t@;Ezr)(a+^(9`o6fSoTPI}r|pvLN*c_)i?7D8&a%#rGVw>$%mIh7s1Dl*_fE6z
zyYK8+I3&*4L;n?n-GeAntZWL^VbfneC!3$hN+BO2mvrUJJ*j=D{WSmHtJv$gdk;>q
zdUp4aw3M~1wccs1v7y<xo#{{8m-aCrm;C^B8Fia!ryp$4>EA*B$W6P8YAB9*JnCux
zQ#kCV2j45aw6wU_>!!P%2i=qC<>DoS&X<m~K=veJ+S}Vgv)|E&g7r`7OQb94-)Y^@
zuGOyJW(RNaXz<v5C%oS7WfI*j(7=cEOY+U_)a~7w{lD__d4lfzuG)PJ&N<F=-VP3~
zf3mu*CT;AGexm`Op5l(a3f=D4U7oMn$FzEsyIlvTTD at Q58!Fo(9^9*@oPQWXD$V<4
zfc2CN(125J*)8>u%SuCTlY*3rm<rv>jG0%n;}N&Q$(>47Vc{FEHhDhsYU^4xS1~s=
zgMZU9L3+DjET-`1Mth}ky+%ERL6JecyrNQ*;-prqVVTB^X*??)k+aPirH3j-^5ONE
zLOljGb>h;y%U9!c5AyD9+gv1<B_|_Sa`~m}m^WUHF6Xh<u++lOw)yPkK&57_D|iJ>
zmHS6<Do2xK53>?K{yIr%M*2}Id at fOZ-Qk51g#!%BeJWvzl!rQfHZ|?{Pd%`E&~|?$
zAw4lT9!SpUzs1ol2NaAH0_6MU=jD?%;2N=-H?(?AWT%iOsDgxw3yP^H3r`+!j%kW+
zI<A*qT1iKTv-g|hPF87EI+-ZV+q_#H6zdh6tum$JqQXX-qe;HjeiOwXir<w4Q%SvL
z1L2jjH<E5#-R1 at h=8e7z&3kv_hfEpd54Q{g81<dlsz;O;&z>B7l8_!*i+-g0B&<@C
zvD2-J`!RR!`V}>=bSVwU%!+%zGk*DvVaXg|jdhZ%C<{rX*x~9xq871_xG~Y=eoGZ<
z{!;hl*z?!7&F=hZr|f9;aQDcD_K~7l{{lYUZm?CY6F)+mEUqqY3Co_^4g1-3cS&*)
zsf?Xdop+IUr~jk(>~`k|ZXE^Os{vPBFLgNJgQFt$jA!=TJ+-0l?8URwab<C%&7n;<
zTj(vR8y~1PVCPDWORJ^>AG92mfyfYLHYSfJ9Z{7rYJcJXTWf1hlk;<F1F7`9B%<2w
z_eX~e&chDDZd at sCzS#3;+4xKeJNwR$xUPtcvl>0r$HAVRF26XmLw?Vi8lFl^nn^m|
zFy3&$N!KnYxNYB!2=?Us at fQJkmm6v?=os$Arbq7U+SO3r_O at Uk52*28Ka})(KWFc6
z_kYKW<L6IT0N&-p```Oqa~dnx-REZa^NsS**Bg2~9|k=h8i`PjU~YGxYiwq>b?(3S
z+G4<VDBXM6<5dl^IO*MGeW62dnAd)987r(nBNS2mU at TYA3!feBt;`7n#{B-sh%6f1
z^nu*9xxlh7IaRG?K7X1r6yH~y=Fsx2YKtjJ?a1{97Zy%_d=WP>m)D!ur*KK(Xo_!2
zUfv&hEMu>E#$3qjx9<m|GyWBMb$`}u_wAomBL~wxFzAmb7Pwt4-EMELB~|R6x)s(O
zIW>{qYw(sA%kJw`i+Ct#nKd4suL<v8H5`|i9J=wgaY$rn*|CbE at gJrSzMX~8SkzC&
zA~+J(ox*BU^o=pp6Rrx!`hTfOG5=7LeqDRoCgWwR5z-dZ=c>^$36VV)qLy)1)!8c_
zI~E#t?jpffdCSK)Z^A2I>K0}=W{pjsjm_$fb_3Qm`7ig%GLhxkn<)i`Y))#9C#hf<
zIS at 7f8mTir#tCUN%5Fu8uc;-5QM1d7GY{^N*zza4G}UjDEYz3Jrni!Me&HAHTo+|^
zY-5yWm+FAccw|yn({k%rzitjg#<tp*CpNu0=Td84YhA5$0sMX0$&HfB%*Xx;gz$*M
z!y^qaOE at 4AUx46q$s7)i3f1-{Gk7!|2w)DD+<Z0{s_jJM(tV+(zP at x8ogV_OIMewI
z8dTfW#@r%^!QfH2G#ZQK>+4Koa)i}9oI~|p+D~V*2;dY{n}9<hkorgj0*yk0Ba|)z
zwFQCL0?OI4ssBmDp39~NQD~qo;JXEb?xSl at u!b7K5pWEQ4&9|~OQt|cPEdCk5&<`a
z>g(;&(Sd*$_vx~cOCIp$4FoBCvv35QLpU_Rmc}Pj$$T>46y(DfPPp6Je7SX_?E(&&
z5=i4ieQ17k7G8bq_8oO7or+g?!`LEhIp#Efx>YEb<`in at ObHF77*f@@8$+PrpOFA3
zU~-tCcBp{KVDWGQygC{5J{k at j3#S3~ML|%MOZCM$5-dImg1_+U{(L?M2LQpr!SG--
zoXzzEkcNha00IS|P%uye#tUKb$pRRQxB0W4Pnrlc at Ji?$K8QV3sG01;4&vk0)tBsG
za%^osKY+!9i>!iE*i1k`<^V`I0$?(~7`J#9;U1hdi^nIkC^Tz=aZnJQiqpgDp)vX>
z1PqNPqG1Gto(0U5fYpPc_4SdaW~QbDBo<)=fGB*sR|Jnxtq>&9B7sc_V$xXrCB^0z
zSQJ{%90>!xg#aU%fr^P{1U(qh0EHzQ>KP(Uv6v;rU+w*@*a#4w`zsulkp8a``uF&J
zh4|tbaH3$L3H{hu=;xp(g0?%O(4g1jM9z*wEJE?M<Y#+7DFGva?i=#oDEUhAdnKR3
z)|t&_7=IhNBE%M-&*qBOzu&tQ3;&e~pW;R&`&rTd6L~Om{5|sE0_d6O at 7xlc#VzFq
z<G)D_f5{9wM!+|F{)cvh;r%IQzX>Vuae}|MT!8zOa*ah9S7h0jx&M`ARLW<&I6+*7
zD3eer0F6Nt1{@DG4f!3YR0 at tSOz>Y~Mii;Sh%#mHzn%RQPYk*+x8N9H?*^|ffKh3_
z<RAuL-T2=z#G<D#=-(<_oc-=OM!;Wf`bS4wTmZA_qGHhLm-4VN<V!XOxdE at v73OMi
z^liZ)A_oysVh~@L@~bwMh&IeY%3!el0DH0 at jVJ0<Iew-RsEBeLzfh3j7n=Rl14HVG
z80c at BU?S}#p8zL56Ksg-fqgPAj}Jv5zi^VE-6iQRBnBaUXe=VJ!Zh91cTKmc0af~8
z(d~pdRLLd<-J8*2vo}!3R>;rHEX*Y=zv~l!oERmcBC&&NUCn!uZhiEFsan!x6L0L2
z`sMeAPtnYRSiEHZS-rlz`$~26b?0K`*RI<1uJ8Rv6*`*Z5-{8EhHlL5nAAOzuyWOU
z*ZGmVA;lc`>*|61gQm*8b(%NMH`F^yC6}dSr7su_q5F?L1iS+S<M-d$FV2l6iZJ{R
zV&Ul*YZ3j=G`&=xfHeJ2u(&(Yd;vEvB-lbkc>_-LP#P4e4>+>fd?-?QL5_em%a;um
zl{Mg);AModu)rcsk%sz)NDM-cNYq0T5eO6tg(m6~Q08bu<Nqw-4J@`N?a5pw4>Zo4
z%?M($cu)*r&!ti66k&~oL>U_|wKuT{5w(H;zP>W0$4FTdleHFI29XC_VS6>MP_S`3
zE(iUT*H)_~{UZGS&I at 9}2^||k+CvC!CKkju;p32}4t0qM>wC>VNKLEkb8^2{blx1c
gX><6N6Y|WzdM(JzT)u!y^Mzo91)ioRkz at h+KjXc&DF6Tf

literal 0
HcmV?d00001

diff --git a/extras/package/macosx/Resources/Button-Icons/VLCFullscreenOnTemplate.pdf b/extras/package/macosx/Resources/Button-Icons/VLCFullscreenOnTemplate.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..cf922da15321597012915d6f7fe833dcc64cbf9c
GIT binary patch
literal 5720
zcmb_g2|Uzm_eWV0$y&P7*vXw8GbW>ku@%O?>o#Tv!<d<7Mq?+kCMu~=7x7vm$rjm4
zN{ghDt>W4fLLr6xXOxz^yzl$@{9o%c&vTyhJHPL9&iS6_s90f*flv at aSY>$V at l#<q
z00N+S_z3Iifz3%&FP1j|#+k7J8<Qz45(8{Z!LvwM5`jh}fh_ at WunnH-MRJ7zpd6tu
zzwY|_!b}!}g!dB;=)HKBZD-dd6Z^QH9hChD@>Dh`1q6wh0|9n!wBGJ1u>AqgZ4nDf
zT){r9xHzxT$*c(8oNUwLI1dH&f<t1aTdh1G2?Yg2<Iepdfq~N_BOhAo`+L2nnIC$B
zGb=$n%D7!1F#lOTK$_Ygf<ee<j?pIV*H(B00wQ?xcp%Q>g$<auxArN65!- at p+}pH#
zyibJJbh&}_dK{M at wTgRMY}dfUbMLq2QHmw%K=VgM%Lh`q2~%*zyt~Q?vc~ag;Qdz3
z438w&;eTa@%Jf*bP7>u^n+Gr0_S~mHKg0zD$DCC1Xf|o)mvytui=!QPf}5Rhm7aAy
zOo7FwZQ)5!uG)+&4iL|XJKrp}g(W`A;GySMgOQ_~W$0xa2Mud-b3NbJ9G>O70XmRO
z_3?X at 70iI8Ao-4F?@dX)H(Wjr(zst}eo%+!xYy at jWe@v}Us7~UcX4&ukuIASW?is)
zV-cb9c1p2cc=07XuJc3e)YWC1H#~=06MV`i#9Uj$cu-Y*0QRa_#;5|1vQemS<LsS4
z at 4>+MZ9+DFi6`K2_=#${v!|-F8YjY0%c7yPXr<XBjpt(DK8Pm?r)*>$e&wWLreUCu
zMyK8%Y!_YCYhFdpTz&7f<6iv8jIN$Fw!r&Absf^WHjq*hk<paH3|uXYUxiHKTrT*Y
zQlHP{(S9Ig`YMZWcuYUy(pFxHK&zMY{Y#@!V*G;{+wxG?kRLMnSC&fX at r$S0PAtid
zNo+Uw+VoNOxbL9vruGOPWnSrf8>F*%Sw|Hh8ys%RAo&obe2Yg9ZQatzCle=lKSB(K
z0d<QA?-TFlUx?gqwc!m$$(vVgpCD2c6!Gv6RQ0B}5rT&{CPs}N5~$;SzjY&C0fs#~
ztYB}t85YqB5Fm=xVDzm3Qd^7+4{sHdFsNylDG=Hny*t~bK>U*oir+n=#9%`^+FL3;
zGAz39wvc&bVJWOw^q1Qr-J2F-q6W0-au)=~ZhoAxtmZ3;O1?EU!@r0M5tKigdAnR_
zU!0JrwV{Z(z+mK}g1G6gO(r^kXj5IA*b0EVDVVWY7L#|1tuB%fc_~N4x=I~qCzKGq
z-_UQLbk1&T6YHr0`3_)*x{tv8CJSTDY|(ZdZ}8l1mK;jbJpyEc$a>L!uASXJ^ct~U
zBqrv`EhoGlbm08PR+Kq(lqXM`DG!g3z1`|@%_*>$w{y!xEXjkvn{P5~5<00n2{<CR
zBxBNCIM_;mTP-9fb}m-4MSGxaP~fm+bzq&;!OgU&54X!_dln@^&<&fzH|$NyR5O)i
z2^~3h$bb(I&yH+2sKy4E1{f(zJdf{e=21LX9q)wEv#c|aQ)y7Te{#+YlxuqWWJL<=
z80&Xd@?3(ss&C59`{G32K((4vA*YtlFFQmk;*|$fZk_E`w^n%qf~wCNNPr7f#+7Rv
zU?yd5?{bGl?~^s^&QzT_E at kTzWtZBaQHU>eCMQ%BR%EiuSl3u7bN1tAvc-v2i5ViU
zs=tkvwi=~Dg$<r$Ra-fo0iFqZpz;7IZTLJp$Xc?%sDoCp(jn_C+e0eLE^{ukFY_Xr
zcneu%j2a!dl-h3D9^*ZIP91#MrOCOBVD|9zEfppsfsw?Jt1+l?sM*7q9vOc}eHZ_(
zc4W`+E{!ayIcYvAnDmz2ZZ_u~a(DOcE|c0UjZ^P)j7*(N<xB0<*y- at bHr?LAdcn%l
zzVB*?b)ZXh-eAG$ESo%r18INiC7-Jg?18rE{7;FX1MEv`Pc&bn=VY~2v~k+mE>~O{
zd+Tl_1;qvZ9#r&6Ni<TxP{|?3Jjaz_Y-|6_5$;&-{Jufv;PGtftChGSM_)@<lRf6a
z8AoCla+5A3owH1`EN?S(FDr?nrc*Dz^+PAh8-lH;Bl;{to%#*-9&Fsd8pBIDM82tw
zJOn9~s_zKWppjoa#T%Z^PQl0E%LfX?AKhzFe_U|;b at a8o!^dW+LkEX&sxqo(s`IL1
z<|K2+^P_1;(mwm-(eA>EV6}dhI&4J0cOUsPBkdNftt{%{TNkTeLx5GzEZ2~Vin3wX
zDkn>4vWt<cy{jm^KqTB4I+UQ at +uIYAGf$pi>zvi$%aGJ*?B3C<+N;xJ3F>lgb3WJ@
z(rWoCiR|c$@W5S9uG&l7JD4?klU2YB7%UjLcZ5Q}K!3{IPe+Z;HT5*7O}`w~8}k?{
z>l>-l9DFn2^163gbx3B=VSJ(6{S~^cz9;nV?Iyy-mOxxZ{`E2HV?3AyKI at p%)hb*h
zJ>fVPkWv>_r&*u5_<Ct3^hOB2U%DYUWLHUt%YE0L0m0?E<%LD`yRKQ>`&E4&$v<{k
zNzZ7tYe5jDh&Tx;=?<wm)o$Ht<wZ;!H4c)y#}1|itAMgVt=h#}6k_V^<@utLSj}V1
z+k2Es#k0jl#mkFcIZV5w<;mjCTXidpy(~J at i+rU!Rj;5WRb=lZqGV4bZ8=U&_<VDY
z&<XV-)OlPccshZKLyN~KCP!q069_FDBj(M$ch26myxVhUDn28D9S2U%9KAu;tN}~v
zN%}~PN~}mED}$7yRVr17PUocHW{Cmub-zoco+&<a)Gn$cvg4FiMnydt9zqK<M4f3+
zt+(ALy<$GU$v at gPI!AUv)?StdH-zIn&AevIK9$Xvvx&Ij>amdeEtN@?C3_r!Z06h7
zLHYBQzhsF*f4PD1p|tiR8}1XHJ$ZEOQG7=DJ@|diN5S<flmm_pjL&(?*RIIBW^7g#
zUgW?1f^z*i#l&xnI^B<NAgm_gq9>btjZ}?BjCLhB-|1?Aty~@~ioSSl&(eWk4{Ukc
zG&wl6qj#!w$-9t6wjA%4??+FO=E|DNx`J~S4g!C3I9Q%simRsOHsxPpHjaLFU)pPT
z*RijVQQ~vO;c}lfnjH~(XeMju*4Z5+>6g+!#8$_??F{Ou>LPcg?z$`2hFq at DuW0z-
zd$;R^sIaJ!=&t0Mq(nJUz20Zu&%3*GJM5l{AU0>@CmG4tempUOxCo2^R$i&-yfpMj
z^~_>9EvIoOY9RE|lJXGoA={<j{<?Lq at Qdt)$%V9}#iUbhGi^t0H7)(wJx3}-X>%*5
zp84b#wcYz&L-znOBmBsKTU$-f`@*q&aI^dNiKI7S^uy2Zyg>7!SI*Ue-D at VpK6+fW
zovzV5;%NC>WlhkV9YZcH{tqXnLS;hz_Bt)MchY+L!*0JZ9<!LpaNqDyux$%U<Y4tk
z(8N2xt1r5yi|gPJDHw~5WCRR at mfjB6=LUnPy<TR9myRoZ!Vf4Fnv5i;%6F|4d>~B3
zjoeGK?t0RohQY}vUc3AI>Y2~aVrQ50hx11yFH4?C at l46jf0<9!cU_?@2flg#aXd2f
zU*RQT*-L}9zsZG<XE<xaKc8M at 40H`TzPp-KcW~iGaA)|!Y{oF+Ju{j%(k~y{6414z
zKe^HzGAcM3n~)r|t5!cSJgE9)UFpm(ACA3W5++fJUyDV~h+B7ZtIf6l+PYfYRqj~l
zFEy$5Kh&f@)}H=04}CU3Me3F`LqNs8W>utc%;W6XFieKrQv(~J$$oa-M2o>|{59DV
zCQ6U`60i43j7`;srzdY)B2ZQNP119&c*Wld`=vuu>*U0~xSkQ^eV>Zr-HzPqy3VFO
zZghpyro9ZKKU`098 at 6avDz?<J50yT5+)4Nee`iAT>(gCIYRcPeO0hkgc5D`IjhZ>H
z%8$jRJi&Hpq&M?J6nb?Zx$PVZR3LQM&p#)YIJ7qfw~!>8EW||KkunQ<ly<j01jxON
zRF_lDHY;(Ls7HFgqUX1|fkr3pT=0n-)RL+~!qp<j_+d}Rj=Bj-?7So46EpRM=kswo
zre$he;*QbP>^JPzT06o~{RKB0V(m%Ah#S%T&(wh9`<j-m=|J_;ZvJOE?4rFf_xXLF
z8r1ixbZOKGd7P;AR`O at NCg6S<H=PL4o^LemR+HlGXxxIZ0jBU>KiIS#rerJMm+#tc
zgE at btkH1SH&f#))mG>Fh0}p42pLt$YURV9=nQ~8ydya4fa{Wl5knd;8V&Lg?5)q*8
ziKj408p2>h&h3FkV*u1`Ner?l0ORRNrjl8KoE1AVi$VgZJD3|9`%@@P0)s at N;;42c
zKRWkb0-_T=*SC{tR4iu-ppHesAW$7B1OkU~z9HJ05SSVSqQ;T4pb`I*h!ulI^e2!w
zrf_aa6tah=71j)(3xa^Ofn<Q2x&@v9z}W(vfKUiX7oel%rlBFsalx-{3tji+?{_IE
z_l{%(whN?_z!oGHo``4R!M6S$EbfGph52{?)!Q3D#}j->EPw~ei%dl;PS-Xn0?0(P
zqNBD2#DZ=}@+O-GF-W#SmUe_7UxF at Caj(8Gfb*pnfC})V`*E}b0{kdcCMp1}i08x+
z3B?(6r@@L}1UaG%q9 at 7*Yy4G^^9il!&0^6}U@)7_2C?BF8p8_=)z#GnLttPS49JlH
zG6ShBd;pNjRQjgpt0pXob0TCqi-SFYs~PV>^Jk$I71!<Xqgz;fdjORQTC)m7p!tCV
z at N_T~1OfZ`eK+pQyKwiQ%&1Hjo=PB at VfFp}$wU;^zz_;YV03|4q!tut4A({gb&xPD
zP+JQN)iFR~;95|)9+-o|&wJP4;i~0=w6=()5&Zo~RMxs;Egd)(gG6G12t$}LPzwn$
z0wS>-#TZ>}7#yJm(K3SRtSkOu?>EJIVD5YWfWtb{|20DY9-ki&|MCu~wOAo>{aByt
z=NwN2Lg02VIEwSL=Ikg4WX<9qCBNDGRS72&$ew}!jglWE|E%O|)Y{Q#6#btA_lM`x
z7;Ec)-n$+P|CI?}<7Q3vo1*_G@|?`^_sDY=IGzdrlUs6TQR}%u|8G*mUowM+9{8s{
z|3kYu;r%sce+nti;{yKP@&MG=jH|zvaMvvRKKH+}j7a!q7u}yhS<56u0+>W0aRZLY
zF%9}BP>BQ-i<{rS$IM!!aw7^uVf{S&HJ&JBZf-$QI9({TVgQgx^2Ga7Sc>}ph9JH;
z3WfZ$zAv+XdW;_UuO|JYpM6>2B-1a7IX=IhhV_NNCvy%ppcNV1RLvRvT=}eV1D7VD
z+K_Lh5A=tA+!|{bau|a`^8#Dpy-3WpmYdBtCIPH5j?H%l()~`dUz>SQtu+Grn{M8k
zcASTgEz6J7+0)`Q{1{9Y00#X|Nddj~Nw<WfAR;l-p$T=E3=2=OK at 5T@(o$L*9}6p2
zkkqV-3|^{)o#dBTTwGm_-+0R-?vzmkpDf>gqFEF3S%%q(PZ;^6xen&^WyPY8x{u+0
zh0$oCf^@Bs{5#SQ$lESNOKcTXm>>E0S(Xf^+xskyI>OuY`sOqf;{^n_JFHCI3M`{L
zT~qWO9mmKFKTxT>*w$*ZIk`F|J7ZOE0zP`O1?=wY8yD6X#><E{(*7HWxo^J)F+%4X
zORrZa9G3nkSe$G~o?u5;D5n<+a|hd!gGd0V4%mi9V*%C<$Oddi^`rsTiW<%s>#7IC
zAdNVL0W~s0Xc-_3pvJlw2oeD?K)?)i4RtX(`u|zN9sH%wYK3R`F*(K=(kT9ZR3<<h
zY{eiE$pmhN1cmAAulH$@T5HV4`SatE?R<D`Qv^gxVBlf0dV;&$y{2AXxtqGha!ps7
z-T4GspLxBP7F4 at wen~X7_(dSLci+)O;);PdY3{T`<P1jU>Q(wKs^qJX8}q|4AK4Mx
ejMO9%e}$Dp&J0!ngXAf!4d(!>qGE(I7XCkX2p{YK

literal 0
HcmV?d00001

diff --git a/extras/package/macosx/Resources/Button-Icons/VLCVolumeOffTemplate.pdf b/extras/package/macosx/Resources/Button-Icons/VLCVolumeOffTemplate.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..d079fc8771e4e0e1a09af7ef7ba3c3a4a4a308ed
GIT binary patch
literal 5428
zcmb_g2UJtp76nv9q)1g91|v-nlb1pui3FsCqV!(GF(d&3A&E(lP(=_aBB+Q8=m5f}
z2%|_*P|8qLL}XAIng!`1T at g`0{tJR-%Kx+0|Ev{qbMLw5?ziu0 at 2FTC8AA~;ZDEyx
z{@)%8qabhy!^1~dM+Y#c(7ia`5F|Kb3m8*r9106CrV%+5BMON at rT~@@6ktoFdr{or
z5Ckan`QxsuE6nDwC`3PDZug~g0rvJCveCa)1q5Y2gg=%GN`k?|XJC*Y*V=6H6x`Cp
zS1)2gi^<z#Bq701IF%93pOtA^7~`>BE$^VX=_YFrcwAl{*|>dgNMPXP;NbgvRXyEa
zlkE3h!Rci%K4q(IFksy|0Z7V at m+ONtPn@DmTCXqi339{vbNJvcBl*?(6SaGk0qxB}
zw;DGroOmI^Z at N%Tc{O5{8 at XilxX`|ukFW8kh9R0IZePO(Maw4X?6`51V$NOVI633k
z6kxA)1Ir`9ZQx(&p|V{z&0}N*w}!rpc3t;ri1#tv;Nz#1JQ_?I*2(R+%!y%~a7LM3
zXqK6FJ48c9r-<>zDc{(LDdb9|#aw6*7vo4wv-p_V<p5 at Aqb##{ZJ%L9cDCo+ibK-^
zw_y7c={|lBGlE&jB#gk(OueM!#(|O%nEL&E^8;FZC%iuGk~`!#a#_(W)z!^)YpPsI
zm`&c&tvPL#iE+g$;kjq1nD+P4<JT5!U-KPoj`JxQ6?bb6<HOw$fCMawrwwiAQznG^
z)=b|C^zI9c-7IA57k?6kLY*v^KX<x3qh|C7Zb3A38m}~cxaNHHL{lt9IB6~C&~s;X
zGj#)9JU;n;U#sYnPQwyr>e^f9t&OpRQ&=4vqdf1X@=A=&?LgYq at U*%tcHmNe>=Jy;
z%Jrh}X|;FheCQ at 2)8`oi1H-!EmpAcC23kLR*E2s9DZZ{RZF3IpI_7=)y2bgc%-Ffp
zEhp#Yhb6a|du{k2cfz;NcSCD9pEAEp;~JR^e$LVD at HLLV%3=hxiv;G59^53>E+8AT
z{(iVPQXkeSBD_bUbKPvjUh6fl^_9H&ckEe at 5ru_6c!?|DFcH4~;M(}e;e&#e{BJj{
zC2mI=9Ua*2V7d_*-V6~Wi&yCDT0^A82!@9?iAx$(w94iQ?Tp%)>6$0;Q5Lt(J^ZS{
znpV8GbZSIc)Qfr{^N9Q+WTEH}^&*`cW{*eqqM7m+1&4qAFlAXTa5XZqc6 at 5x94=(N
z!qN2l5}`dYLZUW?A`*gq5p&xmOn23pXhEV(v9{5r5O-66wNXw#=X8LYNL<9_ED at U<
zYF73_aZ!5>{r1RY?X)qm8P8K_gSM&p2)^53VXToU+N$LZ%<SaI<D}ffVJ6xcPg~Eo
z2DJ9S(%vF+{P?3<XQB?G_rls{oH=5MFGq&0fC`tZZ}zzE99YQTE;brX at mSX>Fcvn3
z7{iW14$IHWnl$A1H8Us5h2+K0M{C?e_qOy29+D~#tdu^mkrDa6zGS*<PBH{vz46Ez
zy at d1~rcxZC!^aL92oO=35v>O0MqE=aL0R(m*!BiK#q;H{&iXo*l?L)E)k^nI&6vTm
zP0ySvP2wEm{LD$5i8ELAP5SY^1erf at N5$!o(+d|C93vEo%DpPJ=Q`DFR35<)YSRXi
zK)%X|a)l$(q<H_E>;cjHRQ1ZUH_o1rw)2U!Pi|AsC+53Q<4W^O(>cYQ>zt$+hY>Tm
z!uT8UX(Dc_KMfT%6H*Yu29Gkzt)0(8&jvNAG+|^6f6olEk;)^qG4dAM<Xq&sD8-q@
zF2xSTUStz*A&ayj!oJJNt(L9Fy(iDB0f$`cT#89%56;x8uvu}e1eSb-L4{+*Zr0 at B
z$Q$~b*f+NacMoh+&yb#x5s*g8i0#~Od%-b#XZOxx>5Vd0YA>83l4p_ylH1jPbbM`>
z>fmTIYi;T9;#!DJplei4U*4Gv+Z>i7WpDCjpKDDHP&<6?$9UMjfXh1`X}rSE$e~rx
zR_ILEUtDXtD{mzP#RUBvRPa$rG(yl&$uY}3%Z+4g=kUY{<y7MGwp#YUiA<SmWmW}F
zzLst#yUl~s4oA;sCtOT8Z<%0O(qiadd^M7uO20JWhmTh<1Z*b5Us!}X_Za9MsM))8
zoS$}(`YRf95MCr*)fS}Apgw<0G(3};L_AI`>CKaP*mzIvx4imSQP*=09h;{2ALzGI
zl~pxUeWxmJPBC}7FqCpQ<&#ei<1VrQdE3uYD?q!)`vvtAE2S3MQXKhU!qs|L2=s;v
z$1S9^w0OYnhO?y$)s^7p;3kU76FFjx=#N8pcXtJ4y`zo>Xr0p%NR!g4>D=0_+O5 at P
z3F~laaXC;E(ro!Wf$HR|?O}B@@rE8*uP<ZhS56+A+n3kdc$mh#$b8J+%ft=M)O9ta
zOg<aZ8TRNeelb|7(f7L7^;P$zYQJos<H&5M`*VCtRafZU`a063dx2J^xi^RDzYzfn
zaLy^Kqgl8>X4Gkhn^YNDsZo_a_iBDB^i~M5N2WSBWZTs?*ZXc=z3Ue$7iQ=1Z#t%}
z-Y)6#Nxj@=Ei<LrstMOF(vFdomT8loQSHQ*E6?f2&|~1)yX}#h$WjCc){HLHq>+=S
zue>X`8m)1RUB6qYNFq~0RHCHdx#OfeUV$p%vI$#i>}AoOTHq_wuKEjJN=5EYJWlRp
zg4hXq+^1h>NbLwOQl-ZglBYAQFtl)(W^!0AIF58rebBt2`_8$$mUp}EjK`+M1;hY}
z=|i`e8Wn()j+Bq&kmRCdqB2Z5N~KJ-|4der)ijwKTluqe^4Y?(N9`lqBHB)Crj=Gv
zQ6Y>lL)_VF)hfF^GK=Q#Huy)mMP<p&$~nj}P=+WgPcyIS;*Z7eN&?7M1LeaZRbpic
zWmk7QK?B$muYz*lmHm(*iumD{whyhj2UC5Y^yJaQV-I7~jx?g~Ydj3DQlag0s%Cx4
zS-Ad-f?L`~W#PGX^-pOxf2W!F4bvxkh}EQ}1gogAI$we+VUVyb&gD)=HFEJvUqRHR
z>$~Uo?b;_cQ8(5%zO{S2Xx=-YL$w^~ROrEvQ)Y_miaUa{W)DDray(FySY%bs$ga!1
z%&r;w<UX%wf7j_nKI^K_FOFAU*x&=gLk~`6^w*x-I+%Jn^?h`C^hA45+l>xtNAkA2
z at -3K!Qr*((_r7;KPKpYP5=6HpP9?<4i|TYg@&3KDGrP_Hv55A at wA=)O!tD<yN3}0O
zk3-9TDQ&;p|FV2)u7r_Q^CPY|^zyuNKlwp`YmdWCn{MH!nX_ZFDG754r(334j at oHh
z`Ui9!E(>MMES`SilUvZz__I28A13X{;oki%6<u%hhjW1j_bsCdufv#!e!ue+&yQa`
zUkSKZjD>yhxMnw5p>f#B@~5(jpx0abUGMon7#$Cl4fWG=UTAG+boGSQzcwDW7)^6u
z^I(087*6Cs`C!oK8^3E$J0=S&QE+J_Cji6Z4#4Io2CA}yfl04t=|_r2wtpn{D&?CD
zCMGL%Eatr at jm8W%rr2~ms@|b*r4WDp?$1kSKRt<_UdSED9hABvbu!5_DL407E?w7c
zk+u-{`t662i1dFQxf+%^-*@{b`6DA~E@;%JGfS-Ajy|V1*AglZ%-#xaKQcR=HlY2M
z9mN>zQ3$=q?U>gcTWkm!T0a&Yml(9|wr=2&pz>3dMN>b#KlXNBm_jG76pP at 9S9kKN
z&E;=2R+G2N8*BZkCPn{EP5N!^X%T;0G#oBsG;iLU+E?`UdjEzk;c^h^)?<q*XT;nO
zJr2I*cJoqx)lq8BP3xDhEmI}D^fI^X3RIDZihHuCG}VY}lxd;tC-XnuLWq_{HN~C1
zVyl<4#8=QH^X$*Cd4PCOv8Ywh2>4gj92Swuq>v$Mo<tg(qAm;=g7q<n!GfsSQCL(@
zh`y&Ml}_aZf-Ck^4vhj)b2K+}WYGNmC{~`H_7p!Ruk3~~$)2lwsSLUiI0aEN!Xe=Z
zEd(5nLL$*vBwPcI+yRI00Oc$g<o_mO&0>)KNfZzV_!2;)dT3Z1nL)5HI1CM?LiVd!
z5J?a#JBTwB0f%8BTAKUS)rCQZS8fHddR1Rv6%f2v09(L5kVye7C>$c0$RPrD{vI6O
zgtLYD*Xz;I<1&dPUkV4}LGhx}@rskTYZM_=GG5UMZ2`An8dAKera>%<U67?cDae<E
zB`fOb3PZp at 9WIXR$MgfWL%4o4IvdBuD-uC7q2RzVZyHeiEC`CS$euV`BjXi8 at E2au
zo5Nw^03aYB02Y9PF<4#z0*l20a3p|4LO}^AJCM#Ha-np#(ic4|nv5uH5{t^@fZRiP
znu#6^e-2(zaTSLj)57A*0dzKO85NAg at B_F+CV+s!0YAU5;66VKZx7Cl&gKy5B#N1l
zuD?H(jDw@~2`GXQ25NxDV4!GyBP}QfOF%<4(HJ8GINHF#*uY2!09p8c?=n3+wLFrR
z7mXMs(1hrmRmB9fp*~96KnsdC($|D)p)uM}42A%QYGL3QBe)g;ZD2 at PRs7A~FN$>l
z-gAG$!z$DNn4$m7&o_*Jeg at pKqfmHutjn`=&=R3=lsyuOLt{b12aO#Ehc6 at kR`Ltp
z6(yi2P(1_xiIQ(5|EOfeW$hUZn(p^r`_1_b*7Euv_pbWFKZ3C0H_NhL6#b9PgOTH}
znFkj@%S8RbEWugaYHZN`i_q|=$e^wRe7EQSh#Pe86`%dirNHC3e~p}rTM4(i%h7fj
z+1I)M7cw&G3ofQVi?$p|$RvP5qwpM#4MIcwfmAXH$KeI{uRgQvsXUL;r*XcYUGXOx
zl^0uZG_c8nSL8y;6i=c*jiadhciG{ymC&f)EBieAhck45KjZmZBm2AnM$*rUL4#k7
z!Meg<BRQBC at QN&6oCZhVXZ7X8z{`&aG#v3Ifqc_zT22{;V7j0&yZ~#W7lpmtPO|-y
zMj*@S#`bIa!G2AzD~&3I=5qG=i%!+Db}J7bJB}aNwbBHeSu8dOf<%1HN8E0Qgj(T9
zxXAIz(6~zdGz(AhK7DPn$i1T5vC+tq?NS;yB7*13kf+v3&dn_?#ICLNh&fFN7myR!
zOE#-xKS?t?`B7gXVWy2ec}20{1NJwRUw#x`C@)oWF!zp36Ls^&D9KIhx4#?w at JWt}
zVmkQD4>_S)b6(77#K#J*-{QD9UK?1<biS_WJ2av%JJ6(3cB!S=c4K0BQfAtc&M0c=
z)IGr6*Ec4tCXAmIML_=r#k{9qrdV6+3&X2r37De)juvNIiYMUYh5-9~NO!=F8bpC0
zv;bQMg9AbEF31)zqkA$S%jFC>HgeNJzzO=A2m@`nwlNx^Z;ZvD5C#OS0anvkTgw=2
zfYtr)67Im~9-=jo<;MoW8S-i!IvauptXUK?mBg!!5J+9!)gB~9b2+Vn|GvF4nFqC^
zd#pDJ_IBwRY}))NAySa@@`~6F|5tlZK7q04i^c|bn<E9DsrYCNJZw>VEQmy&xv6w*
zN at cGrLL#zKZ>cWyn8W5Fja|8|L#Oz4_4uVE{!A;FnOPhzi{dGahGR5^Ra6L8#=`#w
D(iM+z

literal 0
HcmV?d00001

diff --git a/extras/package/macosx/Resources/Button-Icons/VLCVolumeOnTemplate.pdf b/extras/package/macosx/Resources/Button-Icons/VLCVolumeOnTemplate.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..662fb402e24a45793771e7689614337cc6b6e229
GIT binary patch
literal 5472
zcmb_g2|Uzm_eY5)lJz!SX%ZsM{AMv`OooP;L1FA`x{aB^Fk3StL$*kkib~qljd(4s
zvJ at p<(k`iF>qgcRg%S#RXC_+i?f&2Q^ZCC%pE1vz=RD_k&Uwx`-}5{APDC;k0mFdw
zd%7P!2B9Eu2-iOtWNr at FGdO|5AP7=SaRJComXN^*$SkUmL1fUlbOzuEK>;pQP9Vb<
z4nc^SzI^;FEI<MwpFw4VL~SPyg}J#kYb8Fs78a5H0R9*pkq(2$j=~_z=Q}SASg`b-
z%nc<6R#L%wqN=JaX<t^XY)-cA*(Cp!h6P(xY?nCs!&3?h=;Wpik>TM(y}jeNuXVHq
z4hhCvx1TJ7$>>p5zySF}a*(5|UnoRipLizNG+dmPSs;p)&69z9_ZL<X-d3;I12Dft
zT)DGwYInPmtnE}4<5fQ;KYoVt_^ex%jLe<iYWrA at xQ(?Rbsg_%<fgnq>E_+iO97LU
zj{+N<YWe=DzCHgs8Ku?gTsKJ9 at vZGT?%H~ng&0o~ZQr$Tm4B^Gtvq;>V_p(>w-?Ip
zNS)@0?^YHv@#tci6unD}uxCZ8nMp@#RTc|XNBA<l+;RZhw at 8auJip7jA~!eSeZ|%h
zxht at ZX`Ep8gRJd*WI9%EN48~p#+{y$ewfkSLi^38GP?smuLW;q_n*@BJ?7)<v+Nl7
zXtZ;|%#{g@{@XXY*FY10qLP}%6W?5za(OMYr7k77WI)BYE?Ne6Ne&V=qmtRTQbvyy
z6>@##W_VCnc=9ibF6=#fQ7F{ja_vL=%d at Tz#Neisqek$nMz&o)ocQ)$G6R%8U%2(T
zmyw;3l?5K3akr~MdB(hU20MJ=z1Olk$-Tp7=FY@|pnK(&Sm&$Ztn;y%H93OtnZo25
z_#nmSc*uUk4<}{N_Y`fPXUX-vw1_>mL{=@_>CX=xlYQ|j@?Dv~<l!!2$4|;nPoC!`
zPwcPXJE{FrZK-|W!jItHAzdL08)9YjWHs;1)69|;?pO(*=kbRYRt{4nH?d>OlEqDO
zT1g6bV^xp at Sc?*9y=sg6SlkAud9Mkpf at D{(SHLR6V(-7el`ni7tFUGMp7 at tr7F5c<
zUoxM%5=q?Av(nvm5i+(8vVg8qL9lRwXe=gKZ(X9IW>wLkRiL;gVNJGAf$AqMoV;J`
zd8>I1_#lmAanT9wHx%vT3X70um4CgV)Ut4FS9~X$r+s|E%RfF2JC at 6xk58+9Gb}%W
zi&W6raq>oq;`$^-WoK(8)dgK~6Dw71*VfpWLK1AvToOwmezpLA5txv-Kg>`mCGJ#?
zlJg})iko6e!Uk*hdd-|Q&Nj|(3UnHwjfTMsJ}h(~8)qvwm<9o(YlPZ3b-!4c4JPYZ
z!{LUohVECGrAoVYJ*xJinj<=o%&)`QBl=|WGzB`SSn!QH|BGJXXJwlf4<s`D<y+(i
zqX!X#W`mGz+LKx~wS`@Eytn0w+A4<=jc=nn>$?_gRWA>()Y!a;8$W)dWTbUMEfQa~
zC}y5z>dDo%>O#eBJGWTLQBm1(4OZnuk*$cNr}i|tsa8h!aCx#9!Q8RZN?X5b)!lug
zcCcLA1N%zTg*%163)4nZ><vQFm)}*T%Z9J6*dMun>d2HwoGw+bQ@{F9i=ngrBN)PP
z#7Ye))bH1;@IcxWZ+e&8qkNZXRC(~y!QC3J!SQYxjYfskLT_eDX<_L}VX^R{Fn!d$
z-wu3s&!s(?O1=ia^%d2Tjv_!-kFv_0ybeMSM%>fCht;%xnjPV+UO;N(7ECvSy}_-F
z;_PDYV)x=ex=oOxLuMao<Ee}W$A(=&Lx&B4tv)s0#WcJ72dec2{1kpFU%SGp!lPmx
zf2g<r9p_#0yQ{tHdR7=^X^d*hX&^Nhui4~s#3Of2+nQpHMVb`DcF(ws(G0naCZpvZ
zuU(J1dpM6dIl8xBh;$D3NyzIeIFRL%$M;}t$T$^z;hsCx6`%iU4{T%Dsnw5+U*Si=
zXniyVo$YhZ=XzV^mDGr&h~Fd5d|IU(x4?RpM~;1tFOBT#{=^gIS>pY^N^A4(Y|RU0
zlrx?oj=nbQ?6+rbOB~BhJ)U~lG1al8-rBGDd_3nE=fqn!evghd;5-!D?hxhGVP(1b
z`i7ZZvaBu4KhW4M at FI<CjS)s%=JUr?>jT;8)Lqn)&H~j3cWxU#EV%J1;bPv_og<v?
z&D|6OEdx7)4+bjs413QbeMh$){T!Ufy at fo3yvlYo4a0N<wKG5Sk5(h=i{tOV^>JDo
z3BBYk^o=YnE$;EX<mKqi^db4W`zoUflw!z;?i6%eTWdtl2j)PS=^<0OOm)-iEz8;r
z+Duy=Va?w4-kYyS);T^;WqO8S{3(~yE?LqoyR!QJ5EckTT?L(Ywy}7}d5;Afc(}gN
zn%3H*Lx1*}zx3}eZttx$?t0zn^Qvvgpj)fUqkpW$?>WByT5Hs;8#S~Ox5Fu=`IldE
z9#R1YaL6;KxejzjbHH;{lwKKMX?*SE#H-2Ss4J1w4$Z3Vkt at zO`rP$x?NpemoEn?J
zziS?$yq~d<QGc<*Npskw!32&e!X&9_Xf|q$8nl>|>rD`nI7#r_b#6!#WGO-jt3#hP
zVbL>2PJcLaKGArm;KsUDMXK4V%Bm%2o_h at W;dPj*-b>6%$$<_{$IgUkHW{45tLuYr
z?!kfgrY_#iN%{Q8D6I(*NUQWeO$+dXosByCl4Y|Eygh|>+o;#Rw(aJjTaLF{Z at x*+
zObJT@(oXhW;Tcx|>gMXfYJF<cYH4~fy#)O-gYE-4>68(=D7o@?jf{h55AJY_Z;Wf)
zZ<1MhjfslnMqA?!RvBD#U9UN9|6yThf^R|&cns_g=Ax`olmNTHk>XFqA4<aLl%DdJ
zk=GWNrIwvv=LroHynPjs|Do*HEM>&6S1`e>x(;mBUD}gJ4|YCC&WyQ(x at -Jk`!#*m
zM$an#=e((l=X88C7wLf}<ZnD<U4F{4VZY=Ibx^BlGpUq>!I}_~0jZa?BE|b=a}{#>
zbk~`L6BpM_Zd|)@@!Oigt~blt-V{v+6$+V-{Vh5j_&1Ev;+o>-?Kxwcp}%=-E=en*
zlyh at y@=pn__kH%8v~;`W*<Q#$AAHW^bh|S?EH-M(a8`Hqp=G_tP8}OhEKhvf6w!F8
znc1AN;+A$jcB<5(v}!!$R`XtEkTOYmMcQ!c9&KgwwkJVPTUv4(-5x7p7G>tAl60<q
z+&h3d0o?^HJ6GCts{2Lx at I(nW=lXJ7XVj at ly>9ybFrN<h%g$|}XW3(eV at FdbQuo&n
z*Y9vOb_ at +`-BuRG9i86)Bsl*}{hi;9%r;^(W43i}s;_8$U-&W~sP$Vqkor2BxAp1G
zXLwos^x;atuVOIzqyGihp$g+|o{qnjRYbgA*6njU^!~t`D6J^ArPowL6SuV^`o?SW
zONW6>zj^l+>KEgbHkbEC47_7sc-B00wh{%`KnlaKd{GZ<@@>zx-0i?n;GZXBiuzZ6
zqIRw-wCPRD&}p777^e*+_1-z^-2A9&HG!hD=i;s3XAXXTk~lJz-;>{~ep-ERdO&)9
z{-60A3*TwhRQT)nAN%7@{wwBuboOM|)!(#Z`ZK-JsLuyx_?^vNp6 at QCR&E}<vb`y0
zY$US>^Inj^?d{Nsx-Dv+v>2SOjqFnxOiW3OSaH=NJSL)iUuDtouj4!4Pl6a6`fRf(
zUP<~+Nw+EeMw^*Pb|q`mzxAZ(f9OfS?>!w-uPVzCl!))o)gX3^bPRwDW0$>9gqVFg
z?6pzBYVq0!mEZ>-`T8yG at mbuCT{M#B&g{_`Ws3c|g>^fs<sVwgZ!|pgZt3`w({S=V
z%>y;V_C at QTf{QxZ(rUoxU&QrwE+0RxbjlW`QlQalawV>GRN)+N;Q---mii8~sadqs
z{hp4~DyzrWuK&A at 673~+AyC*k6A|!lHVXMv9*;qX7zR*T0)`O?uoidILM|U-=*r+T
z10aNe049ei3>WXXF at -D!#L&au+JnmqWiu!oHwK$0>Cs_4dcfRKCYM7LlOTpf91 at N&
zMZn=GBob`~M;pVDtKsm~Vm=2h{Xeld at wxO+8bhpx_>F<Z^fz`Q+Cj`<a2OiOglsZ&
zpwb`|SBMuB0f(7EOieZ!8G*#tF?)rGxqJQgUV)IjFSr11;XDT5zz|aDR3Q~`4fPjF
z2wo2M-|o`fQpBUuLKs4bKO>OI!RroPy{-#k(($^UXa~3h&zcd$w2k01Tq7LaXb~Ya
zGrF#&1qdSkGZ*1RY#v)I9U@}0I0BpquS*rj6ayz-OUQuk7e+BFpB{j7A(Ceq#lP^n
zK|&!92LNGVVX!b1jLQ!M5N2j(02~P*kx(%QR1nS)QbkaXVAWSSvyzAm0gcb(3B|sL
zNF-DJxuHV5uI`*3Y at UO|*9UL}FsW8B8kY at -s5}4xg9B{#H|4(AA~}Pz;|PRQ4vk?)
zv<MAl(s5P<4B5)Wngm6nuw*EPgfM|xqpcB8I1xiKMOj-R31|~@K<tGd&r01R5i4<$
zbd$)Xi6e+3oD)oh6X9eMmH;&&p^#83YXSmFBoZ)CQxb^`H^UN5u?XUv;P1|U6>JVj
z?EcOVbDsXMJ at kM3=R1#ou>mK|6NV&?EhKR+jzlON<%UG!&}KMku;buxsm9-Pe${tY
zh&U6N0pb6RkncGEDr7ce-MCzq#g9q*-SfG8>Hc5O&gH^?rNV69NO`{s`hR*}TseO3
zdGUrgGEsjCOEDEUR~syTQX2kN8H~(<AI|&_^%kf1Y|j3WQsT#ney+I)H(PBjq{UXM
z**Dt%N;5j`t6scNK1*6j=rn-AVn`BBAXW|W7pKx`IH9Drf6EzZrb;r3z!LsQoy{i}
zQ&L-SEb&AJuPcJm83EK#mQdH?AHd;Dkg%9P%KAe6%OlKzzpL|)G4^FcTu8qN7RUQs
z3AO-zE97EW!0YlQWm>%Yu>+9ef)pOnaQIjJ_--yGMGR{(TCli*fD<*4A&`!qT)v_R
zM2a>p-_XbG8 at SF6wGbv!@cGG9ODdh>AM7e*izi$r;=vbRAcP<h-{45p=AK#&iia!h
z8j4D(BxE`SsB{r9bfw!xSCbQwB`ej9FU4)2EJN;-SDToanM$5t?Vq%t6e|ao+d#Lg
z5j at GX+xv;2lRDZc7&@(c=A+p|6uU41uUK%*q&NSj<~`;w#}m|+D6IU@`|&fFiQ>5j
zPxg7D8uHpljrSxkP+00Q{iZs+nCEp-H>9thpw)9vzwAVPoy(%M^7QP?8S?>D- at e;`
zUr0z&^z~?2egX;o6BkRYm%12Z`qjg8U5OZ>|H&<0E{p)c(-$G02_pRfS7rnQf-nVK
zxLhFwA-NzIz>X8Zg-Dwj at tWvsZiXb7VTc$jtO*i}HZ>uW3078ElqnL6Fd?JKD5AxG
z=I{f)%p0Ake6~QWoVBFW;RqmTz=_YGGij2}2!XV)n44E(O{AzM{`dWrEx%u_yxwWa
zg3eY;D-p&yNzE-wNx>a!M5H)=5-nVK|4L+{9Xa+Yk)2TKT|wHs{#HT{vro0%=B~Pd
x|Gvw&J+YUIHguLH_AY6gcviiL+^YVQ$Q1)KUnt@;0zha45)0DTCsD|te*?j=rZWHl

literal 0
HcmV?d00001

diff --git a/extras/package/macosx/Resources/English.lproj/VLCFullScreenPanel.xib b/extras/package/macosx/Resources/English.lproj/VLCFullScreenPanel.xib
new file mode 100644
index 0000000..75d49a3
--- /dev/null
+++ b/extras/package/macosx/Resources/English.lproj/VLCFullScreenPanel.xib
@@ -0,0 +1,252 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11201" systemVersion="16A323" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11201"/>
+        <capability name="Aspect ratio constraints" minToolsVersion="5.1"/>
+        <capability name="system font weights other than Regular or Bold" minToolsVersion="7.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="VLCFSPanelController">
+            <connections>
+                <outlet property="backwardButton" destination="7QH-jb-QdM" id="VnK-HH-sNu"/>
+                <outlet property="controllsView" destination="Npt-C5-K77" id="LzR-iZ-qy0"/>
+                <outlet property="elapsedTime" destination="nJc-M4-sMF" id="DFf-yw-e6A"/>
+                <outlet property="forwardButton" destination="jSN-hV-r5D" id="3PN-jP-xPY"/>
+                <outlet property="mediaTitle" destination="Vd8-0f-Usz" id="NZ0-KY-l4T"/>
+                <outlet property="nextButton" destination="2ai-dB-Wpq" id="Axl-RO-LfI"/>
+                <outlet property="playPauseButton" destination="YSL-bH-k6U" id="I6W-Cy-q85"/>
+                <outlet property="previousButton" destination="TVM-DT-2yo" id="yKP-tY-0j2"/>
+                <outlet property="remainingOrTotalTime" destination="T3x-es-c7v" id="7qI-yb-OUT"/>
+                <outlet property="timeSlider" destination="f9T-Kg-gn6" id="Zc0-RY-bsd"/>
+                <outlet property="volumeSlider" destination="Ihl-7x-5mN" id="WGR-5h-Y9H"/>
+                <outlet property="window" destination="a2r-mH-Iqe" id="Hd9-Q4-8sG"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <window title="Fullscreen Controlls" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" hasShadow="NO" hidesOnDeactivate="YES" oneShot="NO" showsToolbarButton="NO" visibleAtLaunch="NO" frameAutosaveName="VLCFullscreenControls" animationBehavior="default" id="a2r-mH-Iqe">
+            <windowCollectionBehavior key="collectionBehavior" fullScreenAuxiliary="YES" fullScreenDisallowsTiling="YES"/>
+            <windowPositionMask key="initialPositionMask" bottomStrut="YES"/>
+            <rect key="contentRect" x="376" y="105" width="480" height="80"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="1280" height="777"/>
+            <value key="minSize" type="size" width="480" height="60"/>
+            <value key="maxSize" type="size" width="4068" height="90"/>
+            <view key="contentView" id="Npt-C5-K77">
+                <rect key="frame" x="0.0" y="0.0" width="480" height="80"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="VLH-qy-cwr">
+                        <rect key="frame" x="0.0" y="0.0" width="480" height="42"/>
+                        <subviews>
+                            <button translatesAutoresizingMaskIntoConstraints="NO" id="YSL-bH-k6U">
+                                <rect key="frame" x="226" y="7" width="35" height="29"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" secondItem="YSL-bH-k6U" secondAttribute="height" multiplier="1:1" constant="6" id="2if-S8-t0u"/>
+                                </constraints>
+                                <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="VLCPlayTemplate" imagePosition="overlaps" alignment="center" alternateImage="VLCPauseTemplate" imageScaling="proportionallyUpOrDown" inset="2" id="IvT-4x-6Go">
+                                    <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                    <font key="font" metaFont="system"/>
+                                </buttonCell>
+                                <connections>
+                                    <action selector="togglePlayPause:" target="-2" id="9os-DP-jAN"/>
+                                </connections>
+                            </button>
+                            <button translatesAutoresizingMaskIntoConstraints="NO" id="jSN-hV-r5D">
+                                <rect key="frame" x="263" y="7" width="34" height="29"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" secondItem="jSN-hV-r5D" secondAttribute="height" multiplier="19:16" id="m1w-9i-bkp"/>
+                                </constraints>
+                                <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="VLCForwardTemplate" imagePosition="only" alignment="center" continuous="YES" imageScaling="proportionallyUpOrDown" inset="2" id="i5R-0v-MD5">
+                                    <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                    <font key="font" metaFont="system"/>
+                                </buttonCell>
+                                <connections>
+                                    <action selector="jumpForward:" target="-2" id="bjn-qc-BJ7"/>
+                                </connections>
+                            </button>
+                            <button translatesAutoresizingMaskIntoConstraints="NO" id="7QH-jb-QdM">
+                                <rect key="frame" x="189" y="7" width="35" height="29"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" secondItem="7QH-jb-QdM" secondAttribute="height" multiplier="19:16" id="isk-o2-kZY"/>
+                                </constraints>
+                                <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="VLCBackwardTemplate" imagePosition="only" alignment="center" continuous="YES" imageScaling="proportionallyUpOrDown" inset="2" id="kH8-lS-ZyV">
+                                    <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                    <font key="font" metaFont="system"/>
+                                </buttonCell>
+                                <connections>
+                                    <action selector="jumpBackward:" target="-2" id="ft8-Or-fZy"/>
+                                </connections>
+                            </button>
+                            <slider verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Ihl-7x-5mN">
+                                <rect key="frame" x="50" y="13" width="80" height="16"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="15" id="2ZX-Ma-yc0"/>
+                                    <constraint firstAttribute="width" relation="lessThanOrEqual" constant="80" id="qcW-zc-UJI"/>
+                                    <constraint firstAttribute="width" relation="greaterThanOrEqual" constant="50" id="zHK-AF-Ru9"/>
+                                </constraints>
+                                <sliderCell key="cell" controlSize="mini" continuous="YES" state="on" alignment="left" maxValue="100" doubleValue="50" tickMarkPosition="above" sliderType="linear" id="L1r-AD-Y0K"/>
+                                <connections>
+                                    <action selector="volumeSliderUpdate:" target="-2" id="doI-qM-Pde"/>
+                                </connections>
+                            </slider>
+                            <button translatesAutoresizingMaskIntoConstraints="NO" id="2ai-dB-Wpq">
+                                <rect key="frame" x="299" y="7" width="34" height="29"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" secondItem="2ai-dB-Wpq" secondAttribute="height" multiplier="19:16" id="Itj-7f-YDa"/>
+                                </constraints>
+                                <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="VLCNextTemplate" imagePosition="only" alignment="center" imageScaling="proportionallyUpOrDown" inset="2" id="gqA-yG-zOb">
+                                    <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                    <font key="font" metaFont="system"/>
+                                </buttonCell>
+                                <connections>
+                                    <action selector="gotoNext:" target="-2" id="flJ-52-Pcb"/>
+                                </connections>
+                            </button>
+                            <button translatesAutoresizingMaskIntoConstraints="NO" id="TVM-DT-2yo">
+                                <rect key="frame" x="153" y="7" width="34" height="29"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" secondItem="TVM-DT-2yo" secondAttribute="height" multiplier="19:16" id="oKb-iw-6S1"/>
+                                </constraints>
+                                <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="VLCPreviousTemplate" imagePosition="only" alignment="center" imageScaling="proportionallyUpOrDown" inset="2" id="ykW-vZ-DAm">
+                                    <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                    <font key="font" metaFont="system"/>
+                                </buttonCell>
+                                <connections>
+                                    <action selector="gotoPrevious:" target="-2" id="4p6-Eg-e9d"/>
+                                </connections>
+                            </button>
+                            <button translatesAutoresizingMaskIntoConstraints="NO" id="iYd-wn-Bnl">
+                                <rect key="frame" x="20" y="14" width="25" height="14"/>
+                                <constraints>
+                                    <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="10" id="Ccf-qh-Z4p"/>
+                                    <constraint firstAttribute="width" constant="25" id="yjy-it-Bea"/>
+                                </constraints>
+                                <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="VLCVolumeOnTemplate" imagePosition="only" alignment="center" alternateImage="VLCVolumeOffTemplate" imageScaling="proportionallyUpOrDown" inset="2" id="KZQ-HO-iWj">
+                                    <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                    <font key="font" metaFont="system"/>
+                                </buttonCell>
+                            </button>
+                            <button translatesAutoresizingMaskIntoConstraints="NO" id="C5K-aX-3aJ">
+                                <rect key="frame" x="438" y="10" width="22" height="22"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" secondItem="C5K-aX-3aJ" secondAttribute="height" multiplier="1:1" id="VWl-0x-p1I"/>
+                                </constraints>
+                                <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" image="VLCFullscreenOnTemplate" imagePosition="only" alignment="center" imageScaling="proportionallyUpOrDown" inset="2" id="0tH-cP-VqB">
+                                    <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                    <font key="font" metaFont="system"/>
+                                </buttonCell>
+                                <connections>
+                                    <action selector="toggleFullscreen:" target="-2" id="rLd-CX-M6u"/>
+                                </connections>
+                            </button>
+                        </subviews>
+                        <constraints>
+                            <constraint firstAttribute="bottom" secondItem="C5K-aX-3aJ" secondAttribute="bottom" constant="10" id="9hx-OK-TYA"/>
+                            <constraint firstItem="Ihl-7x-5mN" firstAttribute="centerY" secondItem="VLH-qy-cwr" secondAttribute="centerY" id="AlO-aJ-1Je"/>
+                            <constraint firstItem="YSL-bH-k6U" firstAttribute="leading" secondItem="7QH-jb-QdM" secondAttribute="trailing" constant="2" id="CeI-3j-0dg"/>
+                            <constraint firstItem="2ai-dB-Wpq" firstAttribute="leading" secondItem="jSN-hV-r5D" secondAttribute="trailing" constant="2" id="H1a-Fw-P0C"/>
+                            <constraint firstItem="jSN-hV-r5D" firstAttribute="top" secondItem="VLH-qy-cwr" secondAttribute="top" constant="6" id="M4G-Sz-X3l"/>
+                            <constraint firstItem="YSL-bH-k6U" firstAttribute="top" secondItem="VLH-qy-cwr" secondAttribute="top" constant="6" id="QnM-aB-bM3"/>
+                            <constraint firstAttribute="bottom" secondItem="TVM-DT-2yo" secondAttribute="bottom" constant="7" id="RYT-zW-Br7"/>
+                            <constraint firstItem="2ai-dB-Wpq" firstAttribute="top" secondItem="VLH-qy-cwr" secondAttribute="top" constant="6" id="SQA-fK-Mpa"/>
+                            <constraint firstItem="TVM-DT-2yo" firstAttribute="leading" secondItem="Ihl-7x-5mN" secondAttribute="trailing" priority="250" constant="20" id="UBD-5x-a7g"/>
+                            <constraint firstAttribute="bottom" secondItem="YSL-bH-k6U" secondAttribute="bottom" constant="7" id="Wu7-Pv-Dqf"/>
+                            <constraint firstItem="TVM-DT-2yo" firstAttribute="top" secondItem="VLH-qy-cwr" secondAttribute="top" constant="6" id="YDA-hw-CAe"/>
+                            <constraint firstAttribute="bottom" secondItem="2ai-dB-Wpq" secondAttribute="bottom" constant="7" id="ae5-nP-phG"/>
+                            <constraint firstAttribute="bottom" secondItem="7QH-jb-QdM" secondAttribute="bottom" constant="7" id="bFr-EA-byV"/>
+                            <constraint firstAttribute="bottom" secondItem="jSN-hV-r5D" secondAttribute="bottom" constant="7" id="de6-Gd-Mn7"/>
+                            <constraint firstItem="iYd-wn-Bnl" firstAttribute="top" secondItem="VLH-qy-cwr" secondAttribute="top" constant="14" id="ioy-Pv-ElU"/>
+                            <constraint firstItem="7QH-jb-QdM" firstAttribute="top" secondItem="VLH-qy-cwr" secondAttribute="top" constant="6" id="n70-bj-Orj"/>
+                            <constraint firstItem="iYd-wn-Bnl" firstAttribute="leading" secondItem="VLH-qy-cwr" secondAttribute="leading" constant="20" id="pMX-wi-DB4"/>
+                            <constraint firstAttribute="bottom" secondItem="iYd-wn-Bnl" secondAttribute="bottom" constant="14" id="rdI-uU-xtV"/>
+                            <constraint firstItem="YSL-bH-k6U" firstAttribute="centerX" secondItem="VLH-qy-cwr" secondAttribute="centerX" constant="3.5" id="sGc-io-ure"/>
+                            <constraint firstAttribute="trailing" secondItem="C5K-aX-3aJ" secondAttribute="trailing" constant="20" id="sHZ-rt-hX0"/>
+                            <constraint firstItem="jSN-hV-r5D" firstAttribute="leading" secondItem="YSL-bH-k6U" secondAttribute="trailing" constant="2" id="sb6-YO-6fS"/>
+                            <constraint firstItem="Ihl-7x-5mN" firstAttribute="leading" secondItem="iYd-wn-Bnl" secondAttribute="trailing" constant="5" id="sbi-nB-Ucp"/>
+                            <constraint firstItem="7QH-jb-QdM" firstAttribute="leading" secondItem="TVM-DT-2yo" secondAttribute="trailing" constant="2" id="v6c-zz-7Sx"/>
+                            <constraint firstItem="C5K-aX-3aJ" firstAttribute="top" secondItem="VLH-qy-cwr" secondAttribute="top" constant="10" id="yLu-H1-w7g"/>
+                        </constraints>
+                    </customView>
+                    <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="nJc-M4-sMF" customClass="VLCTimeField">
+                        <rect key="frame" x="18" y="57" width="79" height="14"/>
+                        <constraints>
+                            <constraint firstAttribute="width" constant="75" id="IGO-bJ-xu2"/>
+                            <constraint firstAttribute="height" constant="14" id="pcR-j4-JCD"/>
+                        </constraints>
+                        <textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" allowsUndo="NO" sendsActionOnEndEditing="YES" alignment="left" title="0:00" id="ebb-BZ-1l4">
+                            <font key="font" metaFont="systemThin" size="11"/>
+                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="T3x-es-c7v" customClass="VLCTimeField">
+                        <rect key="frame" x="383" y="57" width="79" height="14"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="14" id="a6B-fU-pHt"/>
+                            <constraint firstAttribute="width" constant="75" id="m9r-7l-uQt"/>
+                        </constraints>
+                        <textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" allowsUndo="NO" sendsActionOnEndEditing="YES" alignment="right" placeholderString="∞" id="PYh-Xz-irE">
+                            <font key="font" metaFont="systemThin" size="11"/>
+                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Vd8-0f-Usz">
+                        <rect key="frame" x="98" y="57" width="284" height="14"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="14" id="SsE-i5-v4k"/>
+                        </constraints>
+                        <textFieldCell key="cell" controlSize="small" lineBreakMode="truncatingTail" allowsUndo="NO" sendsActionOnEndEditing="YES" alignment="center" placeholderString="Nothing Playing" usesSingleLineMode="YES" id="uA0-hc-yIU">
+                            <font key="font" metaFont="systemThin" size="11"/>
+                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <slider verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="f9T-Kg-gn6">
+                        <rect key="frame" x="20" y="39" width="440" height="17"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="15" id="lag-bs-Ziy"/>
+                        </constraints>
+                        <sliderCell key="cell" controlSize="small" continuous="YES" state="on" alignment="left" maxValue="10000" tickMarkPosition="above" sliderType="linear" id="OBM-DB-OBK"/>
+                        <connections>
+                            <action selector="timeSliderUpdate:" target="-2" id="6Na-ur-p5P"/>
+                        </connections>
+                    </slider>
+                </subviews>
+                <constraints>
+                    <constraint firstItem="T3x-es-c7v" firstAttribute="leading" secondItem="Vd8-0f-Usz" secondAttribute="trailing" constant="5" id="1vL-HQ-doh"/>
+                    <constraint firstItem="VLH-qy-cwr" firstAttribute="leading" secondItem="Npt-C5-K77" secondAttribute="leading" id="AXK-9N-Zst"/>
+                    <constraint firstItem="VLH-qy-cwr" firstAttribute="top" secondItem="Npt-C5-K77" secondAttribute="top" constant="38" id="FRE-MB-iBT"/>
+                    <constraint firstItem="f9T-Kg-gn6" firstAttribute="leading" secondItem="Npt-C5-K77" secondAttribute="leading" constant="20" id="Ibl-1I-f2u"/>
+                    <constraint firstItem="f9T-Kg-gn6" firstAttribute="top" secondItem="Npt-C5-K77" secondAttribute="top" constant="25" id="N8D-Lc-aKn"/>
+                    <constraint firstItem="f9T-Kg-gn6" firstAttribute="top" secondItem="nJc-M4-sMF" secondAttribute="bottom" constant="2" id="Pix-DL-2C0"/>
+                    <constraint firstItem="f9T-Kg-gn6" firstAttribute="top" secondItem="T3x-es-c7v" secondAttribute="bottom" constant="2" id="S1j-CH-Xvt"/>
+                    <constraint firstItem="Vd8-0f-Usz" firstAttribute="leading" secondItem="nJc-M4-sMF" secondAttribute="trailing" constant="5" id="SvX-6Y-TRg"/>
+                    <constraint firstAttribute="trailing" secondItem="f9T-Kg-gn6" secondAttribute="trailing" constant="20" id="TIT-A8-rRx"/>
+                    <constraint firstItem="f9T-Kg-gn6" firstAttribute="top" secondItem="Vd8-0f-Usz" secondAttribute="bottom" constant="2" id="dwA-kL-5MW"/>
+                    <constraint firstAttribute="bottom" secondItem="VLH-qy-cwr" secondAttribute="bottom" id="oFk-fv-UiZ"/>
+                    <constraint firstItem="nJc-M4-sMF" firstAttribute="leading" secondItem="Npt-C5-K77" secondAttribute="leading" constant="20" id="r2T-tn-CTU"/>
+                    <constraint firstAttribute="trailing" secondItem="VLH-qy-cwr" secondAttribute="trailing" id="rxJ-QQ-cyy"/>
+                    <constraint firstAttribute="trailing" secondItem="T3x-es-c7v" secondAttribute="trailing" constant="20" id="ykz-Sa-B1m"/>
+                </constraints>
+            </view>
+            <connections>
+                <outlet property="delegate" destination="-2" id="3Re-S7-TmJ"/>
+            </connections>
+            <point key="canvasLocation" x="139" y="257"/>
+        </window>
+        <userDefaultsController representsSharedInstance="YES" id="hMn-b4-4vy"/>
+    </objects>
+    <resources>
+        <image name="VLCBackwardTemplate" width="128" height="128"/>
+        <image name="VLCForwardTemplate" width="128" height="128"/>
+        <image name="VLCFullscreenOnTemplate" width="128" height="128"/>
+        <image name="VLCNextTemplate" width="128" height="128"/>
+        <image name="VLCPauseTemplate" width="128" height="128"/>
+        <image name="VLCPlayTemplate" width="128" height="128"/>
+        <image name="VLCPreviousTemplate" width="128" height="128"/>
+        <image name="VLCVolumeOffTemplate" width="128" height="128"/>
+        <image name="VLCVolumeOnTemplate" width="128" height="128"/>
+    </resources>
+</document>
diff --git a/extras/package/macosx/Resources/vlcmenubaricon/VLCPlayTemplate.pdf b/extras/package/macosx/Resources/vlcmenubaricon/VLCPlayTemplate.pdf
index 7503d688f30d38abf94d9f23c1dc1f13fe863c45..58977bc16450747b829506ee68e6f677dc201539 100644
GIT binary patch
delta 3369
zcmai$S5OlQ7KW2hrMI9_M7kiC^guv at w1jE`N{=8_de5ap5TuF}BPc|rUI>Cnzd<Qd
zq=|@%G!-N?k={{2)}7g%o!NcZnRDix`Oo+A&zy&U;^h4cnVM7-?2410yBirUg^>Dp
z+iPj at 1XF_CoP2r0CLZO4T3C#VC%tV6jVOEre-DYELE*96P^q)*=BI9Op6Um5@?G{x
zW at zgR3j^_)1+l>5Lc_{rXK6)-qoARXnKL|<!Ehyv7)OPNug%Tv^|VY)xUU88jYsA;
zKmk-a(m5!MBL^gvd;Tj|1one<g27PD5r8u+7FY^^+b)*3>a4bF%fZx6Mm+C5ad>-@
z4`_JU>h^7sR2F|sdS7YL3IOz8 at 0#}^YM6BWkRkSqm87nqWJ<f`QXzztT$r(0SCDf$
zdG at dTXz_9Lfn`@oau at 62)$u+b#9ne(BsDQp*15}|ivx0vSeopA+XiLyU;w;94)j4L
z<q7~&<r;ahm0`m4<Of}X0u<qmAV5F~6Na7V6%VLoXX!PSl-$^A3furahni&gdHKF6
zhzvr~u%MfTmuT6&vvrG5rM_}g2UWmr_g{ZN0(}>YWXO4TWV_ROklYw^#_ at CNzMA~%
zicAa7{%2J3$X?RQv%@Rj0geNyUUf@?<bfD~Mk7cn^jMHSFAb2xM|-zzybAYVg{Pe4
zzT%s92Zci2VM^p=F$>z3s2Yd-(Hl6~jgYqcNvr)SZag%0O5hh8B_kzWEgUYpk2S=9
ztl4#pU4OP^bGkQWZe3l|T%XGD=w~)#&0mE3RK?Oeii5+C%Ttcw%Otyp-dTz}`2b8m
zx8aup(CmU%Y>^O9B;4%t&eXwtydVdQezH`f2D_Kfadc1>kg}gOc;`T3LFAOF`-vZr
z+ukhi6GO28IUu-~4O{@E+?0m1S-lj;g4C)(`!^kh1V%vO$y|N0R6(Q;bc~NjTX>9P
zH_q6M?YoYw2k^W$7nUCy`}(T}^TcW_mm_;x{DLEAGjL0Y-ANj$e{)va(vTM!J0QjB
zD%hl>WhNyifY%EY5){#G8WLx4Ur4x6XvYx#DXzg`A6uo%HiYvK%ZrOinC#>>jVrH4
zR`Q?e<QqG&n;1V$#RNz^<Xm|9W1YwZRmEqtudH+IYeaEL-puc;<JL~*<~P^l6Xs;a
z?Mn+A{?TEeDwSZUekG}1%H9wb#0$|W%?efION}ck<}+_pBw28$CK&7aYJ-a}m>Za{
zFeHanh84XycTQX;C>Qb%sd~V+FHj^jMD1gt25JSLhVBnhLx*O*sh#3WOnldF<D`k0
ze!xDUVTzasl!AjLQL&KD0p}W<@Jir_z*3T%GshTcIc6ELtiCK2B5@#Y&{fVF2v}uu
zO9<XiQtrV_53)D|MVaBvVh+6i at q3+h8{_*TQMguKD%+*>{PTvQ6z-5)j=CTxRAJnZ
zE>l0uFpP?q6Zx1j(gl#Y&rGq=(IhtOO31g$_GNAxK}!tpX4cavw<wP(8QZC*3f{D{
zeZsE5 at bgVsQCWu%4z1#3oaCnE+jGVg&E?-g5sDkSBCvA#MY$#`q(SYq&5~LEK2N3Q
zdyV&Qi(U1Kx5yq=Dt9Wk^-QfVug|B{Qfer)ZK~y>5u`G$F^$egR=7T2J%G<e at aVoP
zV4B(7Q at Iz>FW-*^>wPSYFc)Ruhy58x!w_4 at xLa*ut!=Gkt-Gs%2lr+AJl>=zdx$uc
z=&^QR5f*6IVO#5B^!jeQd~i@|P<oI=lWvn$)5V~*xy4Pt&6Ld-a~EgNDHVuqgF#|Q
zDp=scwJQ&-N-j)Xs1 at S{lN2Yd<FdE2LD?fpXRW?p&9k&J-!&szPCkn=54TGwWijp+
zTqzB*ax=~@@_N>9sd5!p_A?D?5?XZro$@!_HUuM&Az=#bp4zodG(S&|NRD_MQSnoj
zKaNvR)~eXFnCwEhYWcw$WnE{x)hh0An_38d)<CMT_9l`IE}BNtLy~q&(jTVZC#DnY
z2KDS~tK$9g{2s0P;?gAbVCHMFlb54yrgSekv>6{K0(~4kUt+M1 at M^J^;Rq#v&oA$t
z^zIhYoD!YtrWwL-dV3V#GCIE{)RYF^+VGokm?0^MD;O#4C<vOmnOZ-X&kf1_MfEE6
z??zT2U-%MLL)E4{COv-z<+dXSYvW(9+L`?krP63iAxG8M*Upj~ZHTs>c6hQSnIFaA
zqY at A^shEk0 at rdFb&!te+990lqRJCpF^n}8M>NpWPYCCA_&=xg7{F3fz?XBia`a7fX
zlItZ_!Td`KBRGu3nC=bn33x~icpq#WpfSJQG2WHC_IX}&!Fi^3a;{mK^?lmz+r*l}
zj5y0`ad*uA3vRGwJi5EH!{t#=IH|tu?*+fNPB1rEj&<?q08a&Y$$C4C)*Rog+>*cl
z?O;9nd6d%>xHU5BT-C5$A9;M5>#+H7cOSPox<T4H)&hurJ!b}9M-NfaaJ6c+WDzm&
zu-LZ3m^xE#Unkiw8D4VH0*OY}BPh at TOeNaKHGAX9PDNFc@~z;`i?Y?ig~I&8broN%
z*6eYTp2D_5>h%Qo%OiOe-ry01r#Ml0$g4CB$enb7+kUCPUT(XLAlzM=ou9beuz^-a
zS1$M%gg_!wU3!$}OsQQHuX4JH-Q%xTQs}9n$*_$4`R4)3O)ybSQ7 at 5skt2}|IjCHM
ze1pQw-C`PP!!<0W`LS5`y~=wxE#imchO^N0`W8=Alz)t##=TaBmaE#}Bh#G|e<qL<
ziXpoYONc*84 at J6R<i1h+vv#L0)Ri>LT!?BBXh?6Ux at fHuN)2B97E!j-aHfDCapt+2
zm(RcywzbdY!@D=P-lWi}y{JCrH<2y!J|@<!LBC25Yo1Dy>AZ40`y8F0eE$CEW8k~s
zw>IU}>T;Y;N?7jj#w+0G at aIx(UyZgRkDjn95+2oDJTUpgL}0aJnYD6yVx{`PqnzSN
zTpW{}!mYS%*HSxbM<a`O9aOGcIn-rTlbHS`9c4wqZS%kE4=!1BTThk;Re3$NdNOH_
z3yqC-TrZeu&pADpSCqGx#7tTpi5PAi^&HJU*DW!KJ*?NNZ{73m9=*fQ!;j}bm$9Cn
zCc&>c at xkNc*jUN1#d|(AUV2$NUh>6{J4<ShR1#Ghp4L-Gie|nt*Z1rEi`&j>Oh*?T
z$j!LE4z-)I{M&qj=TqVC@@{VWetOp6`rys0%EUiI$3q&T{kM;@K6sT?4E8=&Qa8cU
zsUg$X2AjsW$`{IDUG}Gz(!a+91b%$=2?xX--EW53H!a8faDH}mtw}k=ns~jTDdPL-
z8M~f8UoWjhQ^liwFWDRpjrfmG#dLlrEL>iq+q1pq8Whmrb70OzEN%Ke`!u>%*^GjV
zAt|BQps-o!!Rl;FNhEB|{c}FGdQtkP)3j{4!CXeR<meG&&t)ljt~b|w^j+(D9g<{P
zP50yDd%r#;Z5)=(md%Mi5xqmZK`Sf!T;``mKJqyXxBR~KV=*rOFKSgx;Q{N#bqVSs
z-4=uTb at w=EdX#0o`7FKJVfT6D2z7UZKC8ABoZvq<B^lilHhQ47eAE>+&$XPCnh|mC
zg;qE<f|=P|y?$oz*46<{8hC~cqmHI&0S(Azfc7E^R8JO#L%GOupj>b!qM`}cpt7<!
zHlf$o-gb3-)|cjzbM)}?Dsl91EpYep;1lcnYW#r(0$d^rZ1TAIx&AAR{@(nZy?8Lc
zgX%x08k#l)BnVoW>Y4dCg<H7!2KYEp+-O>$Gb#u;9F0Vx(P+3b9C;oNKd;0CyX^0(
z|NAbbsIP&9BUJx`)FpxnfpV%kSR`Hzk5$n{V9+YMNOgh=Tn__R!K$ib5qfwO3XRmK
znXqHzkSK)y??R~Hk?OiCD4pLRRuzj at L8FiuG#aa;Pax>hO4uI at AmA!+v;`8Wfktbf
z;WRT2wf~l~IsW`FsqPdf9P~ey0=UcA(CVtR(<h3l^vgE{SvqR2d_C1KQj(B$(xS?Z
zaghfN$V?8A{r%&^6!v!K<ScwF2m&&8HR=fdKsUPcQ%5p=dpLOQiA=>0^|vVB@&p_=
zBM&`S_6pqZdGcX`h!B_b&fJe*5KmNqrPsl{HEO7Ia$7kqg_G-))zM0Ocx`}9jg0sF
zqK>%CY`=WNqrrhIyctYdA^li$2{oVD1GD$`PL64d0R|=DF|_MEXMw7;XdVY$6iQWJ
z6^_Rc5c;}kq#hiFN2%fw2wegiLBL?~dRm(QkD#69MFP<@GhXq~c7AO$A<pUXe4)?!
zU at x<H<iqT*B>=Z?hO)2?k(`#OBqKuX3w at Wrn!kkWPiPYen|`z4R)P_)f^+6x&voY8
sYG_AP!bh<Q3FJ#IjTn*b|NX3Bic=6JEXeH!4+f6G at W{*KNd%sM0K@|tkN^Mx

delta 995
zcmbQPbxVALO}(LhP-0$sYP5lZp+c;k9anKlQEFl?SH-R5gan at xp67Ja3=<MgoYmGW
z;xFpy>F5bcs6TMv)Pd6n4k;W}m^>pU=7EI3gToENHM@@;;8>*py6H at k0`G<;OT^Tf
zU+OyKOpFN#VOnyZVPkxyC*y>(8O$l&DeWwl%r_YwwmIbaWu_U0=${CicV*9o1O;8@
zWAAuec~<gF<vGf8lBbi$(qS7 at Gk3El^NIQ!UnLvA{xp2T9ID2Al4-#^r8b|ok~W?;
zAvW0s8JZVNCRk=BYz}T*7S_bW*ebm1Kete~&_laqBQrJz`wvDlCf9OFGZ~mop3UX1
zZ?ffzv2lojao~xkn=Tk{GcgD>xVG8A+$iuw<44|JpD#SUIt@&cF_}>@45>xjCnqa%
zOEH;ROt$5AtJe=LPAw|dPYuW{N-WWLNiEJU$uH0k^KlNyNvsS>%`M1DEJ^iCE!QhZ
zNz>%gcLoM!NoIbY3s6)+!^O(Tz|hRV)X><#%*fKnP}{&r-M~N{sLnS(g^-efqWqN7
z%`dqpF{&848XCBmI=ko^nmQZl8oL at f>N+}_8|a#uxB$&HFgA9zG at 3l0*Hp#Q&D_<*
z+|5PT%*f18*U{Y6T-U(a(NNdf(Adq;+}zdF$;o{358iov2Bx}(zz{LBGP1NXGMv1G
z&m3LoC0{9;(B>R|111e(17z}Q!R5 at RK(j-I7S~6sZ)X3vK-#D+`NrKN&NFXL=$yK(
zY2V){$rDVRHGk^=xiBbmst9&AZtf^}prn-P#ci9Rtp3%7U%h5!Wx>+GY-fGfiQ3(=
zG7XM*(<E*6*G=);nV_rMtimx<|9pSxp}P*LOW(BL`_i$yD*U|xPaj`J#Mk5Q&rcpI
zJS??#-dSN~-Hu-EH&s(#FHMxIRB_t=zw%o88O8p%-{;H({@49w;$GqUVe(92Sw{28
z+lAwtTr6FTjSU=KjZB?fEX*xj3 at prDEKJNSjg6e0jLl4)>}&|Bm>e!*lwzm=1;}|!
z^z=r~1_uF`i~E}wOpk8eSt`-FR^rx;#sq1xMNR8=pG^K?z;s8o%d|+kqIJH)W5+<P
y`3a{Vv5Q&recI&mFzRxi&wJb4=U0|Zk*m`_A+&Mw2N4-=BcRi`R8?L5-M9dtGGyQY

diff --git a/extras/package/macosx/vlc.xcodeproj/project.pbxproj b/extras/package/macosx/vlc.xcodeproj/project.pbxproj
index f6523ae..ee9aa96 100644
--- a/extras/package/macosx/vlc.xcodeproj/project.pbxproj
+++ b/extras/package/macosx/vlc.xcodeproj/project.pbxproj
@@ -480,10 +480,18 @@
 		6B846FE61CF5D88C00112E54 /* VLCHUDRadiobuttonCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B846FE11CF5D88C00112E54 /* VLCHUDRadiobuttonCell.m */; };
 		6B846FE71CF5D88C00112E54 /* VLCHUDSliderCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B846FE31CF5D88C00112E54 /* VLCHUDSliderCell.m */; };
 		6B846FEB1CF5DBFF00112E54 /* VLCHUDTextFieldCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B846FEA1CF5DBFF00112E54 /* VLCHUDTextFieldCell.m */; };
+		6B8CD3FC1DA2D3590087C27A /* VLCBackwardTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6B8CD3FA1DA2D3590087C27A /* VLCBackwardTemplate.pdf */; };
+		6B8CD3FD1DA2D3590087C27A /* VLCForwardTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6B8CD3FB1DA2D3590087C27A /* VLCForwardTemplate.pdf */; };
+		6B8CD4001DA2FE7C0087C27A /* VLCVolumeOffTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6B8CD3FE1DA2FE7C0087C27A /* VLCVolumeOffTemplate.pdf */; };
+		6B8CD4011DA2FE7C0087C27A /* VLCVolumeOnTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6B8CD3FF1DA2FE7C0087C27A /* VLCVolumeOnTemplate.pdf */; };
+		6B8CD4041DA304050087C27A /* VLCFullscreenOffTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6B8CD4021DA304050087C27A /* VLCFullscreenOffTemplate.pdf */; };
+		6B8CD4051DA304050087C27A /* VLCFullscreenOnTemplate.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 6B8CD4031DA304050087C27A /* VLCFullscreenOnTemplate.pdf */; };
 		6BBBB8AA1D108A17001BD9BA /* VLCRendererDialog.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BBBB8A81D108A17001BD9BA /* VLCRendererDialog.m */; };
 		6BBBB8B41D112BAC001BD9BA /* VLCRendererItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BBBB8B11D10A994001BD9BA /* VLCRendererItem.m */; };
 		6BBBB8B71D114628001BD9BA /* VLCRendererDiscovery.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BBBB8B61D114628001BD9BA /* VLCRendererDiscovery.m */; };
 		6BBBB8B81D12AF72001BD9BA /* VLCRendererDialog.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6BBBB8AC1D108A87001BD9BA /* VLCRendererDialog.xib */; };
+		6BCB590C1DA247CD009BCA66 /* VLCFSPanelController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BCB590A1DA247CD009BCA66 /* VLCFSPanelController.m */; };
+		6BCB59111DA25799009BCA66 /* VLCFullScreenPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6BCB590E1DA2482A009BCA66 /* VLCFullScreenPanel.xib */; };
 		7D3F6525188051F2005776C4 /* BWQuincyMain.xib in Resources */ = {isa = PBXBuildFile; fileRef = 7D3F6523188051F2005776C4 /* BWQuincyMain.xib */; };
 		7D5678ED1D5BA1DC002698F3 /* VLCApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D5678EC1D5BA1DC002698F3 /* VLCApplication.m */; };
 		7D5678F01D5BA397002698F3 /* VLCMainWindowControlsBar.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D5678EF1D5BA397002698F3 /* VLCMainWindowControlsBar.m */; };
@@ -1295,6 +1303,12 @@
 		6B846FE31CF5D88C00112E54 /* VLCHUDSliderCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCHUDSliderCell.m; path = ../../../modules/gui/macosx/VLCHUDSliderCell.m; sourceTree = "<group>"; };
 		6B846FE91CF5DBFF00112E54 /* VLCHUDTextFieldCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCHUDTextFieldCell.h; path = ../../../modules/gui/macosx/VLCHUDTextFieldCell.h; sourceTree = "<group>"; };
 		6B846FEA1CF5DBFF00112E54 /* VLCHUDTextFieldCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCHUDTextFieldCell.m; path = ../../../modules/gui/macosx/VLCHUDTextFieldCell.m; sourceTree = "<group>"; };
+		6B8CD3FA1DA2D3590087C27A /* VLCBackwardTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; name = VLCBackwardTemplate.pdf; path = "Resources/Button-Icons/VLCBackwardTemplate.pdf"; sourceTree = "<group>"; };
+		6B8CD3FB1DA2D3590087C27A /* VLCForwardTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; name = VLCForwardTemplate.pdf; path = "Resources/Button-Icons/VLCForwardTemplate.pdf"; sourceTree = "<group>"; };
+		6B8CD3FE1DA2FE7C0087C27A /* VLCVolumeOffTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; name = VLCVolumeOffTemplate.pdf; path = "Resources/Button-Icons/VLCVolumeOffTemplate.pdf"; sourceTree = "<group>"; };
+		6B8CD3FF1DA2FE7C0087C27A /* VLCVolumeOnTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; name = VLCVolumeOnTemplate.pdf; path = "Resources/Button-Icons/VLCVolumeOnTemplate.pdf"; sourceTree = "<group>"; };
+		6B8CD4021DA304050087C27A /* VLCFullscreenOffTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; name = VLCFullscreenOffTemplate.pdf; path = "Resources/Button-Icons/VLCFullscreenOffTemplate.pdf"; sourceTree = "<group>"; };
+		6B8CD4031DA304050087C27A /* VLCFullscreenOnTemplate.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; name = VLCFullscreenOnTemplate.pdf; path = "Resources/Button-Icons/VLCFullscreenOnTemplate.pdf"; sourceTree = "<group>"; };
 		6BBBB8A71D108A17001BD9BA /* VLCRendererDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCRendererDialog.h; path = ../../../modules/gui/macosx/VLCRendererDialog.h; sourceTree = "<group>"; };
 		6BBBB8A81D108A17001BD9BA /* VLCRendererDialog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCRendererDialog.m; path = ../../../modules/gui/macosx/VLCRendererDialog.m; sourceTree = "<group>"; };
 		6BBBB8AD1D108A87001BD9BA /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = Resources/English.lproj/VLCRendererDialog.xib; sourceTree = "<group>"; };
@@ -1302,6 +1316,9 @@
 		6BBBB8B11D10A994001BD9BA /* VLCRendererItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCRendererItem.m; path = ../../../modules/gui/macosx/VLCRendererItem.m; sourceTree = "<group>"; };
 		6BBBB8B51D114628001BD9BA /* VLCRendererDiscovery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCRendererDiscovery.h; path = ../../../modules/gui/macosx/VLCRendererDiscovery.h; sourceTree = "<group>"; };
 		6BBBB8B61D114628001BD9BA /* VLCRendererDiscovery.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCRendererDiscovery.m; path = ../../../modules/gui/macosx/VLCRendererDiscovery.m; sourceTree = "<group>"; };
+		6BCB59091DA247CD009BCA66 /* VLCFSPanelController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCFSPanelController.h; path = ../../../modules/gui/macosx/VLCFSPanelController.h; sourceTree = "<group>"; };
+		6BCB590A1DA247CD009BCA66 /* VLCFSPanelController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCFSPanelController.m; path = ../../../modules/gui/macosx/VLCFSPanelController.m; sourceTree = "<group>"; };
+		6BCB590F1DA2482A009BCA66 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = Resources/English.lproj/VLCFullScreenPanel.xib; sourceTree = "<group>"; };
 		7D3F6524188051F2005776C4 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = Resources/English.lproj/BWQuincyMain.xib; sourceTree = "<group>"; };
 		7D3F652618805297005776C4 /* BWQuincyManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = BWQuincyManager.h; path = ../../../modules/gui/macosx/BWQuincyManager.h; sourceTree = SOURCE_ROOT; };
 		7D3F652718805297005776C4 /* BWQuincyManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = BWQuincyManager.m; path = ../../../modules/gui/macosx/BWQuincyManager.m; sourceTree = SOURCE_ROOT; };
@@ -1918,6 +1935,8 @@
 				CC6EDD500B9CA2140096068A /* VLCEyeTvController.m */,
 				2AEF857609A5FEC900130822 /* VLCFSPanel.h */,
 				2AEF857709A5FEC900130822 /* VLCFSPanel.m */,
+				6BCB59091DA247CD009BCA66 /* VLCFSPanelController.h */,
+				6BCB590A1DA247CD009BCA66 /* VLCFSPanelController.m */,
 				7D871D391B5E684D000B56C0 /* helpers.h */,
 				7DF812ED1B555A340052293C /* VLCInputManager.h */,
 				7DF812EE1B555A340052293C /* VLCInputManager.m */,
@@ -2494,6 +2513,12 @@
 		CC0430EE13B2461A00D7D52E /* ui graphics */ = {
 			isa = PBXGroup;
 			children = (
+				6B8CD3FA1DA2D3590087C27A /* VLCBackwardTemplate.pdf */,
+				6B8CD3FB1DA2D3590087C27A /* VLCForwardTemplate.pdf */,
+				6B8CD3FE1DA2FE7C0087C27A /* VLCVolumeOffTemplate.pdf */,
+				6B8CD3FF1DA2FE7C0087C27A /* VLCVolumeOnTemplate.pdf */,
+				6B8CD4021DA304050087C27A /* VLCFullscreenOffTemplate.pdf */,
+				6B8CD4031DA304050087C27A /* VLCFullscreenOnTemplate.pdf */,
 				7D9516BB1C60B6C700D14E1A /* status bar item */,
 				1C88BC5719DC7CB300645190 /* fspanel-yosemite */,
 				CCCB86BF0ACFDE4A00CF1E10 /* fspanel */,
@@ -3031,6 +3056,7 @@
 				7DE78AC41B5D0A360019454C /* StreamOutput.xib */,
 				6BBBB8AC1D108A87001BD9BA /* VLCRendererDialog.xib */,
 				7D9516B51C60B69200D14E1A /* VLCStatusBarIconMainMenu.xib */,
+				6BCB590E1DA2482A009BCA66 /* VLCFullScreenPanel.xib */,
 			);
 			name = xibs;
 			sourceTree = "<group>";
@@ -3603,6 +3629,7 @@
 				CC9E5D9D15975F5B00D14E83 /* fs_forward_highlight at 2x.png in Resources */,
 				1C88BA7F19DC7B2200645190 /* yosemite-window-zoom-over-graphite at 2x.png in Resources */,
 				CC9E5D9E15975F5B00D14E83 /* fs_forward at 2x.png in Resources */,
+				6B8CD4001DA2FE7C0087C27A /* VLCVolumeOffTemplate.pdf in Resources */,
 				1C88BB3519DC7C7800645190 /* ys-play-pressed at 2x.png in Resources */,
 				CC9E5D9F15975F5B00D14E83 /* fs_pause_highlight at 2x.png in Resources */,
 				CC9E5DA015975F5B00D14E83 /* fs_pause at 2x.png in Resources */,
@@ -3610,6 +3637,7 @@
 				CC9E5DA215975F5B00D14E83 /* fs_play at 2x.png in Resources */,
 				CC9E5DA315975F5B00D14E83 /* fs_rewind_highlight at 2x.png in Resources */,
 				CC9E5DA415975F5B00D14E83 /* fs_rewind at 2x.png in Resources */,
+				6B8CD3FC1DA2D3590087C27A /* VLCBackwardTemplate.pdf in Resources */,
 				1C88BBEC19DC7C8100645190 /* ys-backward-6btns-dark at 2x.png in Resources */,
 				1C88BC9319DC7CB300645190 /* ys-fs_exit_fullscreen_highlight at 2x.png in Resources */,
 				CC9E5DA515975F5B00D14E83 /* fs_skip_next_highlight at 2x.png in Resources */,
@@ -3702,10 +3730,12 @@
 				CC9E5E00159760B100D14E83 /* repeat-one at 2x.png in Resources */,
 				CC9E5E01159760B100D14E83 /* repeat-pressed at 2x.png in Resources */,
 				CC9E5E02159760B100D14E83 /* repeat at 2x.png in Resources */,
+				6B8CD4011DA2FE7C0087C27A /* VLCVolumeOnTemplate.pdf in Resources */,
 				CC9E5E03159760B100D14E83 /* shuffle-blue-pressed at 2x.png in Resources */,
 				CC9E5E04159760B100D14E83 /* shuffle-blue at 2x.png in Resources */,
 				CC9E5E05159760B100D14E83 /* shuffle-pressed at 2x.png in Resources */,
 				1C88BB3319DC7C7800645190 /* ys-pause at 2x.png in Resources */,
+				6B8CD4051DA304050087C27A /* VLCFullscreenOnTemplate.pdf in Resources */,
 				1C88BA9C19DC7C5D00645190 /* ys-sidebar-podcast at 2x.png in Resources */,
 				CC9E5E06159760B100D14E83 /* shuffle at 2x.png in Resources */,
 				CC9E5E07159760B100D14E83 /* stop-pressed at 2x.png in Resources */,
@@ -3723,6 +3753,7 @@
 				CC9E5E0C159760B100D14E83 /* volume-slider-track at 2x.png in Resources */,
 				CC91906E159B4BB800E634A7 /* volume-high_dark at 2x.png in Resources */,
 				1C88BA6A19DC7B2200645190 /* yosemite-window-fullscreen.png in Resources */,
+				6B8CD3FD1DA2D3590087C27A /* VLCForwardTemplate.pdf in Resources */,
 				CC91906F159B4BB800E634A7 /* volume-low_dark at 2x.png in Resources */,
 				1C88BC1719DC7C8100645190 /* ys-playlist-1btn-dark-pressed.png in Resources */,
 				CC919070159B4BB800E634A7 /* volume-slider-knob_dark at 2x.png in Resources */,
@@ -3744,6 +3775,7 @@
 				1C88BA6519DC7B2200645190 /* yosemite-window-fullscreen-on at 2x.png in Resources */,
 				CC91907A159B4BB800E634A7 /* topbar-dark-center-fill at 2x.png in Resources */,
 				1C88BCB819DC7CB300645190 /* ys-fs_volume_max_highlight.png in Resources */,
+				6B8CD4041DA304050087C27A /* VLCFullscreenOffTemplate.pdf in Resources */,
 				CC91907B159B4BB800E634A7 /* topbar-dark-left at 2x.png in Resources */,
 				1C88BBFE19DC7C8100645190 /* ys-forward-3btns-dark at 2x.png in Resources */,
 				CC91907C159B4BB800E634A7 /* topbar-dark-right at 2x.png in Resources */,
@@ -3796,6 +3828,7 @@
 				CC9190DA159B4CA800E634A7 /* lion-window-minimize-over-graphite at 2x.png in Resources */,
 				CC9190DB159B4CA800E634A7 /* lion-window-minimize-over at 2x.png in Resources */,
 				1C88BB5C19DC7C7800645190 /* ys-repeat.png in Resources */,
+				6BCB59111DA25799009BCA66 /* VLCFullScreenPanel.xib in Resources */,
 				CC9190DC159B4CA800E634A7 /* lion-window-minimize at 2x.png in Resources */,
 				CC9190DD159B4CA800E634A7 /* lion-window-zoom-graphite at 2x.png in Resources */,
 				CC9190DE159B4CA800E634A7 /* lion-window-zoom-on-graphite at 2x.png in Resources */,
@@ -4023,6 +4056,7 @@
 				1CCB5F741A62A724004C3E90 /* macosx.m in Sources */,
 				1CCB5F751A62A724004C3E90 /* VLCMainMenu.h in Sources */,
 				1CCB5F761A62A724004C3E90 /* VLCMainMenu.m in Sources */,
+				6BCB590C1DA247CD009BCA66 /* VLCFSPanelController.m in Sources */,
 				1CCB5F771A62A724004C3E90 /* VLCMainWindow.h in Sources */,
 				1CCB5F781A62A724004C3E90 /* VLCMainWindow.m in Sources */,
 				6B846FE61CF5D88C00112E54 /* VLCHUDRadiobuttonCell.m in Sources */,
@@ -4146,6 +4180,14 @@
 			name = VLCRendererDialog.xib;
 			sourceTree = "<group>";
 		};
+		6BCB590E1DA2482A009BCA66 /* VLCFullScreenPanel.xib */ = {
+			isa = PBXVariantGroup;
+			children = (
+				6BCB590F1DA2482A009BCA66 /* English */,
+			);
+			name = VLCFullScreenPanel.xib;
+			sourceTree = "<group>";
+		};
 		7D3F6523188051F2005776C4 /* BWQuincyMain.xib */ = {
 			isa = PBXVariantGroup;
 			children = (
diff --git a/modules/gui/macosx/Makefile.am b/modules/gui/macosx/Makefile.am
index a49774f..14bbfbe 100644
--- a/modules/gui/macosx/Makefile.am
+++ b/modules/gui/macosx/Makefile.am
@@ -89,4 +89,5 @@ libmacosx_plugin_la_SOURCES = \
 	VLCRendererDialog.h VLCRendererDialog.m \
 	VLCResumeDialogController.h VLCResumeDialogController.m \
 	VLCTrackSynchronizationWindowController.h VLCTrackSynchronizationWindowController.m \
-	VLCVideoEffectsWindowController.h VLCVideoEffectsWindowController.m
+	VLCVideoEffectsWindowController.h VLCVideoEffectsWindowController.m \
+	VLCFSPanelController.h VLCFSPanelController.m
diff --git a/modules/gui/macosx/VLCFSPanelController.h b/modules/gui/macosx/VLCFSPanelController.h
new file mode 100644
index 0000000..c59dd0a
--- /dev/null
+++ b/modules/gui/macosx/VLCFSPanelController.h
@@ -0,0 +1,83 @@
+/*****************************************************************************
+ * VLCFSPanelController.h: macOS fullscreen controls window controller
+ *****************************************************************************
+ * Copyright (C) 2006-2016 VLC authors and VideoLAN
+ * $Id$
+ *
+ * Authors: Jérôme Decoodt <djc at videolan dot org>
+ *          Felix Paul Kühne <fkuehne at videolan dot org>
+ *          David Fuhrmann <david dot fuhrmann at googlemail dot com>
+ *          Marvin Scholz <epirat07 at gmail dot 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>
+
+#import "misc.h"
+#import "Windows.h"
+
+ at interface VLCFSPanelController : NSWindowController
+
+ at property (readwrite)       NSWindow  *voutWindow;
+ at property (readwrite, weak) NSTimer   *hideTimer;
+
+ at property IBOutlet NSView       *controllsView;
+ at property IBOutlet NSButton     *playPauseButton;
+ at property IBOutlet NSButton     *forwardButton;
+ at property IBOutlet NSButton     *backwardButton;
+ at property IBOutlet NSButton     *nextButton;
+ at property IBOutlet NSButton     *previousButton;
+ at property IBOutlet NSTextField  *mediaTitle;
+ at property IBOutlet VLCTimeField *elapsedTime;
+ at property IBOutlet VLCTimeField *remainingOrTotalTime;
+ at property IBOutlet NSSlider     *timeSlider;
+ at property IBOutlet NSSlider     *volumeSlider;
+
+- (IBAction)togglePlayPause:(id)sender;
+- (IBAction)jumpForward:(id)sender;
+- (IBAction)jumpBackward:(id)sender;
+- (IBAction)gotoPrevious:(id)sender;
+- (IBAction)gotoNext:(id)sender;
+- (IBAction)toggleFullscreen:(id)sender;
+- (IBAction)timeSliderUpdate:(id)sender;
+- (IBAction)volumeSliderUpdate:(id)sender;
+
+- (void)fadeIn;
+- (void)fadeOut;
+- (void)center;
+- (void)setActive;
+- (void)setNonActive;
+- (void)setVoutWasUpdated:(VLCWindow *)voutWindow;
+
+- (void)setSeekable:(BOOL)seekable;
+- (void)setVolumeLevel:(int)value;
+- (void)updatePositionAndTime;
+- (void)setStreamTitle:(NSString *)title;
+- (void)setPlay;
+- (void)setPause;
+
+
+/**
+ Center the window on the specified screen in the lower third
+
+ \note If the screen is invalid, the main screen is used
+
+ \param screenID    The screen on which to center the window
+ */
+- (void)centerWindowOnScreen:(CGDirectDisplayID)screenID;
+
+
+ at end
diff --git a/modules/gui/macosx/VLCFSPanelController.m b/modules/gui/macosx/VLCFSPanelController.m
new file mode 100644
index 0000000..c74247b
--- /dev/null
+++ b/modules/gui/macosx/VLCFSPanelController.m
@@ -0,0 +1,404 @@
+/*****************************************************************************
+ * VLCFSPanelController.m: macOS fullscreen controls window controller
+ *****************************************************************************
+ * Copyright (C) 2006-2016 VLC authors and VideoLAN
+ * $Id$
+ *
+ * Authors: Jérôme Decoodt <djc at videolan dot org>
+ *          Felix Paul Kühne <fkuehne at videolan dot org>
+ *          David Fuhrmann <david dot fuhrmann at googlemail dot com>
+ *          Marvin Scholz <epirat07 at gmail dot 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 "VLCFSPanelController.h"
+#import "VLCCoreInteraction.h"
+#import "VLCMain.h"
+
+ at interface VLCFSPanelController () {
+    BOOL _isCounting;
+    CGDirectDisplayID _displayID;
+}
+
+ at end
+
+ at implementation VLCFSPanelController
+
+#pragma mark -
+#pragma mark Initialization
+
+- (id)init
+{
+    self = [super initWithWindowNibName:@"VLCFullScreenPanel"];
+    return self;
+}
+
+- (void)windowDidLoad
+{
+    [super windowDidLoad];
+
+    /* Do some window setup that is not possible in IB */
+    [self.window setOpaque:NO];
+    [self.window setAlphaValue:0.0f];
+    [self.window setMovableByWindowBackground:YES];
+    [self.window setLevel:NSModalPanelWindowLevel];
+    [self.window setStyleMask:self.window.styleMask | NSResizableWindowMask];
+    [self.window setBackgroundColor:[NSColor clearColor]];
+
+    /* Inject correct background view depending on OS support */
+    [self injectVisualEffectView];
+    //[self injectBackgroundView];
+
+    [(NSButtonCell*)[_playPauseButton cell] setHighlightsBy:NSPushInCellMask];
+    [(NSButtonCell*)[_playPauseButton cell] setShowsStateBy:NSContentsCellMask];
+
+    [_volumeSlider setMaxValue:[[VLCCoreInteraction sharedInstance] maxVolume]];
+    [_volumeSlider setIntValue:AOUT_VOLUME_DEFAULT];
+}
+
+#pragma mark -
+#pragma mark Control Actions
+
+- (IBAction)togglePlayPause:(id)sender
+{
+    [[VLCCoreInteraction sharedInstance] playOrPause];
+}
+
+- (IBAction)jumpForward:(id)sender
+{
+    static NSTimeInterval last_event = 0;
+    if (([NSDate timeIntervalSinceReferenceDate] - last_event) > 0.16) {
+        /* We just skipped 4 "continous" events, otherwise we are too fast */
+        [[VLCCoreInteraction sharedInstance] forwardExtraShort];
+        last_event = [NSDate timeIntervalSinceReferenceDate];
+    }
+}
+
+- (IBAction)jumpBackward:(id)sender
+{
+    static NSTimeInterval last_event = 0;
+    if (([NSDate timeIntervalSinceReferenceDate] - last_event) > 0.16) {
+        /* We just skipped 4 "continous" events, otherwise we are too fast */
+        [[VLCCoreInteraction sharedInstance] backwardExtraShort];
+        last_event = [NSDate timeIntervalSinceReferenceDate];
+    }
+}
+
+- (IBAction)gotoPrevious:(id)sender
+{
+    [[VLCCoreInteraction sharedInstance] previous];
+}
+
+- (IBAction)gotoNext:(id)sender
+{
+    [[VLCCoreInteraction sharedInstance] next];
+}
+
+- (IBAction)toggleFullscreen:(id)sender
+{
+    [[VLCCoreInteraction sharedInstance] toggleFullscreen];
+}
+
+- (IBAction)timeSliderUpdate:(id)sender
+{
+    input_thread_t *p_input;
+    p_input = pl_CurrentInput(getIntf());
+
+    if (p_input) {
+        vlc_value_t pos;
+        pos.f_float = [_timeSlider floatValue] / 10000.;
+        var_Set(p_input, "position", pos);
+        vlc_object_release(p_input);
+    }
+    [[[VLCMain sharedInstance] mainWindow] updateTimeSlider];
+}
+
+- (IBAction)volumeSliderUpdate:(id)sender
+{
+    [[VLCCoreInteraction sharedInstance] setVolume:[sender intValue]];
+}
+
+#pragma mark -
+#pragma mark Metadata and state updates
+
+- (void)setPlay
+{
+    [_playPauseButton setState:NSOffState];
+}
+
+- (void)setPause
+{
+    [_playPauseButton setState:NSOnState];
+}
+
+- (void)setStreamTitle:(NSString *)title
+{
+    [_mediaTitle setStringValue:title];
+}
+
+- (void)updatePositionAndTime
+{
+    input_thread_t *p_input = pl_CurrentInput(getIntf());
+
+    /* If nothing is playing, reset times and slider */
+    if (!p_input) {
+        [_timeSlider setFloatValue:0.0];
+        [_elapsedTime setStringValue:@""];
+        [_remainingOrTotalTime setHidden:YES];
+        return;
+    }
+
+    vlc_value_t pos;
+    char psz_time[MSTRTIME_MAX_SIZE];
+
+    var_Get(p_input, "position", &pos);
+    float f_updated = 10000. * pos.f_float;
+    [_timeSlider setFloatValue:f_updated];
+
+
+    int64_t t = var_GetInteger(p_input, "time");
+    mtime_t dur = input_item_GetDuration(input_GetItem(p_input));
+
+    /* Update total duration (right field) */
+    if (dur <= 0) {
+        [_remainingOrTotalTime setHidden:YES];
+    } else {
+        [_remainingOrTotalTime setHidden:NO];
+
+        NSString *totalTime;
+
+        if ([_remainingOrTotalTime timeRemaining]) {
+            mtime_t remaining = 0;
+            if (dur > t)
+                remaining = dur - t;
+            totalTime = [NSString stringWithFormat:@"-%s", secstotimestr(psz_time, (remaining / 1000000))];
+        } else {
+            totalTime = toNSStr(secstotimestr(psz_time, (dur / 1000000)));
+        }
+        [_remainingOrTotalTime setStringValue:totalTime];
+    }
+
+    /* Update current position (left field) */
+    NSString *playbackPosition = toNSStr(secstotimestr(psz_time, t / CLOCK_FREQ));
+
+    [_elapsedTime setStringValue:playbackPosition];
+    vlc_object_release(p_input);
+}
+
+- (void)setSeekable:(BOOL)seekable
+{
+    [_timeSlider setEnabled:seekable];
+    [_forwardButton setEnabled:seekable];
+    [_backwardButton setEnabled:seekable];
+}
+
+- (void)setVolumeLevel:(int)value
+{
+    [_volumeSlider setIntValue:value];
+}
+
+#pragma mark -
+#pragma mark Window interactions
+
+- (void)fadeIn
+{
+    [NSAnimationContext beginGrouping];
+    [[NSAnimationContext currentContext] setDuration:0.7f];
+    [[self.window animator] setAlphaValue:1.0f];
+    [NSAnimationContext endGrouping];
+
+    [self startAutohideTimer];
+}
+
+- (void)fadeOut
+{
+    [NSAnimationContext beginGrouping];
+    [[NSAnimationContext currentContext] setDuration:0.7f];
+    [[self.window animator] setAlphaValue:0.0f];
+    [NSAnimationContext endGrouping];
+}
+
+- (void)centerWindowOnScreen:(CGDirectDisplayID)screenID
+{
+    /* Find screen by its ID */
+    NSScreen *screen = [NSScreen screenWithDisplayID:screenID];
+
+    /* Check screen validity, fallback to mainScreen */
+    if (!screen)
+        screen = [NSScreen mainScreen];
+
+    NSRect screenFrame = [screen frame];
+    NSRect windowFrame = [self.window frame];
+
+    /* Calculate coordinates for new NSWindow position */
+    NSPoint coordinates;
+    coordinates.x = (screenFrame.size.width - windowFrame.size.width) / 2 + screenFrame.origin.x;
+    coordinates.y = (screenFrame.size.height / 3) - windowFrame.size.height + screenFrame.origin.y;
+
+    [self.window setFrameTopLeftPoint:coordinates];
+}
+
+- (void)center
+{
+    [self centerWindowOnScreen:_displayID];
+}
+
+- (void)setNonActive
+{
+    [self.window orderOut:self];
+}
+
+- (void)setActive
+{
+    [self.window orderFront:self];
+}
+
+#pragma mark -
+#pragma mark Misc interactions
+
+- (void)hideMouse
+{
+    [NSCursor setHiddenUntilMouseMoves:YES];
+}
+
+- (void)setVoutWasUpdated:(VLCWindow *)voutWindow
+{
+    _voutWindow = voutWindow;
+    int newDisplayID = [[self.window screen] displayID];
+
+    if (_displayID != newDisplayID) {
+        _displayID = newDisplayID;
+        [self center];
+    }
+}
+
+#pragma mark -
+#pragma mark Autohide timer management
+
+- (void)startAutohideTimer
+{
+    /* Do nothing if timer is already in place */
+    if (_isCounting)
+        return;
+
+    int _timeToKeepVisibleInSec = var_CreateGetInteger(getIntf(), "mouse-hide-timeout") / 1000;
+    _hideTimer = [NSTimer scheduledTimerWithTimeInterval:_timeToKeepVisibleInSec
+                                                  target:self
+                                                selector:@selector(autohideCallback:)
+                                                userInfo:nil
+                                                 repeats:NO];
+    _isCounting = YES;
+}
+
+- (void)stopAutohideTimer
+{
+    [_hideTimer invalidate];
+    _isCounting = NO;
+}
+
+- (void)autohideCallback:(NSTimer *)timer
+{
+    if (!NSPointInRect([NSEvent mouseLocation], [self.window frame])) {
+        [self fadeOut];
+        [self hideMouse];
+    }
+    _isCounting = NO;
+}
+
+#pragma mark -
+#pragma mark Helpers
+
+/**
+ Create an image mask for the NSVisualEffectView
+ with rounded corners in the given rect
+ 
+ This is necessary as clipping the VisualEffectView using the layers
+ rounded corners is not possible when using the NSColor clearColor
+ as background color.
+ 
+ \note  The returned image will have the necessary \c capInsets and
+        \c capResizingMode set.
+ 
+ \param bounds  The rect for the image size
+ */
+- (NSImage *)maskImageWithBounds:(NSRect)bounds
+{
+    static const float radius = 8.0;
+    NSImage *img = [NSImage imageWithSize:bounds.size flipped:YES drawingHandler:^BOOL(NSRect dstRect) {
+        NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect:bounds xRadius:radius yRadius:radius];
+        [[NSColor blackColor] setFill];
+        [path fill];
+        return YES;
+    }];
+    [img setCapInsets:NSEdgeInsetsMake(radius, radius, radius, radius)];
+    [img setResizingMode:NSImageResizingModeStretch];
+    return img;
+}
+
+/**
+ Injects the visual effect view in the Windows view hierarchy
+ 
+ This is necessary as we can't use the NSVisualEffect view on
+ all macOS Versions and therefore need to dynamically insert it.
+ 
+ \warning Never call both, \c injectVisualEffectView and \c injectBackgroundView
+ */
+- (void)injectVisualEffectView
+{
+    /* Setup the view */
+    NSVisualEffectView *view = [[NSVisualEffectView alloc] initWithFrame:self.window.contentView.frame];
+    [view setMaskImage:[self maskImageWithBounds:self.window.contentView.bounds]];
+    [view setBlendingMode:NSVisualEffectBlendingModeBehindWindow];
+    [view setMaterial:NSVisualEffectMaterialDark];
+    [view setState:NSVisualEffectStateActive];
+    [view setAutoresizesSubviews:YES];
+
+    /* Inject view in view hierarchy */
+    [self.window setContentView:view];
+    [_controllsView setAppearance:[NSAppearance appearanceNamed:NSAppearanceNameVibrantDark]];
+    [self.window.contentView addSubview:_controllsView];
+}
+
+/**
+ Injects the standard background view in the Windows view hierarchy
+ 
+ This is necessary on macOS versions that do not support the
+ NSVisualEffectView that usually is injected.
+ 
+ \warning Never call both, \c injectVisualEffectView and \c injectBackgroundView
+ */
+- (void)injectBackgroundView
+{
+    /* Setup the view */
+    NSColor *color = [NSColor colorWithCalibratedWhite:0.0 alpha:0.8];
+    NSView *view = [[NSView alloc] initWithFrame:self.window.contentView.frame];
+    [view setWantsLayer:YES];
+    [view.layer setBackgroundColor:[color CGColor]];
+    [view.layer setCornerRadius:8.0];
+    [view setAutoresizesSubviews:YES];
+
+    /* Inject view in view hierarchy */
+    [self.window setContentView:view];
+    [self.window.contentView addSubview:_controllsView];
+}
+
+- (void)dealloc
+{
+    [self stopAutohideTimer];
+}
+
+
+ at end
diff --git a/modules/gui/macosx/VLCMainWindow.h b/modules/gui/macosx/VLCMainWindow.h
index 06fbc48..d10c801 100644
--- a/modules/gui/macosx/VLCMainWindow.h
+++ b/modules/gui/macosx/VLCMainWindow.h
@@ -32,7 +32,7 @@
 
 #import "Windows.h"
 #import "misc.h"
-#import "VLCFSPanel.h"
+#import "VLCFSPanelController.h"
 #import "VLCMainWindowTitleView.h"
 
 @class VLCDetachedVideoWindow;
@@ -91,7 +91,7 @@ typedef enum {
 @property (readonly) BOOL nativeFullscreenMode;
 @property (readwrite) BOOL nonembedded;
 
- at property (readonly) VLCFSPanel* fspanel;
+ at property (readonly) VLCFSPanelController* fspanel;
 
 - (void)changePlaylistState:(VLCPlaylistStateEvent)event;
 
diff --git a/modules/gui/macosx/VLCMainWindow.m b/modules/gui/macosx/VLCMainWindow.m
index 4d89e13..c31d461 100644
--- a/modules/gui/macosx/VLCMainWindow.m
+++ b/modules/gui/macosx/VLCMainWindow.m
@@ -236,10 +236,8 @@ - (void)awakeFromNib
     frame.size.height = frame.size.height - 1.0;
     [_searchField setFrame:frame];
 
-    _fspanel = [[VLCFSPanel alloc] initWithContentRect:NSMakeRect(110.,267.,549.,87.)
-                                             styleMask:NSTexturedBackgroundWindowMask
-                                               backing:NSBackingStoreBuffered
-                                                 defer:YES];
+    _fspanel = [[VLCFSPanelController alloc] init];
+    [_fspanel showWindow:self];
 
     /* make sure we display the desired default appearance when VLC launches for the first time */
     if (![defaults objectForKey:@"VLCFirstRun"]) {
@@ -476,7 +474,7 @@ - (void)makeSplitViewVisible
     [_splitView setHidden:NO];
     if (self.nativeFullscreenMode && [self fullscreen]) {
         [[self.controlsBar bottomBarView] setHidden:NO];
-        [self.fspanel setNonActive:nil];
+        [self.fspanel setNonActive];
     }
 
     [self makeFirstResponder:_playlistScrollView];
@@ -493,7 +491,7 @@ - (void)makeSplitViewHidden
     [self.videoView setHidden:NO];
     if (self.nativeFullscreenMode && [self fullscreen]) {
         [[self.controlsBar bottomBarView] setHidden:YES];
-        [self.fspanel setActive:nil];
+        [self.fspanel setActive];
     }
 
     if ([[self.videoView subviews] count] > 0)
@@ -850,10 +848,10 @@ - (void)setVideoplayEnabled
     if (self.nativeFullscreenMode) {
         if ([self hasActiveVideo] && [self fullscreen]) {
             [[self.controlsBar bottomBarView] setHidden: b_videoPlayback];
-            [self.fspanel setActive: nil];
+            [self.fspanel setActive];
         } else {
             [[self.controlsBar bottomBarView] setHidden: NO];
-            [self.fspanel setNonActive: nil];
+            [self.fspanel setNonActive];
         }
     }
 }
diff --git a/modules/gui/macosx/Windows.m b/modules/gui/macosx/Windows.m
index 7a926aa..98f9558 100644
--- a/modules/gui/macosx/Windows.m
+++ b/modules/gui/macosx/Windows.m
@@ -672,16 +672,16 @@ - (void)becomeKeyWindow
 
     // change fspanel state for the case when multiple windows are in fullscreen
     if ([self hasActiveVideo] && [self fullscreen])
-        [[[[VLCMain sharedInstance] mainWindow] fspanel] setActive:nil];
+        [[[[VLCMain sharedInstance] mainWindow] fspanel] setActive];
     else
-        [[[[VLCMain sharedInstance] mainWindow] fspanel] setNonActive:nil];
+        [[[[VLCMain sharedInstance] mainWindow] fspanel] setNonActive];
 }
 
 - (void)resignKeyWindow
 {
     [super resignKeyWindow];
 
-    [[[[VLCMain sharedInstance] mainWindow] fspanel] setNonActive:nil];
+    [[[[VLCMain sharedInstance] mainWindow] fspanel] setNonActive];
 }
 
 -(NSArray*)customWindowsToEnterFullScreenForWindow:(NSWindow *)window
@@ -782,9 +782,9 @@ - (void)windowDidEnterFullScreen:(NSNotification *)notification
     _inFullscreenTransition = NO;
 
     if ([self hasActiveVideo]) {
-        [[[[VLCMain sharedInstance] mainWindow] fspanel] setVoutWasUpdated: self];
+        [[[[VLCMain sharedInstance] mainWindow] fspanel] setVoutWasUpdated:self];
         if (![_videoView isHidden])
-            [[[[VLCMain sharedInstance] mainWindow] fspanel] setActive: nil];
+            [[[[VLCMain sharedInstance] mainWindow] fspanel] setActive];
     }
 
     NSArray *subviews = [[self videoView] subviews];
@@ -812,7 +812,7 @@ - (void)windowWillExitFullScreen:(NSNotification *)notification
     }
 
     [NSCursor setHiddenUntilMouseMoves: NO];
-    [[[[VLCMain sharedInstance] mainWindow] fspanel] setNonActive: nil];
+    [[[[VLCMain sharedInstance] mainWindow] fspanel] setNonActive];
 
 
     if (_darkInterface) {
@@ -1015,8 +1015,8 @@ - (void)hasBecomeFullscreen
     [o_fullscreen_window setAcceptsMouseMovedEvents: YES];
 
     /* tell the fspanel to move itself to front next time it's triggered */
-    [[[[VLCMain sharedInstance] mainWindow] fspanel] setVoutWasUpdated: o_fullscreen_window];
-    [[[[VLCMain sharedInstance] mainWindow] fspanel] setActive: nil];
+    [[[[VLCMain sharedInstance] mainWindow] fspanel] setVoutWasUpdated:o_fullscreen_window];
+    [[[[VLCMain sharedInstance] mainWindow] fspanel] setActive];
 
     if ([self isVisible])
         [self orderOut: self];
@@ -1045,7 +1045,7 @@ - (void)leaveFullscreenWithAnimation:(BOOL)b_animation
         return;
     }
 
-    [[[[VLCMain sharedInstance] mainWindow] fspanel] setNonActive: nil];
+    [[[[VLCMain sharedInstance] mainWindow] fspanel] setNonActive];
     [[o_fullscreen_window screen] setNonFullscreenPresentationOptions];
 
     if (o_fullscreen_anim1) {
-- 
2.8.4 (Apple Git-73)



More information about the vlc-devel mailing list