Module: wine
Branch: master
Commit: feb0b73a3c7281dee923cdcfb5ebf4ae954cdc7b
URL: https://source.winehq.org/git/wine.git/?a=commit;h=feb0b73a3c7281dee923cdcf…
Author: Zhiyi Zhang <zzhang(a)codeweavers.com>
Date: Thu Dec 9 16:13:13 2021 +0800
comctl32/button: Support image list margin for buttons with BS_CENTER or BS_VCENTER.
WinSCP uses image list margin to adjust image position on a button when theming is on.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52076
Signed-off-by: Zhiyi Zhang <zzhang(a)codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard(a)winehq.org>
---
dlls/comctl32/button.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/dlls/comctl32/button.c b/dlls/comctl32/button.c
index 063149e91a4..72c1a17402c 100644
--- a/dlls/comctl32/button.c
+++ b/dlls/comctl32/button.c
@@ -1156,7 +1156,10 @@ static void BUTTON_PositionRect(LONG style, const RECT *outerRect, RECT *innerRe
switch (style & BS_CENTER)
{
case BS_CENTER:
- innerRect->left = outerRect->left + (outerRect->right - outerRect->left - width) / 2;
+ /* The left and right margins are added to the inner rectangle to get a new rectangle. Then
+ * the new rectangle is adjusted to be in the horizontal center */
+ innerRect->left = outerRect->left + (outerRect->right - outerRect->left - width
+ + margin->left - margin->right) / 2;
innerRect->right = innerRect->left + width;
break;
case BS_RIGHT:
@@ -1182,7 +1185,10 @@ static void BUTTON_PositionRect(LONG style, const RECT *outerRect, RECT *innerRe
break;
case BS_VCENTER:
default:
- innerRect->top = outerRect->top + (outerRect->bottom - outerRect->top - height) / 2;
+ /* The top and bottom margins are added to the inner rectangle to get a new rectangle. Then
+ * the new rectangle is adjusted to be in the vertical center */
+ innerRect->top = outerRect->top + (outerRect->bottom - outerRect->top - height
+ + margin->top - margin->bottom) / 2;
innerRect->bottom = innerRect->top + height;
break;
}