Alexandre Julliard : comctl32/pager: Use DrawFrameControl to paint the buttons.

Alexandre Julliard julliard at winehq.org
Tue Nov 20 13:52:23 CST 2012


Module: wine
Branch: master
Commit: f3b8e68296767f77da98f944d332fc996a047e68
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=f3b8e68296767f77da98f944d332fc996a047e68

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Tue Nov 20 16:01:47 2012 +0100

comctl32/pager: Use DrawFrameControl to paint the buttons.

---

 dlls/comctl32/pager.c |  173 ++++++-------------------------------------------
 1 files changed, 20 insertions(+), 153 deletions(-)

diff --git a/dlls/comctl32/pager.c b/dlls/comctl32/pager.c
index e1420e0..c270723 100644
--- a/dlls/comctl32/pager.c
+++ b/dlls/comctl32/pager.c
@@ -84,9 +84,6 @@ typedef struct
     INT    direction;  /* direction of the scroll, (e.g. PGF_SCROLLUP) */
 } PAGER_INFO;
 
-#define MIN_ARROW_WIDTH  8
-#define MIN_ARROW_HEIGHT 5
-
 #define TIMERID1         1
 #define TIMERID2         2
 #define INITIAL_DELAY    500
@@ -116,115 +113,13 @@ PAGER_GetButtonRects(const PAGER_INFO* infoPtr, RECT* prcTopLeft, RECT* prcBotto
     }
 }
 
-/* the horizontal arrows are:
- *
- * 01234    01234
- * 1  *      *
- * 2 **      **
- * 3***      ***
- * 4***      ***
- * 5 **      **
- * 6  *      *
- * 7
- *
- */
-static void
-PAGER_DrawHorzArrow (HDC hdc, RECT r, INT colorRef, BOOL left)
-{
-    INT x, y, w, h;
-    HPEN hPen, hOldPen;
-
-    w = r.right - r.left + 1;
-    h = r.bottom - r.top + 1;
-    if ((h < MIN_ARROW_WIDTH) || (w < MIN_ARROW_HEIGHT))
-        return;  /* refuse to draw partial arrow */
-
-    if (!(hPen = CreatePen( PS_SOLID, 1, GetSysColor( colorRef )))) return;
-    hOldPen = SelectObject ( hdc, hPen );
-    if (left)
-    {
-        x = r.left + ((w - MIN_ARROW_HEIGHT) / 2) + 3;
-        y = r.top + ((h - MIN_ARROW_WIDTH) / 2) + 1;
-        MoveToEx (hdc, x, y, NULL);
-        LineTo (hdc, x--, y+5); y++;
-        MoveToEx (hdc, x, y, NULL);
-        LineTo (hdc, x--, y+3); y++;
-        MoveToEx (hdc, x, y, NULL);
-        LineTo (hdc, x, y+1);
-    }
-    else
-    {
-        x = r.left + ((w - MIN_ARROW_HEIGHT) / 2) + 1;
-        y = r.top + ((h - MIN_ARROW_WIDTH) / 2) + 1;
-        MoveToEx (hdc, x, y, NULL);
-        LineTo (hdc, x++, y+5); y++;
-        MoveToEx (hdc, x, y, NULL);
-        LineTo (hdc, x++, y+3); y++;
-        MoveToEx (hdc, x, y, NULL);
-        LineTo (hdc, x, y+1);
-    }
-
-    SelectObject( hdc, hOldPen );
-    DeleteObject( hPen );
-}
-
-/* the vertical arrows are:
- *
- * 01234567    01234567
- * 1******        **
- * 2 ****        ****
- * 3  **        ******
- * 4
- *
- */
-static void
-PAGER_DrawVertArrow (HDC hdc, RECT r, INT colorRef, BOOL up)
-{
-    INT x, y, w, h;
-    HPEN hPen, hOldPen;
-
-    w = r.right - r.left + 1;
-    h = r.bottom - r.top + 1;
-    if ((h < MIN_ARROW_WIDTH) || (w < MIN_ARROW_HEIGHT))
-        return;  /* refuse to draw partial arrow */
-
-    if (!(hPen = CreatePen( PS_SOLID, 1, GetSysColor( colorRef )))) return;
-    hOldPen = SelectObject ( hdc, hPen );
-    if (up)
-    {
-        x = r.left + ((w - MIN_ARROW_HEIGHT) / 2) + 1;
-        y = r.top + ((h - MIN_ARROW_WIDTH) / 2) + 3;
-        MoveToEx (hdc, x, y, NULL);
-        LineTo (hdc, x+5, y--); x++;
-        MoveToEx (hdc, x, y, NULL);
-        LineTo (hdc, x+3, y--); x++;
-        MoveToEx (hdc, x, y, NULL);
-        LineTo (hdc, x+1, y);
-    }
-    else
-    {
-        x = r.left + ((w - MIN_ARROW_HEIGHT) / 2) + 1;
-        y = r.top + ((h - MIN_ARROW_WIDTH) / 2) + 1;
-        MoveToEx (hdc, x, y, NULL);
-        LineTo (hdc, x+5, y++); x++;
-        MoveToEx (hdc, x, y, NULL);
-        LineTo (hdc, x+3, y++); x++;
-        MoveToEx (hdc, x, y, NULL);
-        LineTo (hdc, x+1, y);
-    }
-
-    SelectObject( hdc, hOldPen );
-    DeleteObject( hPen );
-}
-
 static void
