From 3b5c37cfb0ece04481e68af51d117a3978ba833e Mon Sep 17 00:00:00 2001 From: Mikhail Filippov Date: Thu, 2 Apr 2026 00:39:40 +0300 Subject: [PATCH] w32: Modernize dialog for Windows Vista and later. * w32/app.manifest: New. Declare Common Controls v6 dependency for visual styles and PerMonitorV2 DPI awareness. * w32/pinentry-w32.rc: Embed app.manifest. Switch from DIALOG to DIALOGEX with DS_SHELLFONT and Segoe UI 9pt. Reflow controls per Microsoft UX guidelines; tighten IDC_PINENT_TEXT to 12 DLU so the themed edit text sits at the optical centre and align IDC_PINENT_PROMPT to that baseline. Size IDC_PINENT_DESC to 56 DLU, the smallest height that fits the seven-line CHV1 prompt with "Remaining attempts: N" without truncation; the standard five-line CHV1 prompt fits with a small bottom padding. * w32/main.c (set_bitmap): Use the smaller of width/height from MapDialogRect so the icon stays square. Select the closest bitmap that is at least as large as the target size to prefer downscaling over upscaling. * w32/gnupg-logo.svg: New. Vector source for the GnuPG logo, traced from the original artwork in Inkscape. * w32/logo-32.bmp, w32/logo-48.bmp, w32/logo-64.bmp, w32/logo-96.bmp, w32/logo-128.bmp: Regenerate as 4-bit BMPs with full 16-entry palettes using standard gray (192,192,192) background. * w32/Makefile.am (EXTRA_DIST): Add app.manifest and gnupg-logo.svg. (pinentry-w32.o): Depend on app.manifest. -- The previous BMPs had truncated palettes (biClrUsed=4 with only 4 palette entries) which caused LR_LOADTRANSPARENT to silently fail on Windows 10 and later. The new BMPs use standard gray (192,192,192) as background which LR_LOADMAP3DCOLORS correctly maps to the current COLOR_3DFACE. Signed-off-by: Mikhail Filippov --- w32/Makefile.am | 4 ++-- w32/app.manifest | 27 +++++++++++++++++++++++++++ w32/gnupg-logo.svg | 6 ++++++ w32/logo-128.bmp | Bin 8262 -> 8310 bytes w32/logo-32.bmp | Bin 582 -> 630 bytes w32/logo-48.bmp | Bin 1222 -> 1270 bytes w32/logo-64.bmp | Bin 4738 -> 2166 bytes w32/logo-96.bmp | Bin 4678 -> 4726 bytes w32/main.c | 37 +++++++++++++++++++++++-------------- w32/pinentry-w32.rc | 23 +++++++++++++---------- 10 files changed, 71 insertions(+), 26 deletions(-) create mode 100644 w32/app.manifest create mode 100644 w32/gnupg-logo.svg diff --git a/w32/Makefile.am b/w32/Makefile.am index 12c66db..b8913b5 100644 --- a/w32/Makefile.am +++ b/w32/Makefile.am @@ -21,7 +21,7 @@ logos = logo-32.bmp logo-48.bmp logo-64.bmp logo-96.bmp logo-128.bmp -EXTRA_DIST = $(logos) +EXTRA_DIST = $(logos) app.manifest gnupg-logo.svg bin_PROGRAMS = pinentry-w32 @@ -37,6 +37,6 @@ pinentry_w32_LDADD = pinentry-w32.o \ ../pinentry/libpinentry.a ../secmem/libsecmem.a \ $(COMMON_LIBS) -pinentry-w32.o: pinentry-w32.rc resource.h $(logos) +pinentry-w32.o: pinentry-w32.rc resource.h $(logos) app.manifest $(WINDRES) -I.. -v -o $@ $< diff --git a/w32/app.manifest b/w32/app.manifest new file mode 100644 index 0000000..1df9c45 --- /dev/null +++ b/w32/app.manifest @@ -0,0 +1,27 @@ + + + + + + + + + + + + + PerMonitorV2,PerMonitor + true + + + diff --git a/w32/gnupg-logo.svg b/w32/gnupg-logo.svg new file mode 100644 index 0000000..32a905e --- /dev/null +++ b/w32/gnupg-logo.svg @@ -0,0 +1,6 @@ + + + + diff --git a/w32/logo-128.bmp b/w32/logo-128.bmp index 883475b3f4654c63807961cc00641b4ab120723d..b6ce2000634440202b380d883d632b3b957c7614 100644 GIT binary patch literal 8310 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 diff --git a/w32/logo-32.bmp b/w32/logo-32.bmp index 38d60183cab4c7c44a6ce2eb33481e876cffa794..2ec7837efd61313ef6da15433b57816615aeb639 100644 GIT binary patch literal 630 zcmXw1T}V@57=F%~X9e9XN5bw_4H9p`!w3@>EGYW1!HjTG5s|XUz(r+7-efak z4pzx1M{5xMtoCzS(JY-i5~QO%o-VcRoOgF2MI*lBeBix!p67eN=ly;<4hDGW2mojW zU~LqKrgeh{%v;vW1n8B|=aGM(#fRJ*e9R563ukT^z#SP3ozW^!j#n)IDzCCJ3 zIby?)2hEVj1uTaEIn>zpSfXAl4zoB0{;Whqq&{f~U2;}of)>;57EznJJ;5Zk7XWvj zs8)=R_$RW;XA@v#&Dyg3)Umrq^#R>_YdZWaW!+4#z(q?;sL4~8PZ^b8RzVrj)Be?G z4mC-d&rREd^}rJG^f@*O@DkR;N|KuF1u8+|{ZO)oBHA>NEQIB#}bD zfxV2=MGTQ9(&7fc3oliZw6MV+!%dYSEpV{w>&M`vvYQqK>n5FFgPlHEXvOF=i0nQ+ zaMG9{Rm>rD*NMs|xK$4qRXtbQ45OvlUSMd|1Sd^eV&M080DST#Ac$+tkxTlSj7uH> zJ=*nMnE}Vvou-ooCJW+s*MV$0Jlv9DHqb7m9JapGw$aA(a>q-vfg}FNefDPj=Xn;DX10o6_B|`|I+4U0vD_Qc4_cJ@b zf4F3LTmakwsPiP;#6t#NZ{vv3d4B>vULNuJ_KfeJFHkY|b={g@9Y*z)m=IUOaO|Fu zJi7x(>#-ZKh_I+G9H#DPq#l-eqL31)XnPsRB(_Op4dOuYjAY0JT1T5DTP?sM%otx* zL#}fJO>Gs~XZjL`)YS&$a7Ic3OY*vjNTw}>mFGDBVG9}aT|!dTl96B7k^4WK$8@Z* zV;M-JarT#ZfGR}Hksob$S4h?@zm~JOUQ&J$i56cmeAkXL;w!5AO_OVB-A4R}fY;9| O5jc2wvl+XkEv~=21V9r2 diff --git a/w32/logo-48.bmp b/w32/logo-48.bmp index 53c627433ac98952d232a0f442c4c7a4484f919d..1c7611cacde804d8e40ab1fcefe3af4de014c720 100644 GIT binary patch literal 1270 zcmYjQT}%{L7(Fw)KoeiKk~H|XDp>0i#2;#XSw&ErHbLSaaUWK}5L+#_6pR{$M5{t0 zX~im$xG}XDEE{av(7?L8u89;`VMvpP-(h$Zc4yAM>4S+eckay6o80W|Ip6)h^Zo7m z^0gQCX#ubiK&f*TNTSUP6t0rj2iP~6Od|O-j$~pO&tiY#`EW1(8SKK?AFUXVe1plp zTKxOlKKysT9Me4|n7iYHek%_PU4Y&t;{i~rIwnYcxL){OIcja3_L;ve#JETO%8)Q= zJ@mUMuy1j}#cB2C@C{mas6DpmQ08|I;kiMYeJ2_^V$$1;6Jq;2VW~&2ojBYfUS*|B zPuTT6f4gkUq4vnTW&6QK+nm%FXblCRlxW$TBEo6MJk{MEF<1RsK=s?3UG?F)gAbTI@2+q~5MUb3=8s<-*YLYNxi=5k!9c0>{r?E{r zDkYhHXMfaYO4pE9^#{y`;JF|PYpniAe6WCI+YVaQfcN~QbT!|!t^c4w{uQJd0H9X& zOxVoZrjj2ta;lXXSthmeTtw9E?eX;keIw%K#I>@OPiLD_Tn zQL|`KzL6HK4blpE?p+p3`Jufjn>ZqV3k(io``mtKdw|oHXq4zfCg8a-R^t%f#I$Vq z$Kt_;r>W*Lps)g;Th8Jsr{TJ7Zt!YohuwMS&Kc4#j|1f}(bNv%~>W(WG?*XB| BS7!hK literal 1222 zcmZuxyK!4F5L`Se)eP>v2JnEyp@8eafitJB$3?gV*Ps&If*mdeNfS-^35aId#4S0F}g4bW)@#pUwd|KPh)-r!h zYkQ}-^R(DuAe>XK@U0`k?3yuadj&$yW~0_N9KDL=oOih<#gGDuQP$EEj>^F5RNNWr zC>zX74s?bzrQ4cwT-~D*8p3oSWZw(x7K&VM2nq{q?g^L4fCy?y`i!_76l7l1raP04 z`PjN+V|wYT+MGei8N#c`-TMd_SsAlE4cuGar7M&iflI<^m6@S|4J>Ee-5JY%ctELeZ>7s4GT1%mk zq}(rMO|6BNtBKS?Q@3bZxiruR(-JQ3qlLZ9zG+0i&X>%wtG+xEk4mG&7gx5H1Lv#=6ZiJTlhaVNWj`pH#OR?+9Z z=>&TXeZ&rq7|R9oommBa9kFZrYHwOI15-c1ygLfNZE^et$v#PZIM zukdGUIy(`amDIXn-N$l?rLd6si6SDO-mFSeh2CV#xt7q2{HUR9EqeQ`WuDj1eO&!k@1pRWuZC7ggAxVgCz~V6#Pf#SpyU^)|KmBK80LN4B^=K7 z^(=^u6yZ4tKXhRl|bHf%UUk0Gm%Y+=^!)Vtf-XSy~4IM-D z7yDs_zJP6or|8Azg(s_B>b#^A$^F4$--D$^&Qtrr@?+Z3enL9{Ic%R3Y5wEv&49&C zOX^2TnCJ|w?pf1`4cNS)Gb(R&6D`Fe%{!Xo{?JtE9-g#Uok;QituF`mc`4WqBwwPf>y0N*Hg!6zUkAU`d~qp0Ao7)P`h0u* z)42zS!ZYR@EWV#;E*G%pyLuW+9Z2?U${}wcd7NnODC-&rD6jSN3Azp0<3uZ8?PUvl y!KnYNl)wZfdxUS^#`1DkuXm;9X^#^sbo>5LcPTfsj{gALKmKk2 literal 4738 zcmai1`Eygp9sknK+sfM!6FF9c-8XI}j`#5rZ{Pwh8R08E^aCKC`RKN z*Orl)AWJOK+l??u1GxhvoJ}AJO$avy0)cQ__hAU_Z~Z4a@9jGzB$CgJX7u)bKi_-5 zyYI*~~_tZk_g9VWOa3N&({t{;P zErPrIe+BWq&5+pF0?GYuNF7)T>4Q%}^uX^SbLh8_{pT`>AABAXhnBNoA0$r%VEV+%kUBj9 zsgps7oD4zw%qEDQq7XY9g!pL&i8HT2@@yDV=e9xQ+-s2j_Y}m=?|{sO?GV4P6XNIJ zgT%!*AaUV+NM3pqQWtkY6YA%6QD z#BW}P#I3I(apyeTx%CaCZeM}q^aY6Az6Q}d*C9521LBdJkci%bJJD&Fjzu6DzYWvT z6hz`th{Vzmjb|X1$U-7H1JkMdkWAf!Ncukz&HNW)>Hh&K4$9cNr(N?ZMX_>T{n9?l zXmPn>keGjPY2}XujFAG21wmZWznMzKqzl0OPBT)e1~4)&7-I#(1)%GlLIIfr3pE4Z z<3ni6<0ivq5&V2psKBHSiMAt*MA4*&UI2_*x9IW@B2cNwFM8?k&(xY9szVGG&m&u3 z&I8ASs&4yg*A3hWoxQU*b$JO9#h}9>YeBY7HyxB4{BHV;}Y>`+0H>piPda1@p*t3PRK5A)%f$3d9Xn-YYGxV{jOO#R0Sq; zxme#Z=&r&7M!2Mj5kenTg@jRwkWi}qfArz+kKQgFbob$Ko@65T8?=n$}FjI?NPtUe+Q@o1c!Ply!u)XIi586DWPY+`D_ zj?81mUg;y$#U-0GzTD>i(YCp>3pPH&)@DXV>`33~_%}={R}A2GgD-=!uy= zt9H6tTHF87>ruLubysP@%MjJ_%R9Ku;8*Edb0CZ@fH?wSEX8i*BBfqI_gmB?fgq zcB=h@5V9HkU~#^v&V0Rn5O%Bmix6@c`~crn55nT-ZOQZ|5LR#0XI_KRvjMHY@=-Rf z^7W+8l8jIrbNI#WqcJW**J>>!Zqw!mLQfDv)DjfWKf)ubiJ;nEcnQko`%tMJ+3sL1*eT2|usx7&?zPWr4u z(qpM+m7msYPb3Ww|b3)M{++Hu(*A!!XX^dMEMJ8>afKEq^E6bHVL?FUjup(HlTpR7 zWm-6dP^aQQUMQQc#-i~i7zj-G1DZk=%K2HIqmcO2U9?7Cv}4PF8iR~nIR#r~VY5GX zUE0JmXx&N(nG_Lj;iARB??1iyuR^Ppn6NlWh!m{DxT51BpG?v!j1ca~aZmy6=hd>y zMUjh-%R1C+ZyuyT2|{Q^-kJisn&)uNM2HYJ+Atdn)|yriKglR%jCS=02^p79!OjP* z%Lr}aNi+?~nF;xwCi&`&?TssX2maLFRAuo{BKc*Rb==~EkbDbx!!!{2vd#S6jTJ}` zX3hE`%>G$ZFAb4!XBieA_iBAt0Qx)Li6yI)n=T14=Iih79++e-M2O_85s>N0V!mr& zUYBzF!eX#bODjy}{l2is^XRdxri?jH9CLkfca@vaI1n<|IC%Q%Nb zhnGGkJAtvuQc+d6Xi;rdg~cQYr7gqMXzcF-Wq+*~t^5Oqf5n)~oqbc^<9RMZbj$cq U?{iCBPN!?hvuixwEe|vOe>r-K?f?J) diff --git a/w32/logo-96.bmp b/w32/logo-96.bmp index f0496c88fadd1a4c71d0a354b4d5643043491c83..522f27a47c32415654a337002d385fc026da4225 100644 GIT binary patch literal 4726 zcmai2S!`5g6h3!46cZn;)4K3BU_tbWrKKn@l%*(O!VW4XDAblMLBIh76%nW)U;r&x z3J*nbp(2Uwt$?O%Eff<&S-QN^cJ4j%1`!G|XZi2kWq>c4q}={&Q_<~00u`UL!4e;680?uYY7cR=IeHE`u%8T@l# z3jA9$60YqV0@thh!L7SOw*Kt{@`zoZ2{*PI)}?%WFG`O>mla zje0!WDyeqagjD15_+um@v#v7D1G{q2BLyN0e98sRu}2AHq$4`VGMi+*nL#_j`7vXd ziki{kK!#v{nZbqVUPR}omFZ}DaBp%*z*?5hdg{1Nfblw*s`k2 z#+T$IuYgy*z_~Op4iFn#X52sG;b#TZGkPkEi4rTAv8fgjlO7LVQ>A{SE>01h)&R0< zzk7i7ji1=wuK&LEfpD@;BVwnUgKXoJ;!*DnQtSNVY$WNkz2-YS#;S~tY4!bBY4DSpw#5$e^9*!gmEfGThf41!o3 zAe+y3Xdpr#M7(Xin~{&sadt8)>S~BT8xik7G_yt8?VK>g763LMuK^4QSk$OZ<9wF` zU{S)59pIxHAT%CYH%>3(L254pkc6Q<37|I#{s91y)qWS86H{U(o12ll{XKd21;Fd{ z7dw)-#V>%ZAID=eYZ1@qn36dHBDt1JpyNhd5{6wl9H|s10s!(>1twhTL@`9>UtK2&!{kWHE;?>AM@lvaBrX<1L3=!8-HDJ;=;v_&0CKp)5F4m^uv2*+SOt<@0+oa&tc5%6wuhKTuIszKOgaqlE}wHJP4XdDvRN*` zdy}QZu#5e;X8C9y#Ku)~ur3T2U%Gh`-r8NElPQe+Pbl=MpC!ggjVo6uA#3Q6e$V=( zVLfPTI<>pv!|7v&P zt%xS|Qqg8|D4e#-bySMhBJ;$BRy0owA6QX%1RB1^ISn>6Jz~`!w*x|a2?Uo7LH%_* zfa}i-8U<#6BBs=Hw*x|a8M53a6i>~UZ90G_w-+?i0D7q%w%&|x$AtJ&yE+iDTl>cC zm=IrjBcgh{v~Rl1N)+OYCLN%7oBM?Z3!AAoj~8mG>TOYdZbydnYvi;a8#I1TV z7v*f1ABw-~*XL_>(7Ak`M_wpj>cp9&HoWZ>g>#Whe} zIS}QcYZBu^Gbw#{Tdqf*h*{rq3O;w4f=JqSW(oM_Y+zS`DI%WgW6<8_WRmah-WC5u$~CJl-&a z%Lj7TtgE`h$+C4CGk$DQQE4m)*)&BRI&VDM>s=?)7=dV;9mc&sC|l9Jm|PYTpp~}8 z`}76sLYwyEqGr6G4x=KwBV8B_YYl~zzRIkH53y(CV8aBU%XK#5b^l88JbOUF%vyu! zoS3H)v69I^70YLPAp7u5DrjC4+fF7*$Bda?R&^lG?@S(DM1LoXj*(M&t9hohU%uR) zI$q41Z!-MB$sdq57g%n&Ze(qhg8{O(q9dcjhX{Y5Cg;*atFXMPuI|(>`ed`-d6?nz z6ab>U-riyXuwp}p(kcMf8_njUCy4&PkqfQ9=tpKXn4P}`P#aIwkQ1u3Rorl9Y}DR XIG|5Lq_Aw$!TP3CyAxCWHOBZKV2aY6 literal 4678 zcmbtYJFXK!5S+0|kvzK>uy+$eznvQpyo@^#aU-t4EjR}v;Q*wB2!Xn*y63aA&mc;& z^z5zfuKvtt-`jW3Q&2pI5Z;6k-t!Z~D?FG&`0^Sb`9(h8K8Eo9^M~-`>!Qo`RRGl9k!;17Q{`7Za3+zK zyrI!lp}%{R2iZz_HW@&8)%;vgCx;O6w*Z#%J!4~Zkb-U(-9g}yf<(@7L9e3duC6FZ zjF-+gAt7$gXNAP~I?f?b11f?9w77>Yg8>_=f>c``6%~*yYrZIvNS&gzaQ*At!Bi6v z`NF43Hj&J*$c`5T>08eOew4+jf)k(B`3Tpmo$G1W_ zm@oXFeE?+JR8Ka!2J+DtnKC@!!R+xI>=*bV8J(DOzN-H|0WLh%qp=`BPA1H>Ej@x; zvGO$*B1t9)-Axe61HL+hfK$#JQ!~#B%7=FqgD|4MGgaq_NO{*!L`a(fR;*t%g~^6&!Lv; zi?lkj;@-Kh14t-)PcU5eK6Hq*`f@-=ul)^IJnxmEln5t!oaA=CTqM*mCk+5MuvG~C zZf^}ObRBXYcxlji+jhwU@M@`+`5CGapb2JR7}Ul96|KQ#EFQqhEUQEpj*s{NmM6-u j_sTY059CncWqP@=0hP2vl>eYS{O^fjTW+aYz6E~(bsg57 diff --git a/w32/main.c b/w32/main.c index b6243f5..f821fb5 100644 --- a/w32/main.c +++ b/w32/main.c @@ -270,20 +270,29 @@ set_bitmap (HWND dlg, int item) } /* fprintf (stderr, "MapDialogRect: %d/%d\n", rect.right, rect.bottom); */ - switch (rect.right) - { - case 32: resid = IDB_ICON_32; break; - case 48: resid = IDB_ICON_48; break; - case 64: resid = IDB_ICON_64; break; - case 96: resid = IDB_ICON_96; break; - default: resid = IDB_ICON_128;break; - } - - bitmap = LoadImage (GetModuleHandle (NULL), - MAKEINTRESOURCE (resid), - IMAGE_BITMAP, - rect.right, rect.bottom, - (LR_SHARED | LR_LOADTRANSPARENT | LR_LOADMAP3DCOLORS)); + /* Use the smaller dimension so the icon stays square and fits + the control without clipping. Pick the closest bitmap that is + at least as large as the target to avoid upscaling. */ + { + long sz = rect.right < rect.bottom ? rect.right : rect.bottom; + + if (sz <= 32) + resid = IDB_ICON_32; + else if (sz <= 48) + resid = IDB_ICON_48; + else if (sz <= 64) + resid = IDB_ICON_64; + else if (sz <= 96) + resid = IDB_ICON_96; + else + resid = IDB_ICON_128; + + bitmap = LoadImage (GetModuleHandle (NULL), + MAKEINTRESOURCE (resid), + IMAGE_BITMAP, + sz, sz, + (LR_SHARED | LR_LOADTRANSPARENT | LR_LOADMAP3DCOLORS)); + } if (!bitmap) { fprintf (stderr, "LoadImage failed: %s\n", w32_strerror (-1)); diff --git a/w32/pinentry-w32.rc b/w32/pinentry-w32.rc index a54bf3a..91e9977 100755 --- a/w32/pinentry-w32.rc +++ b/w32/pinentry-w32.rc @@ -21,6 +21,8 @@ #include #include "resource.h" +CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "app.manifest" + /* * Main dialog */ @@ -31,18 +33,19 @@ IDB_ICON_64 BITMAP DISCARDABLE "logo-64.bmp" IDB_ICON_96 BITMAP DISCARDABLE "logo-96.bmp" IDB_ICON_128 BITMAP DISCARDABLE "logo-128.bmp" -IDD_PINENT DIALOG DISCARDABLE 0, 0, 230, 125 -STYLE DS_MODALFRAME | DS_SYSMODAL | WS_POPUP | WS_CAPTION | WS_SYSMENU +IDD_PINENT DIALOGEX 0, 0, 260, 129 +STYLE DS_SETFONT | DS_SHELLFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_DLGMODALFRAME CAPTION "Pinentry" -FONT 10, "MS Sans Serif" +FONT 9, "Segoe UI" BEGIN CONTROL "", IDC_PINENT_ICON, "Static", SS_BITMAP|SS_CENTERIMAGE, - 5, 5, 32, 32 - LTEXT "", IDC_PINENT_DESC, 45, 5, 180, 65 - RTEXT "", IDC_PINENT_PROMPT, 5, 75, 60, 12 - EDITTEXT IDC_PINENT_TEXT, 70, 75, 155, 12, ES_PASSWORD | ES_AUTOHSCROLL - CTEXT "", IDC_PINENT_ERR, 5, 90, 220, 12 - DEFPUSHBUTTON "O&K", IDOK, 50, 105, 85, 14 - PUSHBUTTON "&Cancel", IDCANCEL, 140, 105, 85, 14 + 7, 7, 32, 32 + LTEXT "", IDC_PINENT_DESC, 46, 7, 207, 56 + RTEXT "", IDC_PINENT_PROMPT, 7, 72, 55, 8 + EDITTEXT IDC_PINENT_TEXT, 65, 70, 188, 12, ES_PASSWORD | ES_AUTOHSCROLL + CTEXT "", IDC_PINENT_ERR, 7, 91, 246, 10 + DEFPUSHBUTTON "O&K", IDOK, 96, 108, 75, 14 + PUSHBUTTON "&Cancel", IDCANCEL, 178, 108, 75, 14 END -- 2.54.0