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 feb0b73a3c)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
This commit is contained in:
Zhiyi Zhang 2021-12-09 16:13:13 +08:00 committed by Michael Stefaniuc
parent c133264b69
commit d0b9ab2b91
1 changed files with 8 additions and 2 deletions

View File

@ -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;
}