[PATCH 1/5] comctl32/button: Correctly place parts for buttons with WS_EX_RIGHT.
Zhiyi Zhang
zzhang at codeweavers.com
Fri Nov 5 01:34:30 CDT 2021
WS_EX_RIGHT has the same effect as BS_RIGHT.
Signed-off-by: Zhiyi Zhang <zzhang at codeweavers.com>
---
dlls/comctl32/button.c | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/dlls/comctl32/button.c b/dlls/comctl32/button.c
index 6a463cb3460..70ac6b1c2da 100644
--- a/dlls/comctl32/button.c
+++ b/dlls/comctl32/button.c
@@ -1547,17 +1547,15 @@ static BOOL CL_GetIdealSize(BUTTON_INFO *infoPtr, SIZE *size)
*/
static UINT BUTTON_CalcLayoutRects(const BUTTON_INFO *infoPtr, HDC hdc, RECT *labelRc, RECT *imageRc, RECT *textRc)
{
- LONG style = GetWindowLongW( infoPtr->hwnd, GWL_STYLE );
- LONG ex_style = GetWindowLongW( infoPtr->hwnd, GWL_EXSTYLE );
- LONG split_style = infoPtr->imagelist.himl ? BUTTON_ILStoBS(infoPtr->imagelist.uAlign) : style;
WCHAR *text = get_button_text(infoPtr);
SIZE imageSize = BUTTON_GetImageSize(infoPtr);
- UINT dtStyle = BUTTON_BStoDT(style, ex_style);
RECT labelRect, imageRect, imageRectWithMargin, textRect;
LONG imageMarginWidth, imageMarginHeight;
const RECT *textMargin = BUTTON_GetTextMargin(infoPtr);
+ LONG style, ex_style, split_style;
RECT emptyMargin = {0};
LONG maxTextWidth;
+ UINT dtStyle;
/* Calculate label rectangle according to label type */
if ((imageSize.cx == 0 && imageSize.cy == 0) && (text == NULL || text[0] == '\0'))
@@ -1569,6 +1567,14 @@ static UINT BUTTON_CalcLayoutRects(const BUTTON_INFO *infoPtr, HDC hdc, RECT *la
return (UINT)-1;
}
+ style = GetWindowLongW(infoPtr->hwnd, GWL_STYLE);
+ ex_style = GetWindowLongW(infoPtr->hwnd, GWL_EXSTYLE);
+ /* Add BS_RIGHT directly. When both WS_EX_RIGHT and BS_LEFT are present, it becomes BS_CENTER */
+ if (ex_style & WS_EX_RIGHT)
+ style |= BS_RIGHT;
+ split_style = infoPtr->imagelist.himl ? BUTTON_ILStoBS(infoPtr->imagelist.uAlign) : style;
+ dtStyle = BUTTON_BStoDT(style, ex_style);
+
SetRect(&imageRect, 0, 0, imageSize.cx, imageSize.cy);
imageRectWithMargin = imageRect;
if (infoPtr->imagelist.himl)
--
2.32.0
More information about the wine-devel
mailing list