Smarten Up Toolbar

Robert Shearman R.J.Shearman at warwick.ac.uk
Sun May 18 21:10:27 CDT 2003


This fixes two little things that were 'bugging' me.
1. The text wasn't centred correctly when a dropdown arrow was present, due
to copying a rectangle before it had been adjusted for the dropdown button
2. The dropdown arrow icon was previously drawn near the top of the button,
now it is centred horizontally.

ChangeLog:
- Make button text centre correctly when dropdown arrow is present
- Centre dropdown arrow

Rob
-------------- next part --------------
Index: wine/dlls/comctl32/toolbar.c
===================================================================
RCS file: /home/wine/wine/dlls/comctl32/toolbar.c,v
retrieving revision 1.132
diff -u -r1.132 toolbar.c
--- wine/dlls/comctl32/toolbar.c	13 May 2003 23:38:01 -0000	1.132
+++ wine/dlls/comctl32/toolbar.c	18 May 2003 16:34:22 -0000
@@ -179,6 +179,7 @@
 #define TOP_BORDER         2
 #define BOTTOM_BORDER      2
 #define DDARROW_WIDTH      11
+#define ARROW_HEIGHT       3
 
 #define TOOLBAR_GetInfoPtr(hwnd) ((TOOLBAR_INFO *)GetWindowLongA(hwnd,0))
 #define TOOLBAR_HasText(x, y) (TOOLBAR_GetText(x, y) ? TRUE : FALSE)
@@ -502,7 +503,7 @@
     if (!(hPen = CreatePen( PS_SOLID, 1, GetSysColor( colorRef )))) return;
     hOldPen = SelectObject ( hdc, hPen );
     x = left + 2;
-    y = top + 8;
+    y = top;
     MoveToEx (hdc, x, y, NULL);
     LineTo (hdc, x+5, y++); x++;
     MoveToEx (hdc, x, y, NULL);
@@ -642,7 +643,6 @@
     CopyRect (&rcFill, &rc);
     CopyRect (&rcArrow, &rc);
     CopyRect(&rcBitmap, &rc);
-    CopyRect(&rcText, &rc);
 
     /* get a pointer to the text */
     lpText = TOOLBAR_GetText(infoPtr, btnPtr);
@@ -656,6 +656,11 @@
 	rcArrow.left = rc.right;
     }
 
+    /* copy text rect after adjusting for drop-down arrow
+     * so that text is centred in the rectangle not containing
+     * the arrow */
+    CopyRect(&rcText, &rc);
+
     /* Center the bitmap horizontally and vertically */
     if (dwStyle & TBSTYLE_LIST)
 	rcBitmap.left += 3;
@@ -794,8 +799,8 @@
 
         if (hasDropDownArrow)
 	{
-	    TOOLBAR_DrawArrow(hdc, rcArrow.left+1, rcArrow.top+1, COLOR_3DHIGHLIGHT);
-	    TOOLBAR_DrawArrow(hdc, rcArrow.left, rcArrow.top, COLOR_3DSHADOW);
+	    TOOLBAR_DrawArrow(hdc, rcArrow.left+1, rcArrow.top+1 + (rcArrow.bottom - rcArrow.top - ARROW_HEIGHT) / 2, COLOR_3DHIGHLIGHT);
+	    TOOLBAR_DrawArrow(hdc, rcArrow.left, rcArrow.top + (rcArrow.bottom - rcArrow.top - ARROW_HEIGHT) / 2, COLOR_3DSHADOW);
 	}
 
 	if (!TOOLBAR_DrawImageList (infoPtr, btnPtr, himlDis,
@@ -827,7 +832,7 @@
 	}
 
         if (hasDropDownArrow)
-	    TOOLBAR_DrawArrow(hdc, rcArrow.left, rcArrow.top, COLOR_WINDOWFRAME);
+	    TOOLBAR_DrawArrow(hdc, rcArrow.left, rcArrow.top + (rcArrow.bottom - rcArrow.top - ARROW_HEIGHT) / 2, COLOR_WINDOWFRAME);
 
 	TOOLBAR_DrawImageList (infoPtr, btnPtr, himlDef,
 			       hdc, rcBitmap.left+offset, rcBitmap.top+offset,
@@ -940,7 +945,7 @@
 	    if (!(infoPtr->dwItemCDFlag & TBCDRF_NOEDGES))
 		DrawEdge (hdc, &rcArrow, EDGE_RAISED,
 			  BF_SOFT | BF_RECT | BF_MIDDLE | BF_ADJUST);
-	    TOOLBAR_DrawArrow(hdc, rcArrow.left, rcArrow.top, COLOR_WINDOWFRAME);
+	    TOOLBAR_DrawArrow(hdc, rcArrow.left, rcArrow.top + (rcArrow.bottom - rcArrow.top - ARROW_HEIGHT) / 2, COLOR_WINDOWFRAME);
 	}
 
 	TOOLBAR_DrawImageList (infoPtr, btnPtr, himlDef,


More information about the wine-patches mailing list