Module: wine Branch: oldstable Commit: d0b9ab2b91bc202df03691efa479fd8100b18914 URL: https://source.winehq.org/git/wine.git/?a=commit;h=d0b9ab2b91bc202df03691efa...
Author: Zhiyi Zhang zzhang@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@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org (cherry picked from commit feb0b73a3c7281dee923cdcfb5ebf4ae954cdc7b) Signed-off-by: Michael Stefaniuc mstefani@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 67bf5ceae48..5e16fdb0e08 100644 --- a/dlls/comctl32/button.c +++ b/dlls/comctl32/button.c @@ -1125,7 +1125,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: @@ -1151,7 +1154,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; }