From 45c040b9091aaa411ef4c0df39eb6ff9379e86ba Mon Sep 17 00:00:00 2001 From: kichik Date: Mon, 8 Dec 2003 12:53:32 +0000 Subject: [PATCH] - fixed bug #848868 - StartMenu trims 3 lines of text - made StartMenu treat different fonts better, it will not resize according to the selected font git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@3261 212acab6-be3b-0410-9dea-997c60f758d6 --- Contrib/StartMenu/StartMenu.c | 131 +++++++++++++++++++--------------- Plugins/StartMenu.dll | Bin 6656 -> 6656 bytes 2 files changed, 72 insertions(+), 59 deletions(-) diff --git a/Contrib/StartMenu/StartMenu.c b/Contrib/StartMenu/StartMenu.c index 39df9097..43ad48b1 100644 --- a/Contrib/StartMenu/StartMenu.c +++ b/Contrib/StartMenu/StartMenu.c @@ -118,18 +118,27 @@ static BOOL CALLBACK ParentWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARA return bRes; } +void AddRTLStyle(HWND hWnd, long dwStyle) +{ + long s; + + s = GetWindowLong(hWnd, GWL_STYLE); + SetWindowLong(hWnd, GWL_STYLE, s | dwStyle); + s = GetWindowLong(hWnd, GWL_EXSTYLE); + SetWindowLong(hWnd, GWL_EXSTYLE, s | WS_EX_RIGHT | WS_EX_RTLREADING); +} + #define ProgressiveSetWindowPos(hwWindow, x, cx, cy) \ - SetWindowPos( \ + MoveWindow( \ hwWindow, \ - 0, \ x, \ y_offset, \ cx, \ cy, \ - SWP_NOACTIVATE | SWP_NOZORDER \ + FALSE \ ); \ \ - y_offset += cy + 5; + y_offset += cy + 3; BOOL CALLBACK dlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { @@ -146,27 +155,43 @@ BOOL CALLBACK dlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) RECT dialog_r, temp_r; - HFONT hFont = (HFONT)SendMessage(hwParent, WM_GETFONT, 0, 0); + HFONT hFont = (HFONT) SendMessage(hwParent, WM_GETFONT, 0, 0); int y_offset = 0; int width, height; + int baseUnitY; + + // Init dialog unit conversion + + { + TEXTMETRIC tm; + HDC hDC; + + hDC = GetDC(hwndDlg); + SelectObject(hDC, hFont); + + GetTextMetrics(hDC, &tm); + baseUnitY = tm.tmHeight; + + ReleaseDC(hwndDlg, hDC); + } + GetWindowRect(hwChild, &dialog_r); ScreenToClient(hwParent, (LPPOINT) &dialog_r); - ScreenToClient(hwParent, ((LPPOINT) &dialog_r)+1); + ScreenToClient(hwParent, ((LPPOINT) &dialog_r) + 1); width = dialog_r.right - dialog_r.left; height = dialog_r.bottom - dialog_r.top; - SetWindowPos( + MoveWindow( hwndDlg, - 0, dialog_r.left, dialog_r.top, width, height, - SWP_NOZORDER | SWP_NOACTIVATE + FALSE ); hwIcon = GetDlgItem(hwndDlg, IDC_NSISICON); @@ -182,27 +207,14 @@ BOOL CALLBACK dlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) if (rtl) { - long s; - - s = GetWindowLong(hwText, GWL_STYLE); - SetWindowLong(hwText, GWL_STYLE, (s & ~SS_LEFT) | SS_RIGHT); - s = GetWindowLong(hwText, GWL_EXSTYLE); - SetWindowLong(hwText, GWL_EXSTYLE, s | WS_EX_RTLREADING); - - s = GetWindowLong(hwLocation, GWL_STYLE); - SetWindowLong(hwLocation, GWL_STYLE, (s & ~ES_LEFT) | ES_RIGHT); - s = GetWindowLong(hwLocation, GWL_EXSTYLE); - SetWindowLong(hwLocation, GWL_EXSTYLE, s | WS_EX_RTLREADING); - - s = GetWindowLong(hwDirList, GWL_EXSTYLE); - SetWindowLong(hwDirList, GWL_EXSTYLE, s | WS_EX_RIGHT | WS_EX_RTLREADING); - - s = GetWindowLong(hwCheckBox, GWL_STYLE); - SetWindowLong(hwCheckBox, GWL_STYLE, s | BS_RIGHT | BS_LEFTTEXT); - s = GetWindowLong(hwCheckBox, GWL_EXSTYLE); - SetWindowLong(hwCheckBox, GWL_EXSTYLE, s | WS_EX_RTLREADING); + AddRTLStyle(hwText, SS_RIGHT); + AddRTLStyle(hwLocation, ES_RIGHT); + AddRTLStyle(hwDirList, 0); + AddRTLStyle(hwCheckBox, BS_RIGHT | BS_LEFTTEXT); } + GetClientRect(hwIcon, &temp_r); + if (!noicon) { SendMessage( @@ -211,48 +223,51 @@ BOOL CALLBACK dlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) IMAGE_ICON, (LPARAM)LoadIcon(GetModuleHandle(0), MAKEINTRESOURCE(103)) ); + + MoveWindow( + hwIcon, + rtl ? width - temp_r.right : 0, + 0, + temp_r.right, + temp_r.bottom, + FALSE + ); + + temp_r.right += 3; + } + else + { + ShowWindow(hwIcon, SW_HIDE); + + temp_r.right = 0; } - - GetClientRect(hwIcon, &temp_r); - - SetWindowPos( - hwIcon, - 0, - rtl ? width - temp_r.right : 0, - 0, - temp_r.right, - temp_r.bottom, - SWP_NOZORDER | SWP_NOACTIVATE | (noicon ? SWP_HIDEWINDOW : 0) - ); if (rtl) { ProgressiveSetWindowPos( hwText, 0, - width - (noicon ? 0 : temp_r.right + 5), - temp_r.bottom + 2 + width - temp_r.right, + 3 * baseUnitY //MulDiv(24, baseUnitY, 8); ); } else { ProgressiveSetWindowPos( hwText, - noicon ? 0 : temp_r.right + 5, - width - (noicon ? 0 : temp_r.right + 5), - temp_r.bottom + 2 + temp_r.right, + width - temp_r.right + 3, + 3 * baseUnitY //MulDiv(24, baseUnitY, 8); ); } SetWindowText(hwText, *text ? text : "Select the Start Menu folder in which you would like to create the program's shortcuts:"); - GetWindowRect(hwLocation, &temp_r); - ProgressiveSetWindowPos( hwLocation, 0, width, - temp_r.bottom - temp_r.top + MulDiv(12, baseUnitY, 8) ); if (*lastused == '>') @@ -265,26 +280,24 @@ BOOL CALLBACK dlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) SetWindowText(hwLocation, *lastused ? lastused : progname); - GetWindowRect(hwCheckBox, &temp_r); - ScreenToClient(hwndDlg, ((LPPOINT) &temp_r)); - ScreenToClient(hwndDlg, ((LPPOINT) &temp_r) + 1); + temp_r.bottom = MulDiv(8, baseUnitY, 8); ProgressiveSetWindowPos( hwDirList, 0, width, - height - y_offset - (*checkbox ? temp_r.bottom - temp_r.top + 5 : 0) - ); - - ProgressiveSetWindowPos( - hwCheckBox, - 0, - width, - temp_r.bottom - temp_r.top + height - y_offset - (*checkbox ? temp_r.bottom + 3 : 0) ); if (*checkbox) { + ProgressiveSetWindowPos( + hwCheckBox, + 0, + width, + temp_r.bottom + ); + ShowWindow(hwCheckBox, SW_SHOWNA); SetWindowText(hwCheckBox, checkbox); } diff --git a/Plugins/StartMenu.dll b/Plugins/StartMenu.dll index 0cd6c38e0ce29157dba0b7c9330f87ae4668d67d..eefb99783daeb423432670b76e1ee61afa9f94f6 100644 GIT binary patch delta 2610 zcmc&$YitzP6~40%V}oJW#7o_HQ`Ygcb+8>Rp4pvo<0Up;mJqGe!DhWlW6Z-|7*7^& z1ha-V&|PWm6f-!*43W}D5~od3Q?(KW6j>=%mPeb?rUFIACVfy8p=y!c)>0*mDw^qc zXRuB4vwu3)xA&ayo^$TG=bn4zET83%H8EF5L#>&zpTFmcU7d(5;#wpFee(KnqzfbS z&s&i#7>`eWWR5?Xy=so_eLXVuA)ooA4TMA)Cpo)s;>r1`n`A}RGNy=-rC@v(`=ttu zZlW(?HZ4EJ60#BMIOclwt;}j$n9<*|aSrI?qg9pqRi>C}(m!Ut%*^SGZ9jA2%-3z- zVn+SN#~nNq)dLPcQ>X88yuX_F5w}9**_Fg?q>Gh=5oiuT^mKvO9(hdfE2G^FCg4K#ThZ)1; z)gLW-f!U(JQdAw4=;W`vw_b3Q4y}tV?$iR$f{H7%9meFcFk7yLUV|=CeM*@Dnf=f& zQDJIZ_wyHXGct91F$TY=ez|DPQ(kS5%@RWD-3%eF!7t+XDfLkOuoK$QM-D=`JCWQu zb`T~9h66O$v`e1#6L;ZvpBl#PQ?Q747@iY)V98e=KZd0{3x_Zv--5~XNd%{!yFxSe zbl3TUdsm1-*a)1o&{6%nOKLKHxX5E6{M>{`r!gfNQ=Nv&mK&bKn7Tb@hx-#BxQ6}? zfkqh0yM{i2Y_19mZB`2nVti)qM&+Hk8=bLv|Eb%*fSDFJib;jwZ>=+(o z4^5P$nqU=Y^~YES@sxG$QYg%5ktO>RFOs2%qmKm=|yHCT{@vK zu%p=zhgq){W_^nPhgsC`K5I-a7$|;lM`^_W;#AhRNMs1CRMxx5SOoi7qQ;oag?whK zHYhf@R1}zh8-^)*3wQ28Bw*_b(-38!4XdiGSokxv+$A5%;**dKZ3e@W#5TBmqtm;V zWZdbPvK#lK0vraJ4hkdhMISC?{}x@>4DZ*j)J9pFv48G*WnLlG=V{mzW>{LtT$rt~ zbNT7=#npPv)ljXPk?0;GZMH%*I%!ZfGs(ziH?A zVRR?8sIdAH?Nl67N)1mrO?V`{#~zo=3|Y(jf!S;*i;h``#qA?u#*V|JRY-5bF8^k4 zF}G=zWjjL2)K=bZz9#e`XqHUI@KD8Ez-xGDyPGmD$)Mi2?2!z;Ds;(WE1@IHo6U-0 z)BarEe&^%L%UV4xPxWuKi?!!#t@cNcTTN)jsxz)-L)49^YtXKBCh3o(duuur5;v|X z#kdo+m@>73Y%cn_LN_68M6ng(*wu5-!Od!8c{y(R{Eb6m7HdU7i&|I2LpvJBehS03 z?yX$@`P?O0Z!fLJJ3LTY{{a)=!q!d;Q=>hR)%Uk?>~LK-2E#3`2bh zS6%-{Y2QPv<#Ze=`XFxWzI+kS{H2VaC1gE7zkgK`QuHVx<-iw!8R+XUJ`H>gxCy-h z;{-Tz5P|IK`Yb7G*+<2v*|0XG3$ zP%?X_ZDlocy4>Ml!n(8KQ07v@M8my?7}v%1a|gI@axZhQa3{ETxU<|O_eXAyGdKrd z!avM6@nL=kzlT4>kMQ5&f5e~S-{sHoAMg{r!IuTr1l9-M3CsrW2JFG5L0>Qu+!{;= zza4xv_`To{fJl+#Yyom;-}*08y{=r8*xR?{Rg5R B4Rini delta 2450 zcmc&$e{37o9e?M#Q@ePL+d9or0!}8w-T5xmE(vv;pc%OQa?+n z(tr4ui$3?>_w)VnzVCbA_nfSl701HdrF>*dV_qw{I(v6=@-_x07a+%rq{)vlzEIme z`7ex>?q9wc5`U(o6^$_YcTPO#_!W1oSmatvsW`|L zn|;L}t|xxt(n#`DC2`Sosg|HpqlBp^3f@@TXhxk)t}y08K~>eGTd%6rqnfWetJl8_ za-@*H%jU))Pea$XWWol%&$rwe9Ub``B=S+Bc$T+dc0foL-nIhNFxf~!p&{DVO~8r zDzO#Q70HDlam_m^rPqE8byqv}95GWX9tj-A8u9tbuPIGlg~|0lBCOgMxlxqfb$Z^_ z7vT`_-C{zFNYD;yZSwtxdrAF}g5S7NaqNW!|v8SU^UR0^n)4+Mm(BpfNsH$9WW7_vsmbElm*QLmcQ#y+*xNA+k7XT$wrtO*FiVZ)mLhzIMqo; zb=oD=?w#+zht?ePPhi---P%zsS&jq0e8{y@E8{sFC;I?fM-ip!K**=}>=p_;b7#aU zmw8`VHCJagmsM8;p}|$UI*uEddPMU;S-sB-?&!!V+*~TIQy!A>MUGPa=eStRLfOD7 zzwLCai+X&RKD}r9FZc;~H8WOC$m_tH!27@yZ~?dqECBxp$~GW-JS99K^EJ=|?AZ_g zm%wYlao`lN7q|j^27CeB1=}^iMnC~tfE|Da9I7EZ$;+6$4jczmID~;Z;5@*d1-~^| zuXT)rT!*BVpEK|agY$idb0g6@f4+M4552vr@7bRD_lj*N*17KCGM$e0guX4+n|_{< zyrVstI?y#Rv^RAC6(d`ciQawD!T!h6x}F+B-;m~nzGZMAF{HO8dUf&v7fbzY@8i9x zp(ZlKL1(+hQbYYsguKWi+l-n*^q`}?cYh)=)RD475TbL<=36Vv&A+YeH+NUIKY)KB z9%ZF%LkT&I%V>cd15^MlPkK&VuB_qAamU!Z?&4xDY&yNa$eeq)O4uNX!e${V#DorE zhmaBu3BMKI5dI`g31@}#!exO9D@0xlicMm(_=MOkCd4suLVQo07OSLMDI|R;O-mQ0 z%hHz;l~#uuLr;Ygp|Q~KLKC64Lw^o^8Y+@Y<#KtIyhirRb+RIFmZS1d<+z-X^-Xe4 zJ|cf4Uzb0Zzm}cKMnzFJD_fNvN?I9K4l8-(H_9KBf^uG&Q9e=rr#Kt#X{c{#Y3Od~ JZNOnT^9_P^4LSe-