-PAGER_DrawButton(HDC hdc, COLORREF clrBk, RECT arrowRect,
+PAGER_DrawButton(HDC hdc, COLORREF clrBk, RECT rc,
                  BOOL horz, BOOL topLeft, INT btnState)
 {
-    HBRUSH   hBrush, hOldBrush;
-    RECT     rc = arrowRect;
+    UINT flags;
 
-    TRACE("arrowRect = %s, btnState = %d\n", wine_dbgstr_rect(&arrowRect), btnState);
+    TRACE("rc = %s, btnState = %d\n", wine_dbgstr_rect(&rc), btnState);
 
     if (btnState == PGF_INVISIBLE)
         return;
@@ -232,54 +127,26 @@ PAGER_DrawButton(HDC hdc, COLORREF clrBk, RECT arrowRect,
     if ((rc.right - rc.left <= 0) || (rc.bottom - rc.top <= 0))
         return;
 
-    hBrush = CreateSolidBrush(clrBk);
-    hOldBrush = SelectObject(hdc, hBrush);
-
-    FillRect(hdc, &rc, hBrush);
+    if (horz)
+        flags = topLeft ? DFCS_SCROLLLEFT : DFCS_SCROLLRIGHT;
+    else
+        flags = topLeft ? DFCS_SCROLLUP : DFCS_SCROLLDOWN;
 
-    if (btnState == PGF_HOT)
+    switch (btnState)
     {
-       DrawEdge( hdc, &rc, BDR_RAISEDINNER, BF_RECT);
-       if (horz)
-           PAGER_DrawHorzArrow(hdc, rc, COLOR_WINDOWFRAME, topLeft);
-       else
-           PAGER_DrawVertArrow(hdc, rc, COLOR_WINDOWFRAME, topLeft);
-    }
-    else if (btnState == PGF_NORMAL)
-    {
-       DrawEdge (hdc, &rc, BDR_OUTER, BF_FLAT);
-       if (horz)
-           PAGER_DrawHorzArrow(hdc, rc, COLOR_WINDOWFRAME, topLeft);
-       else
-           PAGER_DrawVertArrow(hdc, rc, COLOR_WINDOWFRAME, topLeft);
-    }
-    else if (btnState == PGF_DEPRESSED)
-    {
-       DrawEdge( hdc, &rc, BDR_SUNKENOUTER, BF_RECT);
-       if (horz)
-           PAGER_DrawHorzArrow(hdc, rc, COLOR_WINDOWFRAME, topLeft);
-       else
-           PAGER_DrawVertArrow(hdc, rc, COLOR_WINDOWFRAME, topLeft);
-    }
-    else if (btnState == PGF_GRAYED)
-    {
-       DrawEdge (hdc, &rc, BDR_OUTER, BF_FLAT);
-       if (horz)
-       {
-           PAGER_DrawHorzArrow(hdc, rc, COLOR_3DHIGHLIGHT, topLeft);
-           rc.left++, rc.top++; rc.right++, rc.bottom++;
-           PAGER_DrawHorzArrow(hdc, rc, COLOR_3DSHADOW, topLeft);
-       }
-       else
-       {
-           PAGER_DrawVertArrow(hdc, rc, COLOR_3DHIGHLIGHT, topLeft);
-           rc.left++, rc.top++; rc.right++, rc.bottom++;
-           PAGER_DrawVertArrow(hdc, rc, COLOR_3DSHADOW, topLeft);
-       }
+    case PGF_HOT:
+        break;
+    case PGF_NORMAL:
+        flags |= DFCS_FLAT;
+        break;
+    case PGF_DEPRESSED:
+        flags |= DFCS_PUSHED;
+        break;
+    case PGF_GRAYED:
+        flags |= DFCS_INACTIVE | DFCS_FLAT;
+        break;
     }
-
-    SelectObject( hdc, hOldBrush );
-    DeleteObject(hBrush);
+    DrawFrameControl( hdc, &rc, DFC_SCROLL, flags );
 }
 
 /* << PAGER_GetDropTarget >> */




More information about the wine-cvs mailing list