]> git.saurik.com Git - wxWidgets.git/commitdiff
fixed drawing of owner drawn buttons with multiline labels
authorVadim Zeitlin <vadim@wxwidgets.org>
Sun, 22 May 2005 22:53:11 +0000 (22:53 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sun, 22 May 2005 22:53:11 +0000 (22:53 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@34276 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/msw/button.cpp

index b9ac7363752d50a993e083be98e8056f419bec10..2f56bb4e517e2843a91cdedb01c56702c19a6f9c 100644 (file)
@@ -497,8 +497,31 @@ static void DrawButtonText(HDC hdc,
     COLORREF colOld = SetTextColor(hdc, col);
     int modeOld = SetBkMode(hdc, TRANSPARENT);
 
     COLORREF colOld = SetTextColor(hdc, col);
     int modeOld = SetBkMode(hdc, TRANSPARENT);
 
-    // Note: we must have DT_SINGLELINE for DT_VCENTER to work.
-    ::DrawText(hdc, text, text.length(), pRect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
+    if ( text.find(_T('\n')) != wxString::npos )
+    {
+        // draw multiline label
+
+        // first we need to compute its bounding rect
+        RECT rc;
+        ::CopyRect(&rc, pRect);
+        ::DrawText(hdc, text, text.length(), &rc, DT_CENTER | DT_CALCRECT);
+
+        // now center this rect inside the entire button area
+        const LONG w = rc.right - rc.left;
+        const LONG h = rc.bottom - rc.top;
+        rc.left = (pRect->right - pRect->left)/2 - w/2;
+        rc.right = rc.left+w;
+        rc.top = (pRect->bottom - pRect->top)/2 - h/2;
+        rc.bottom = rc.top+h;
+
+        ::DrawText(hdc, text, text.length(), &rc, DT_CENTER);
+    }
+    else // single line label
+    {
+        // Note: we must have DT_SINGLELINE for DT_VCENTER to work.
+        ::DrawText(hdc, text, text.length(), pRect,
+                   DT_SINGLELINE | DT_CENTER | DT_VCENTER);
+    }
 
     SetBkMode(hdc, modeOld);
     SetTextColor(hdc, colOld);
 
     SetBkMode(hdc, modeOld);
     SetTextColor(hdc, colOld);