From 05c41dce1bbc2dec1e2edc4bac9a80d51d10f23a Mon Sep 17 00:00:00 2001 From: Artem Bochkarev Date: Mon, 26 Mar 2018 17:52:37 +0700 Subject: [PATCH] IDEA-163208: fixes for popover 1. fixed width popover via layout constrints 2. add ButtonImgText (to use as tap-and-hold item) --- bin/mac/libnst64.dylib | Bin 46576 -> 47376 bytes native/MacTouchBar/src/ButtonDesc.h | 4 +++ native/MacTouchBar/src/ButtonDesc.m | 33 ++++++++++++++++++ native/MacTouchBar/src/PopoverDesc.m | 29 +++++---------- native/MacTouchBar/src/TouchBar.m | 10 ++++++ .../intellij/ui/mac/touchbar/NSTLibrary.java | 1 + .../ui/mac/touchbar/TBItemButtonImgText.java | 25 +++++++++++++ 7 files changed, 81 insertions(+), 21 deletions(-) create mode 100644 platform/platform-impl/src/com/intellij/ui/mac/touchbar/TBItemButtonImgText.java diff --git a/bin/mac/libnst64.dylib b/bin/mac/libnst64.dylib index 0e2f0599dfe5476f20ce7ed14aa467586087c6c1..35e1d25073067b44d517d736477310c96bf4b57f 100755 GIT binary patch literal 47376 zcmeHwe|#KO)%PTAN>D;lAQ%K>DHK|0OIn#yA}L9e)GbYDXqvWyCD|t1W+BNgyPMJ? z!7Xi}%My%eq2hxEM5ri_QK=RMO-msK6#_m=RPYIkIQ1zS5w!ZKeZS}2b7y8}ciZag z`_KF7v^#gsk9+R9=bn4+kNJ@o|N7QHjx&tB35H=z!tZ4K=DpW2wiqS2GK|ykD+95m zWm(sMa;CH-`TUz45^>G1^c;yXFRFv@Uxeb2ap*^I3!F$m6=Yfdus3$MPe zt)(j%@8}M61vBdVkjVSSdz26jYmsTPfoy4Mi^Zd%?zO_;t?!CvMR=Hujzhx=^5_a= zOAG7Q))|P!NI|c>zhA9#z9RxOd<1z^-}r_|W_|x~jmo)+91Vwt6_icCws3dMaTu?D z>swUL86tpS5v@h0r7bNz-8Y81+gn22Yr>#-K8lUpe-%6)yt|~ zlvcSem(&AOzaTwN6mm;TcV|m%L)YqXXG`{A9sdgaj(3_cE!6=vJmW%XPcH-L|!Bsj)$|!+adC%i9CWm@`R!ikr(O; ztPPUudG#9+d4-aT;KTWyuCMMKUU{P;uZkQL2f;_7Uo6-e4X%l0`b*g@O3qdhLaGT;FSIT|Q9iT2`$XO@ zkw>sco={XG?a>~H2N>b4Z(@_;i--_{4=>Lal~vyOZA#u)o=OQmoIG*^8UtHe>K9$P zxUP1Q4siV{zfmr!z$McaO#N1hU_=qlk5kKl8?QpZlP7Ti1V$yj}R}-RA;VLfl0di1E8X!-T^@v2`VWl$Uf> z(JarnsA)qi9_+fPKD0U-h;F!OVHAVtjp69^v5RWLZQ;PIH5zfz@?bO;LVvxeT9H@^ z$t644a*ywaRUo$~7QG0zq+i>G7tWe3rX~J)ZhqqpST&trsWfYW(;AujUw6uBlMG|# z;q7nQ*(y+Tk)lBl(x)R$pD!a6+;cd&HQ{J*VYsIo4i0lPG#^-h=*R&$vI?Z242oxNaWxr%E4)U<#FN9`mQnxt(-5 zY?Wb%^C#;L`Zx6+G>SK$46XdBI%H}%hzvuVVd7+0SyIK1+y zJ|lJ+RG(x6DnRO?BFTmkf2!yutlM#kDw^F~{IFF;#X9wRpQ;ySLfyi5YHl34TVZc5M+siNOpN8}z<Vlmiv0 zPZf+3I%WQplU`8wSR09&q!uWc!uidoIq$HwR`MZ3f>AGmZ=co3X!DCKqhX&v3G^PT zLSgTfyca5|W2h{C4P=AOisVl|Zxt~!D4X_Ht$MontOPYMx3BgiRre=Yp^5W}N6|MO z@Y(iZUxUw)zom-$ROQiJy<`65E7V%nQzq)hE$!q#n)dxm7ukf{_pT6K4qL4xDrfr+ z3fINN_0P5MRL6*Bx>K8 z%zWhbeVr9Ly7t|vDxcQAuaVz-+P4b*7f$JlN9e!xNyI4Chhb<`DphnQ$>Z*9K8meO zGRVy&&S~RWP9H`+%^wI?BX>5$C)Krk1bwMSi%)BRZM1b!K5a6;)82WMug^U33MyOL zd-p{EQsy1p#VS9ja-g?T1Q@YioWs;N)=-XNYe<1-iXLAB_ynyFlh3PWr>3dWL63%lF&p z(k9MeJ}wjklqYC`4~2OoFdr1ko9y-lDfVV_hG0h+%j)kBk_kxtUDgw-kDSQDn|Fye zUr<;>@_w4YB!wjUacF*vWei&zn3H|B(TO+Ok5t=T$_;XK{#wMmG%h*uXeO1B=CA4U zU+0=0o&24ukEhB1VY!yy-`_9eWd!}9#NUT8%w1Np2lY44CK<^da*(-fh8O**LVxmv zbNwkl()x1?aZy4SCH_=ZnLk;3Zke^53UPW#GklFhUaIJ~>^kPAc4DAlGHRVe%&DT4 z3n?*QV#=^TmFG`RL?P8Eq?QV)Mj^FSNVOF5KdJ}#RR-%-1%8IW6ymZPbDm`^^~9nZ zRndiZ(IeIlrWUY^j6tRJ=^AG%jSf#<2B(Fu9DTWl9?o}wgM^MEQ|F$87a zW*;;s*vjm)PFGS6lF*bLR0|v_FGz83BkDlJx0Hwx#*!(AtWl#(*8YO|8LQNSL6-=?mJTs?vd*tuv5WUgT}X|&5)sB&LJ zs8j>G9Gj**J;S@JL1k|kv`STm3sixAtNudWcYSZ2brfJ1z)yn)};{n>7 zVwX<#qQss-gv4E#Ilf87Z2AX^+A{u+Lx=pyZ5Agx$B-0nK8q^V_f+H%NGZnoQ_NxY zp{V_3AkY5OE*}z@tgnyxk}p~-L43QoWQ)pIM+NnAK?i}Jyk%6CG{VW2eeRMPRY`TmBf4~>HQ$0srq5Tf_tjDetpv* z1Ms#{)Gwhy{*s+4tc~#2f17NS(%bPO0DG=QqC=fYz9fp zUKTfOT}s4M!9S?cQf64N=P=gn5bzWNVUZ&jZas4Wu|9PW1*3Do)wih2f==!uTMX91 zJe4G;l+Wj`k-vq1Knqy0gsvea`Gi` zj6pbl7_apV=`rRhDg#gTuJ=IY>L(_!;xx}INCrqB^F2x+W~8;r-L=WOhw761YEuml zVMUli{@KqZX^J$046U4@XQZCIB~|%TRsrAV**(dRv}dZfgPN$x01dbUnema z0_m3ZXkhDC(`?FDRuMl@B1Cx(lm`4$&5Y=snc5C*^x)4P=UGa+5cN)Z}CKV^Pj zp=siOF;faAtNMV!{H8;E9}ze19YEP|K0QD2+0K@>)-HXGWt@Pm0G_6Gf0S!)y?j2^ zicD4dw8Jrml9q8vFIs~R#{)KpIbW!E6P2f6p7rLqT3M9_k%y+u?y4dPp4z)^8OAdmGZ{V`zOkKhMYTzbeEVcx3u|2%X_o zwxU`Koy{GEwl>VW@U#W>%?OEdW_gzzR2p?t-pxq}S1oZVw1v!H67)=B$pH7~;i|Ydqg{pw-q*&9O^a2F;miwKHbDJ{3juncbD7kF1X#m_o&x-=;QARi3PJ zjH(=?)>kQq61MLnl#3R^ymUf^_F4T*Hh)c|R4+`k$Ldw6pE38a)lHximp&`#6@awU@S+uK9P2OE@_>%v|ZL4=aLxnlS3WLC_=Hgvl-nxsLYI{Zih9USXC*+O_R_YT*a z7IOpEfpfUtFNv*QQy{lbs(C=xcEgN?5}Wq6u6kO<6Yb|pudh+iNFCjJY76tG_orSe z;V|p9kNgwzXJ(Oq<`LxQ{S)$kd<|RHg1e7#yr=yy>L-WM|4W?b=4IcoKw~=-HJ-mKNmaAfq=(n0nW&J*eE=Kw-aTFP1 zl+tgWgP!iv?`);t?|9!E!?0VwpPs4pJ3_p+_pemE-oX8W%IHM)HwAs2M$2|qmEO-PNo(I!Wfyc&8|o!IrA*&Xcl$!B zauMl$l>PBc=1uR9Z=HqwhwkbfPe{AZXqU4CDNe9!%jWb*+Ic}Z$T^RL{@ypyt` z2_?ffE+q+0Gps{1r0S4|Tj6RHnWRQw=pFLyl-bNV;X(}~*1P1dn74|sHx*bT;42C| zKrO_p8y;GAGnNN~e5%s$#6lDb4)O)MgW|b=;`C3NZ}B!D_0P)tx#8{D;ioDle*%V4 z>sl&8-Hq|C7c%zaIh1cC!=z4`gSuSFVqdY|uVna+pikOfZRw>fhvtB#KcSw6eaxju zsOQ64!_<4&nX$o}qKUt0iK)KAB=dOY9=7gR;1r@dmb=~Vea`*@%}4qQ0w$G$kVWB( z?qBh}05ZrhqRKh%XE79K5Y)_1b31Zn16(|5H)KucGO;MVba(NsS8|Jx)6^kLQGl~d zEX3t3r7=pv=>CHB$1@qexsv25=Brmh60eg+Xwm+_=_I(1 zuDL1paNTx_6qUVbguFC$8EjN=KV?r9eUr9olRJ6;Ci(24m;8N|U;ZF1NUOKPEP~%t zyLHGq_f&8W^P&u*>9PYF(k0eojHZnQ+SehNXau)%E&2$Jr5QuX=7c}lN9#3Wl(Zp1 z+QY8?53wEK|90UsGUbhKcxF8 zMR9f5N|{`@i>|P}GMQGTv@nGG(%nxCzeJ%EZ?~lDGmG`9{2Lq2ELuX^6|5^)yP?S~ zw7GK#&A+9D)ni4_Ok2<=Pz#}^%u;0Vr{?;3#;}ul>4tKu@(m?-CThj&r0V28e;;~Y zUxQVj>ZAOSy$eY-S}A1~fzO|MiV)~Jb_rxf0}3GRqYWHXMYd41LXS7t3K8?5Qafet zr3%qTfapp@3q+DM&S{CjC4H3X?c$YCu;2;ob=Iaz>hfNGySn&-J%ar_u$Xw`x01H8 z3TRJOT~F>)`#V~lpra0~m(u7H8Lg{Ldu3efv$7~TDoT!tk_s;AQ)VdHCT6&w%k8T? zfCdjwN!kgFKR{3^J_c5;US!f&N3fRkxct6?jGOg|zf0zktK zqR^>f5acwM0aD-+c4_#_d>DfIKaGu-!Zee&42b&Mkrr<`4MkHng)QkLEH)D;daQcd zdKBSN?sqiW^Al%3VGL>^_?Y|IH#k&(lk6x1$t@IIX$ zILk0RbRUIkKjrEx`Z4X{Biy72OQHIdlMtdGV<{{lZcE@m-K?Zo$5VE?ExD<86#cRQ z8TQ{ux%vtoB$1>74>ymW%+M&h!fA^sPw$XgXAN1;Q0P%ho%2{MZHd!LcbD}jk$AC+ z2{xEW6*EuD?&EysU+YQSuyqUb?!|4djOQUX9vGqQX?yLJ(JKh0Hq)uNoe_AUHIJn9 znS4(}FVqjh7ASZ6m6TLor}9wKb`}=yxkqY`Rl-(;-Bvo_)oEn|wlw!Dp z+61Qk-)0M^x-qcV9i*!vx*`Hau97;YBAS&D%VfUo3wx1g(ruRp@=^pN-XI=DI^a(g zRj^)Y*qyDc+6(CGe0Agv)f#jYRB&Js5?JzL0Wf^c5A(WMY7bsckD+TTD0hSleJ?utS z3i6X&RKdg4_9^ofKN2YZF~*wx0(L6!IRRG@n5;`cegX|r@CVwuOqp*hyIJ#@o5<#G z1a+Z8kr4XnTXE1HF>tGa&2jjeum?!dVI~U~`(^|FE(}*cN1NWfZjnjl5PfQ_M#Rn^KXB zCK`LJ%M{@=B4H+hY6lmtL?b!uKrNF{4CD;Qa~4J1xR-jF+L1rp`e`~h+R?4o|IU?4 zU*9}N-SIH%r`?<AtEWSQ(2fm_%V73=V1vimSDf8!&?c$=iflO|s( z<9wEL0#w1c(AJA3Wx;n?7ClJJ_2;)-32oxsYd zEs(~LQELrJQNzpk9IkrBh4P4N#Hu2$J}exaw%N~dgWKjja9ig%>SXMvH|qM5e_=4R zFc@M)fXITMO+&(C;Lv+8IxgUq0&T?<9V8u6=2aN1x%PEq))VY{=64Cj4#^$!3&36m ziQ)^Cx0CboeBdwah%_G{T`Tihoc(AHTnUw=QKNatx|+oI6|E(e)MVlzWUft3oKu(F zUA<{{UTyLOTJPRd%M8ebxQqu{8ivqeo?Mh1!i}dVF*`U(sd<)C6Y^Qjznw_A*kPJk zCw3Uw)%5nGK@abj3V2 zT=yzk)9|<9j>CuQtl~|pRJR;cj$In$^00DiYsL)&b1s)j)!1jfS%iEkbAlA|iUL1c zLs)7SHr;MuQ+2Oy8p^{xjs4p=*0Lc_VZm%jlx05U81gO_M0XU;k1MS8F+%B^6Prn4 z_k42PpSBUuFz!#4KE@W{73X!N5$<=-B_ZTAvaTAg+e?B_^}VS2Nb#mS2vS=B-JBiT zwKeaB9+$I-Ve5}45QkY(O_GMKHyGq~dx2>B5>W8y%@;bdrliaIquA>a$_zX1$4F!B z#}9Ve%XZqkpXXp|pX2{}lZWr)RlZI(PQmw+7-paljmYWavEJ`WRrazQn)h6e_*O}BQ|3}! zQ>)D)FiD#)^fUjLtids(@*uY>DMhgp2?7_rUOiocX6pX0q-( z9;r-Munwb|T+i-DGZ}NJim8Yxd#ng^nm?3`0RrvaG^`!4A4c3NCf6`?+U^$SFz)@t zMqM8aBV);iS1}xnV*WI;srOa8Qdj`$O5HYvWusC*n1Cx?se4tWe5z7si*C;pf+f{E zmg;$xTMG9d?MGs5vwl=UV^Cy>q0w2DP zKv+rnFrsbB{DN|C8j9+fneHpQdoDfBp5cGxsQ*DfZ{?WPtX1V|E<@dBprgDURC~YLRMitlJKg6oT8F}HeM`6zrwZB0i4^gBT*Z+X{<96o6=%waG`uPKD zAElo&zpX_(p{snG6*9j;C8DdWU;(8w7|UH{x>6Hnpss?XXGnDwBry1SoT1mEDKh)q zp!H`oYAuE zNN9ARN#>}vSd}lvbo+Y=+f&7-Bm`JKV$B_&e2Twv6`RAnma@FXPE0Yl@&z^rMFfhN zNa`%>1tyyxBK6RvdHqW$4wZWOpxYPEz7||{7FAg{GewLr`V*f2!R|K&PDg*uq~=1e zvrg&jA*HYVt_%4A%_WO=s^)|?_B|A<(ybM@51y~eGmOnc#nYdnEzaWUJ83trc=}_s zlUO|ci?ml)JpKL=PPPqk!n=ya(|PL)+b*>8RiET1(y$x86_7vKm*8aEdQNsmkQ8qY zppM1UI2&@)0=9UX$m*l*jpAui06!U2JWWbnl_;JjdIbB6r-^1=1I5!s*Pg-RX`(&0 zqEh^foIlAMdRP^ULRBaLTNI+#Jcf3PdgTl~MOvah(*V_{_({WhJf>WqDxLFw!)QpI zRG(}kc$OJyVfAqJ#Bx-xdN>b}2vM!z9u5oUaq|GdxxY-olOB3j zH$BRvQ+=AzMS(Mk%3TuCkjA$c2jL*wI-rrYka$#w3vl0f(OSi*qWiE3=}#Tc4SwlM z#aj^j`GF?1DE1)F15-x)gFj(hw*9Ngzwy96%7sn5WY3ey=3S}gCwKocKiT{^e0{a5 zL(L^rOu@xe8a7?9``gy=WPKa$$D6+?BidZ703WYU6)l2(i;}-wl)P!$qGYse(eMH? zihB?LBh)T3zFfKJv8fQDZW);X(orB*#&Tm03ZFKYXde|R^9AF?Ju zAJlLw85HvXmdFBVB6{d0Y}V90iBrQa+1tYto%R+UZ|eb^OhXrqL^Km=Mkt_%Kuc)D zPdyk)d(o3=gU_snfA-?5O2d=swIaW!4NN>@?3dYP`U z4m0-eqbpn(`@c(97y^v_kJD9xt{$bU&(PHXUHvCr-9uN;(bb)F^#)ztN>>xni2JE; zgt|jRB$Cys9qbOr;lpaFr)L%|y%kqSiK3ZpF=48)nT z4BxS;F!*a$PGQSJ@y?9GST88i7>x-qf>t9orSm^??oH9tg+RL!yCDcRXgSrf)+a3EqSTX$-_WsD?`k8Ejt) ztt!?p4YY@PVig-CC6P6qp@@M`MUl3)rbc@-a3g17y`zEdSSKnMtL8S2g>Hh94T0G8 zi@M`smjDq=W7ts1MqN3Wuxwpaz#E#}TbITqn7 zAr*l*IN&Y83b+_FXT(jkY&K_!awEnX2Li8#$1iDUjcRRIo1^G&a(c-ijf3!`! zCrF;q8HmKFH6qbq3~kR}@^Cyl2Sa^eb+D7{k~O<=W2ha~>u&3Sn>psLy8(t?rkaN> z0adAUtW$p5)DgZhR?``d1s8CSuP}n^BZ2Pr1^BK{JlxaPK^Mr<7>e?DciJ5Qdi7vS2l?MtVo(J`Z!QHPqMd$l7oR z_z13+bgRy$dwd%_J#KUbt`8CqyN(l{!Z&tPkiwTp(Dc>uMd%ajgVdj5ZP8E!jn*FG zScp&2P)>1?iZ$Wr;^2lD{0XvEyR$E8cO*^V3r09i7gSf5Ch52J0oh#T#8I4sT07K$}S z!|OK~q1a-4s&2^|WmbR5j)W0EmxUdbqQN*qD@bZs zQ(z7I*-hc@pwSVCbr}3q5udA zafpw)i0z?vrCCn0KeV<3qe=&NlB@!1&@wcf#6qh(gG=d}JimPb+^`$LJQ$_$*S(f} z+))n<3(=!v9f#wn33Ou^%gJF^5pIKFtAcusx26cqR5cYvNf8?HL%_sb<4W_gh4WM_ zCa;bKqjA+&F+_;(w+GcE1#a9N!f>v~`kDashB(FmP-=r~0vIl+Jg2+C%f(0G1RU=X z?sVYOfrYeobx@@P>m8!zCr46!nsMao6mdE`2_)x2+%@=%meAr#eDeyCkE08|n%NTK z%C_h-jaWw@8f?cmqdKXtlUE^AdYGlAf=V>jViMFt6AG$^%x@Ni;$49V#hu2^KzA@! z5ecmicE%8ogK|keQ?WV}k2MCPO@XcmCQC6+2+>H~74Y)v&PYd~0^JKz0yMm0N<+aV z$TdKAlp562({pKSMfFUylt*B;rNX1IdYB@ZTLs&F-Jwpd$V{yj zrpr^SX3_t4J7|NC3UcxI$ZJ)HX~Vz*1{w);cOftEtqDhcJ>A!LW0L8^GFvlupC4yl zUnVn{SS*Z8U;AZ1jS6XI;(*43MO;tGnXUy+nXwenz@~+|+rs$BXItDCqE#dNP0Sz_ zX&y35ny#xS7AMtK2YsqSyfu(nE^QdpEnT`~X@w7s9P2{mjZO-K#+uIHdYV8OYH~=z z<#JIMPk98QXp~O0F-}Bp8M4k`b~llS3yomvl}$Ei&!>$mo76M_7dBO<-Y(R_ z&hU+Dx~u2qhBhU*^rcPHmNR4?&Ba&ExwxvlV&1iv&z@_nn?0AVjcYGAsy;Y}E~{qG zz4r1s7aK^KvQBXWG@OBoFC}6bRTq~_Mo7N)@(<1dW*%WaR`X$6f>$DK42QbomF?}l zxTYbKE_*C8ILGq+iGV)6; z(zy(m7uZF^+Bd+ynWXf*Y$>Uy(;KF!%vE#P6+^J-I=5iul@OE`mX#Mdu~#>}@*Cw; z61Au!xvXjX5*mxt}T`uM~fK8*Cg`y!qCE$Crrja*3m*nM< z$p0tDvMZF>DuTWUN1?6JU^a`QRcG2ik)9({H`Ir09^lu3r_gK;nP5*oBEkozOOX#>smv(6S^Fp7RMs?~pE_6Hxn|A2@U-*bZ<7Q0Sq3PchdSM#X zkv}Z-b92xS2z^El`e}401xK#-xl`z+ip@T2{T>wh*)~O8X!R z6&#V2pep<*z)h1M68rG}9SfU~X|M{dOlht7Y2$3A2i;=5S_M8Xv)h(`Ll z4_)7qHEt}v(d~f;1kPo*Q~ynNYnA$X?KUR(c^-R?Nk_j(@Y-(lz78Ee{7C0fv763s z=CIpiVy~|s!EU;~{QN>2_1bMj@Y-Lrzx9hF zc>Qfq@Y+tAe_ZfhJC~fMD(^!={eJ8S{%IXWJCGc&|K@5JD%X8zdnP*ESonP?9c~pk zSG!#DFSHBArEf~RG)cQOihX`kugdQgyzdMJuM@nEhY5ND0LP&Ql|CZ;<7X?lRrqzg zM5ZYGk39ZAAo$k>uldIW|BQ#f-C5 zD`Y-KFO$>paY>Vs5^e;)F}iRa+WuwNxsbRV^T5-tSM*%%=>Hem@jVb(xHuH!oY zp$y=?^QM96s(jrJ+Al@~@AbQJ!RvO>{N)!YIbOeO6ub}Q3HVKucF8p_D;N4|(ckMA z^Mt-u=w83j@j|z2r>ui?+`m;|(w5rIM;ER`+k0iV3yI5d545qabtq4FAF6tlC(@x`k)UT(GiTMSNqrb zQcm2X?2&b+@7_J5B>YKlc&zj2phVo0@q|dc7Avz25$T=+Q6n`$mbk+AggZ zDj8ls7!>?ssoyIiXI$`J|47VGa=i8!pQ-R(Kd73c@ZR}T{|6PmRm#Yl>3CH#Pk5K9v_b24sei={zFaB!7um==t~S=H9AEPIT|)5piGOK78W6k>*+{qbVsD*4 zo4tu|uh?~;q(E_d(fH^-biMj-c4N^$J#b;KqUW;Dum1)6kSskv3W;A0_#HjSzv$;a zbUA~fkDHe5TK8{lFI}EqhwF8^UdN9}yZm0#cO}*9s?x=(6umCj>vsA;5*;6vv|G~k zlHMw5pQPI*)%%iq-%sxs>ixn05kC4L4;_7$bF zlvM9a>3H{=;Prmg-vrkCZhAjW&r|h$`wp46>iwL4f&Wudy}!Fp;I|~rlXtizvJPJ(aY3&GZWdVY1L$!{??>o3 z@}TfNF6oPs>bRuG6@8yfk7N2ihTd=0tN8`u?mJukXX^`?LDKuD;K!@9*mSy7v8CuONXF5|4F$El5Nh^5%6Y zK1<}K=W-zW8<0nHj7YijwkYmg?Xj;bU0Sa8*e>O66?y5o94HZXt`B!r(ygeYN6;@K z>tih|mwx`Z;+U4hpLBl1GoP{Xo(t;;>jus47kRn#(tJLdr|c8`a<#{ZXFiilZik2O zcF(+PpQjzR-=H;7=`Mj=H9D#&&DG_*@|G?@zLKVl^U|7#Phr!q zBEF?H3ZE!|eVghcWe`#3KFj{a$yF^aEwOl@?fRCsj_X_2_5`Bs##J{|^;flT=xhh2 zXLZYJdh;`CBzECjIeg^xpHhWad1`~}LT$mNA6|g(a>)D6MxwBvNc7p4YW)=mdI{QK zw0^UNUU+fd5?_edsN4B<>3V*D?x z@x+eWOa^=(M?Mr|BrJSGOsbwCNWDbPuQcN|Z6nd2mqiwTM8rr89!3sZ(Mb3*bJyUN z#Bi6}ct&DW6grfpG_t;tD9IGWN*akBS@PJgWE%?p`A$$m4>NR0g@x8ho3BhjH{G}JAtcKji;w0#Brr5UYVYkvsE zNNoLU?(*F4fiHAS!u{5|Q7!BgX6HwqATGgR5%KA^GK6-U98m2cWjYQ(0ChF21v#9q$SvY@3 z$w&;;WOAu@)QrTqQ_uH7t?=sW+FF8Lk@$v|wm@44^cb8lR7xJsl&;v?reJqFy4Tlj z1!M@hp^=30i$1`@P7f z9%Pt9{M)@G1XX+~g-8Q735Du1TJY7Hu237%cVwk^hw&vXVZqI(7CeV~96l;mgU>{` zec1S7o_eF%cr-5>G+xZ>jv2qqU)$1!7>kd#+%|!Go3Uepksmi!W%&xnPx6g?>Fx%; z%pu=AdKFmpl_DGU*}P?ei030m#z5W#V`vHPwT(66)Q|0td^^MQd3X_;zAtt00(=bv z14y-zm@vT@z#d9Ie@e#Y{B554Scvg^h#R;C`|j$UYGZ4Dlkrtsz2~76#R22qd`LF_ zBY%Q1atrRWCK7phjQ=j)^BB$s70U(v$AkspC`QYe@!*7s#@6o<$DKGE6BaG6 zUW$Ro-9+^A_ALFCxi=^1PG=mL;0{g3_a;s>cHD+1iVLLjpP$%d{G!19O8BdjY?CF9 zv){|U`#56)zm)yNL^8|W1*9S)o-KfJZg+`%8zS$Ycky|Q z&s$T38RYXQpA&ZyW(S`~_`Km?=#wLwV zOyuFs;;MnXk%@$(e*<~+ubf%(8ms#A#`8xCNAeTL0h7oZ&ui_^OH3HZPe4dHau4Q> zKsW^C0cb_G@d+hE6Hx8~+z2=k?x)`;TQ0EgBv#Al5;!67R)LL^6@5U%rzm)*&M)u_ z0=EkMTY<*}o`8orsC@n2(fb9~?;Du{>-TX!BCviBr$=D@{>@zi>-TQHEUl>-QMm z)%mBZ`ka1((oa7xKTlx&oP49e`uX@yf%S9oTLjk6!#^mne!g;-!1}q$p9`#?rz|KE z`&_8>xj*tHw1lG?L^$M(?C;FVg`Z=QK1ul{2fqpKqer{-7=NEcGvC>aJpF)3&hy7Ka zKba=*fWVh&*st`xieU7~0eOyN4d4%yI`56%Ca``_@{0oN_y3+1Sih&XUtsH2CBFza zAW5En|7otk`hBMsfepED_;G;?1^y3#O9cM5z-0ozCa_Q7yveG(a)Hkkc%Hz1fvW@# z3G5g6Zh;#G{<^>`1%653R)K#faEHJrB2H3$BLYtsc)h?B?Tb%EJQ4VGfky-*Sch;>xHA@{v5A{h0V zCi*oCeTTqNfe#9Nx4`;7>o*0~_i*A`BLYVjDEK;ot7;T{v%n+O3hoowC;2}o@R0C7u3>o( z?FE5br>Xo01RfXuzW|1LCMv37l;Fw@PgU?FO`qYR&-1_m4}6CQ{+fbqc~5!hKlQ-x zc;J%@()GK*16O(AHU;CXj$1tRPkG=kdEloNZ0q}mf^k+y9w@Mv4VNhxTC3wS58Uj5 z*L&d4C>UpT40`C#d*ELw*e?Gc9{M@Qv3|g+qgKH-{~86u3)B(!z_)qe&nOsYb$rD` zf80ZV)&u{S2ev%$-#lDrRQ-k+0rR`rI|$$O=6k!!O847iOlON581VrN~hS1P=!9yl2>uL*SZ;I%_OFq zHY?p@!AzdRFnG-D&YNj!H&xrzW$tWbkI8efxXhl$l3{u`)iJ+!FQ`Rr1;KXd+b)84 zGV1*yy^GPJ5y(nbGg|1Qva}z93$-EAqQB^>8V`&{CQ9W^=S;_mb)CH0pe~H6Jt5M! ziCVILMiyB8eQwW=m5Y*P>x!t3MY7-L$a;?hNZPPOVsBOAT8pBV&wbP5C>Yf(kKBxD zH$1>*Z}6sf()3#&UYhH!M+S+%V{6~&$RMkG9A31#t&xGvyrtn~arSmS;YrICCZMx7cE}wZu1O99mmdb!^3r7#4BIt%@LaQ*WxnDq`sy; zgzJ^4Rh2C6cw&DwQsqe}WoiPKbJ{G+e*BSdQ-H&@SD$ugl6UFTFzQ}qmYWQE7e90R zKK-^s8YCO`X*k)bSGX)&^qB-_Z$9Jp>C9`K!403B#UK7yWu)Qs-yLz#GSn$`Kt7ig@(LQSvXx-dyhYfAIC49M*l3ELpty=bp*EFkPC5B6jX2re zJl+!Bw2-G_w&0A)xpPs0*~@Zk>vd^13x7d8N?#%;0U0dzp90BBg>-M2iREI1zVc0N z^@;bad?Ee!PO?(j2J#0{va3sm;5d*gKiQKRIKOMkqkIJBPyeeGB*)F=w4EC(t>#9# z+RKgBE#=0!+sKW#zryWR0vXhZkH6B9Q4jg3Hb_~rVLBjxz9YkabZbEwfppY=^2cjO z=5lvsx5p?E%7ZiTE`wyyv{f<)ZqsO@)1%$WF&6BezYCJVlJoB{WN>Etg9I5&F}Z`o zf4#=@E%4mTojLyuLhd|SKkl8u?)YcAxiC3P>zUeIG|Te*VQRVM3q~Y{Dne(JkvQ2c;7~+TjgA8fB^y%z01l)uFVnG^GOC%&I#PxT~ zXru5!>@*e#qdzb~IM)ZFRS#NaU}1reHV65Sc?dZsQxI7;I>V)Xk5tV=(&&hqq!9hp zgKXI;oH3nxP&NkSw|R2NaI<8J(QZU`pjF!}*PkCq(>Ifmgt;eWQZZMEn zo}sdvn5nFrYDdp>v$$EDP?^r-t_sC8s literal 46576 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 diff --git a/native/MacTouchBar/src/ButtonDesc.h b/native/MacTouchBar/src/ButtonDesc.h index dd23ea615529..ec4583236d1c 100644 --- a/native/MacTouchBar/src/ButtonDesc.h +++ b/native/MacTouchBar/src/ButtonDesc.h @@ -13,3 +13,7 @@ @interface ButtonTextDesc : ButtonDesc - (id)init:(NSString*)text act:(execute)act; @end + +@interface ButtonImgTextDesc : ButtonDesc +- (id)init:(NSImage *)img text:(NSString*)text act:(execute)act; +@end diff --git a/native/MacTouchBar/src/ButtonDesc.m b/native/MacTouchBar/src/ButtonDesc.m index d6a19c89339f..83f4e5190b4d 100644 --- a/native/MacTouchBar/src/ButtonDesc.m +++ b/native/MacTouchBar/src/ButtonDesc.m @@ -14,6 +14,11 @@ @property (retain, nonatomic) NSString * text; @end +@interface ButtonImgTextDesc() +@property (retain, nonatomic) NSImage * img; +@property (retain, nonatomic) NSString * text; +@end + @implementation ButtonDesc - (id)init:(execute)act { self = [super init]; @@ -61,3 +66,31 @@ @synthesize text; @end + +@implementation ButtonImgTextDesc +- (id)init:(NSImage *)img text:(NSString*)text act:(execute)act { + self = [super init:act]; + if (self) { + self.text = text; + self.img = img; + } + return self; +} +- (nullable __kindof NSTouchBarItem *)create { + nstrace(@"create button.imgAndText [%@]", self.uid); + + NSButton *button = [[[NSButton alloc] init] autorelease]; + [button setImagePosition:NSImageLeft]; + [button setImage:self.img]; + [button setTitle:self.text]; + [button setTarget:self]; + [button setAction:@selector(doAction)]; + [button setBezelStyle:NSRoundedBezelStyle]; + + NSCustomTouchBarItem *customItemForButton = [[[NSCustomTouchBarItem alloc] initWithIdentifier:self.uid] autorelease]; + customItemForButton.view = button; // NOTE: view is strong + return customItemForButton; +} +@synthesize img, text; +@end + diff --git a/native/MacTouchBar/src/PopoverDesc.m b/native/MacTouchBar/src/PopoverDesc.m index 0a9fbfeaab6d..9945ab406402 100644 --- a/native/MacTouchBar/src/PopoverDesc.m +++ b/native/MacTouchBar/src/PopoverDesc.m @@ -25,28 +25,15 @@ - (nullable __kindof NSTouchBarItem *)create { nstrace(@"create popover [%@]", self.uid); NSPopoverTouchBarItem * popoverTouchBarItem = [[[NSPopoverTouchBarItem alloc] initWithIdentifier:self.uid] autorelease]; + + if (self.img != nil) + popoverTouchBarItem.collapsedRepresentationImage = self.img; + if (self.text != nil) + popoverTouchBarItem.collapsedRepresentationLabel = self.text; + if (_width > 0) // Otherwise: create 'flexible' view + [popoverTouchBarItem.collapsedRepresentation.widthAnchor constraintEqualToConstant:_width].active = YES; + popoverTouchBarItem.showsCloseButton = YES; - - if (_width <= 0) { - // create 'flexible' view - if (self.img != nil) - popoverTouchBarItem.collapsedRepresentationImage = self.img; - if (self.text != nil) - popoverTouchBarItem.collapsedRepresentationLabel = self.text; - } else { - // create fixed width view - NSButton *button = [[[NSButton alloc] init] autorelease]; - [button setImagePosition:NSImageLeft]; - [button setImage:self.img]; - [button setTitle:self.text]; - [button setTarget:popoverTouchBarItem]; - [button setAction:@selector(showPopover:)]; - [button setBezelStyle:NSRoundedBezelStyle]; - [button.widthAnchor constraintEqualToConstant:_width].active = YES; - - popoverTouchBarItem.collapsedRepresentation = button; // strong - } - popoverTouchBarItem.popoverTouchBar = self.expandBar.touchBar; popoverTouchBarItem.pressAndHoldTouchBar = self.tapHoldBar.touchBar; return popoverTouchBarItem; diff --git a/native/MacTouchBar/src/TouchBar.m b/native/MacTouchBar/src/TouchBar.m index 6ebfb88aa9d0..8e6c86738aae 100644 --- a/native/MacTouchBar/src/TouchBar.m +++ b/native/MacTouchBar/src/TouchBar.m @@ -110,6 +110,16 @@ id registerButtonImg(id tbobj, char* raster4ByteRGBA, int w, int h, execute acti return bdesc; } +id registerButtonImgText(id tbobj, char* text, char* raster4ByteRGBA, int w, int h, execute action) { + if (w <= 0 || h <= 0) { + nserror(@"incorrect image sizes"); + return nil; + } + ButtonDesc * bdesc = [[[ButtonImgTextDesc alloc] init:createImgFrom4ByteRGBA((unsigned char *)raster4ByteRGBA, w, h) text:[NSString stringWithUTF8String:text] act:action] autorelease]; + [(TouchBar *)tbobj registerItem:bdesc]; + return bdesc; +} + id registerSpacing(id tbobj, char* type) { SpacingDesc * spdesc = [[[SpacingDesc alloc] init:[NSString stringWithUTF8String:type]] autorelease]; [(TouchBar *)tbobj registerItem:spdesc]; diff --git a/platform/platform-impl/src/com/intellij/ui/mac/touchbar/NSTLibrary.java b/platform/platform-impl/src/com/intellij/ui/mac/touchbar/NSTLibrary.java index 74faa15989f2..620b180cdf60 100644 --- a/platform/platform-impl/src/com/intellij/ui/mac/touchbar/NSTLibrary.java +++ b/platform/platform-impl/src/com/intellij/ui/mac/touchbar/NSTLibrary.java @@ -16,6 +16,7 @@ public interface NSTLibrary extends Library { ID registerSpacing(ID tbObj, String type); // allowed types: 'small', 'large', 'flexible' ID registerButtonText(ID tbObj, String text, Action action); ID registerButtonImg(ID tbObj, byte[] raster4ByteRGBA, int w, int h, Action action); + ID registerButtonImgText(ID tbObj, String text, byte[] raster4ByteRGBA, int w, int h, Action action); ID registerPopover(ID tbObj, String text, byte[] raster4ByteRGBA, int w, int h, int popW); void setPopoverExpandTouchBar(ID popoverObj, ID expandTbObj); void setPopoverTapAndHoldTouchBar(ID popoverObj, ID tapHoldTbObj); diff --git a/platform/platform-impl/src/com/intellij/ui/mac/touchbar/TBItemButtonImgText.java b/platform/platform-impl/src/com/intellij/ui/mac/touchbar/TBItemButtonImgText.java new file mode 100644 index 000000000000..6c88c696526e --- /dev/null +++ b/platform/platform-impl/src/com/intellij/ui/mac/touchbar/TBItemButtonImgText.java @@ -0,0 +1,25 @@ +// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +package com.intellij.ui.mac.touchbar; + +import com.intellij.ui.mac.foundation.ID; + +import javax.swing.*; + +public class TBItemButtonImgText extends TBItemButton { + private final Icon myIcon; + private final String myText; + + public TBItemButtonImgText(Icon icon, String text, NSTLibrary.Action action) { + super(action); + myIcon = icon; + myText = text; + } + + @Override + protected ID _register(ID tbOwner) { + return TouchBarManager.getNSTLibrary().registerButtonImgText( + tbOwner, myText, NSTLibrary.getRasterFromIcon(myIcon), + myIcon.getIconWidth(), myIcon.getIconHeight(), myAction + ); + } +}