[ros-diffs] [mkupfer] 39906: - continue "marletting" - use marlett font for caption buttons

mkupfer at svn.reactos.org mkupfer at svn.reactos.org
Sun Mar 8 15:08:29 CET 2009


Author: mkupfer
Date: Sun Mar  8 17:08:28 2009
New Revision: 39906

URL: http://svn.reactos.org/svn/reactos?rev=39906&view=rev
Log:
- continue "marletting"
- use marlett font for caption buttons

Modified:
    trunk/reactos/dll/win32/user32/windows/draw.c

Modified: trunk/reactos/dll/win32/user32/windows/draw.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/user32/windows/draw.c?rev=39906&r1=39905&r2=39906&view=diff
==============================================================================
--- trunk/reactos/dll/win32/user32/windows/draw.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/user32/windows/draw.c [iso-8859-1] Sun Mar  8 17:08:28 2009
@@ -845,226 +845,74 @@
     return FALSE;
 }
 
-/* Ported from WINE20020904 */
-/* Draw caption buttons (win95), coming from DrawFrameControl() */
 static BOOL UITOOLS95_DrawFrameCaption(HDC dc, LPRECT r, UINT uFlags)
 {
-    POINT Line1[10];
-    POINT Line2[10];
-    int Line1N;
-    int Line2N;
+    int colorIdx = uFlags & DFCS_INACTIVE ? COLOR_BTNSHADOW : COLOR_BTNTEXT;
+    LOGFONT lf;
+    HFONT hFont, hOldFont;
+    COLORREF clrsave;
     RECT myr;
-    int SmallDiam = UITOOLS_MakeSquareRect(r, &myr)-2;
-    int i;
-    HBRUSH hbsave;
-    HPEN hpsave;
-    HFONT hfsave, hf;
-    int colorIdx = uFlags & DFCS_INACTIVE ? COLOR_BTNSHADOW : COLOR_BTNTEXT;
-    int xc = (myr.left+myr.right)/2;
-    int yc = (myr.top+myr.bottom)/2;
-    int edge, move;
-    char str[2] = "?";
-    UINT alignsave;
-    int bksave;
-    COLORREF clrsave;
-    SIZE size;
-
+    INT bkmode;
+    TCHAR Symbol;
+    switch(uFlags & 0xff)
+    {
+        case DFCS_CAPTIONCLOSE:
+		Symbol = 'r';
+		break;
+        case DFCS_CAPTIONHELP:
+		Symbol = 's';
+		break;
+        case DFCS_CAPTIONMIN:
+		Symbol = '0';
+		break;
+        case DFCS_CAPTIONMAX:
+		Symbol = '1';
+		break;
+        case DFCS_CAPTIONRESTORE:
+		Symbol = '2';
+		break;
+        default:
+             return FALSE;
+    }
     if(uFlags & DFCS_PUSHED)
         IntDrawRectEdge(dc,r,EDGE_SUNKEN, BF_RECT | BF_MIDDLE | BF_SOFT);
     else
         IntDrawRectEdge(dc,r,BDR_RAISEDINNER | BDR_RAISEDOUTER, BF_RECT |
                         BF_SOFT | BF_MIDDLE);
-
-    switch(uFlags & 0xff)
-    {
-        case DFCS_CAPTIONCLOSE:
-        {
-            /* The "X" is made by drawing a series of lines.
-            * The number of lines drawn depends on the size
-            * of the bounding rect.  e.g. For a 6x5 inside rect,
-            * two lines are drawn from top-left to bottom-right,
-            * and two lines from top-right to bottom-left.
-            *
-            * 0 1 2 3 4 5       0 1 2 3 4 5
-            * 1 * *                     * *
-            * 2   * *                 * *
-            * 3     * *             * *
-            * 4       * *         * *
-            *
-            * Drawing one line for every 6 pixels in width
-            * seems to provide the best proportions.
-            */
-
-            POINT start, oldPos;
-            INT width = myr.right - (++myr.left) - 5;
-            INT height = (--myr.bottom) - myr.top - 6;
-            INT numLines = (width / 6) + 1;
-
-            hpsave = (HPEN)SelectObject(dc, GetSysColorPen(colorIdx));
-
-            start.x = myr.left + 2;
-            start.y = myr.top + 2;
-
-            if (width < 6)
-                height = width;
-            else
-                start.y++;
-
-            if (uFlags & DFCS_PUSHED)
-            {
-                start.x++;
-                start.y++;
-            }
-
-            /* now use the width of each line */
-            width -= numLines - 1;
-
-            for (i = 0; i < numLines; i++)
-            {
-                MoveToEx(dc, start.x + i, start.y, &oldPos);
-                LineTo(dc, start.x + i + width, start.y + height);
-
-                MoveToEx(dc, start.x + i, start.y + height - 1, &oldPos);
-                LineTo(dc, start.x + i + width, start.y - 1);
-            }
-
-            SelectObject(dc, hpsave);
-            return TRUE;
-        }
-
-        case DFCS_CAPTIONHELP:
-            /* This one breaks the flow */
-            /* FIXME: We need the Marlett font in order to get this right. */
-
-            hf = CreateFontA(-SmallDiam, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE,
-                             ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
-                             DEFAULT_QUALITY, FIXED_PITCH|FF_DONTCARE, "System");
-            alignsave = SetTextAlign(dc, TA_TOP|TA_LEFT);
-            bksave = SetBkMode(dc, TRANSPARENT);
-            clrsave = GetTextColor(dc);
-            hfsave = (HFONT)SelectObject(dc, hf);
-            GetTextExtentPoint32A(dc, str, 1, &size);
-
-            if(uFlags & DFCS_INACTIVE)
-            {
-                SetTextColor(dc, GetSysColor(COLOR_BTNHIGHLIGHT));
-                TextOutA(dc, xc-size.cx/2+1, yc-size.cy/2+1, str, 1);
-            }
-            SetTextColor(dc, GetSysColor(colorIdx));
-            TextOutA(dc, xc-size.cx/2, yc-size.cy/2, str, 1);
-
-            SelectObject(dc, hfsave);
-            SetTextColor(dc, clrsave);
-            SetBkMode(dc, bksave);
-            SetTextAlign(dc, alignsave);
-            DeleteObject(hf);
-            return TRUE;
-
-        case DFCS_CAPTIONMIN:
-            /*
-            * If the button goes from x 0 -- w-1, the leftmost point of the
-            * minimize line always starts at x>=4.
-            */
-        {
-            const int width = myr.right - myr.left;
-            const int xInsetPixels = (width>=9 ? width - 9 : 0) / 8 + 4;
-            Line1[0].x = Line1[3].x = myr.left   + xInsetPixels;
-            Line1[1].x = Line1[2].x = Line1[0].x + 372*SmallDiam/750;
-            Line1[0].y = Line1[1].y = myr.top    + 563*SmallDiam/750+1;
-            Line1[2].y = Line1[3].y = Line1[0].y +  92*SmallDiam/750;
-            Line1N = 4;
-            Line2N = 0;
-        }
-        break;
-
-        case DFCS_CAPTIONMAX:
-            edge = 47*SmallDiam/750;
-            Line1[0].x = Line1[5].x = myr.left +  57*SmallDiam/750+3;
-            Line1[0].y = Line1[1].y = myr.top  + 143*SmallDiam/750+1;
-            Line1[1].x = Line1[2].x = Line1[0].x + 562*SmallDiam/750;
-            Line1[5].y = Line1[4].y = Line1[0].y +  93*SmallDiam/750;
-            Line1[2].y = Line1[3].y = Line1[0].y + 513*SmallDiam/750;
-            Line1[3].x = Line1[4].x = Line1[1].x -  edge;
-
-            Line2[0].x = Line2[5].x = Line1[0].x;
-            Line2[3].x = Line2[4].x = Line1[1].x;
-            Line2[1].x = Line2[2].x = Line1[0].x + edge;
-            Line2[0].y = Line2[1].y = Line1[0].y;
-            Line2[4].y = Line2[5].y = Line1[2].y;
-            Line2[2].y = Line2[3].y = Line1[2].y - edge;
-            Line1N = 6;
-            Line2N = 6;
-            break;
-
-        case DFCS_CAPTIONRESTORE:
-            /* FIXME: this one looks bad at small sizes < 15x15 :( */
-            edge = 47*SmallDiam/750;
-            move = 420*SmallDiam/750;
-            Line1[0].x = Line1[9].x = myr.left + 198*SmallDiam/750+2;
-            Line1[0].y = Line1[1].y = myr.top  + 169*SmallDiam/750+1;
-            Line1[6].y = Line1[7].y = Line1[0].y + 93*SmallDiam/750;
-            Line1[7].x = Line1[8].x = Line1[0].x + edge;
-            Line1[1].x = Line1[2].x = Line1[0].x + move;
-            Line1[5].x = Line1[6].x = Line1[1].x - edge;
-            Line1[9].y = Line1[8].y = Line1[0].y + 187*SmallDiam/750;
-            Line1[2].y = Line1[3].y = Line1[0].y + 327*SmallDiam/750;
-            Line1[4].y = Line1[5].y = Line1[2].y - edge;
-            Line1[3].x = Line1[4].x = Line1[2].x - 140*SmallDiam/750;
-
-            Line2[1].x = Line2[2].x = Line1[3].x;
-            Line2[7].x = Line2[8].x = Line2[1].x - edge;
-            Line2[0].x = Line2[9].x = Line2[3].x = Line2[4].x = Line2[1].x - move;
-            Line2[5].x = Line2[6].x = Line2[0].x + edge;
-            Line2[0].y = Line2[1].y = Line1[9].y + 93*SmallDiam/750;
-            Line2[4].y = Line2[5].y = Line2[8].y = Line2[9].y = Line2[0].y + 93*SmallDiam/750;
-            Line2[2].y = Line2[3].y = Line2[0].y + 327*SmallDiam/750;
-            Line2[6].y = Line2[7].y = Line2[2].y - edge;
-            Line1N = 10;
-            Line2N = 10;
-            break;
-
-        default:
-            return FALSE;
-    }
-
-    /* Here the drawing takes place */
+    ZeroMemory(&lf, sizeof(LOGFONT));
+    UITOOLS_MakeSquareRect(r, &myr);
+    myr.left += 1;
+    myr.top += 1;
+    myr.right -= 1;
+    myr.bottom -= 1;
+    if(uFlags & DFCS_PUSHED)
+       OffsetRect(&myr,1,1);
+    lf.lfHeight = myr.bottom - myr.top;
+    lf.lfWidth = 0;
+    lf.lfWeight = FW_NORMAL;
+    lf.lfCharSet = DEFAULT_CHARSET;
+    lstrcpy(lf.lfFaceName, TEXT("Marlett"));
+    hFont = CreateFontIndirect(&lf);
+    /* save font and text color */
+    hOldFont = SelectObject(dc, hFont);
+    clrsave = GetTextColor(dc);
+    bkmode = GetBkMode(dc);
+    /* set color and drawing mode */
+    SetBkMode(dc, TRANSPARENT);
     if(uFlags & DFCS_INACTIVE)
     {
-        /* If we have an inactive button, then you see a shadow */
-        hbsave = (HBRUSH)SelectObject(dc, GetSysColorBrush(COLOR_BTNHIGHLIGHT));
-        hpsave = (HPEN)SelectObject(dc, GetSysColorPen(COLOR_BTNHIGHLIGHT));
-        Polygon(dc, Line1, Line1N);
-        if(Line2N > 0)
-            Polygon(dc, Line2, Line2N);
-        SelectObject(dc, hpsave);
-        SelectObject(dc, hbsave);
-    }
-
-    /* Correct for the shadow shift */
-    if (!(uFlags & DFCS_PUSHED))
-    {
-        for(i = 0; i < Line1N; i++)
-        {
-            Line1[i].x--;
-            Line1[i].y--;
-        }
-        for(i = 0; i < Line2N; i++)
-        {
-            Line2[i].x--;
-            Line2[i].y--;
-        }
-    }
-
-    /* Make the final picture */
-    hbsave = (HBRUSH)SelectObject(dc, GetSysColorBrush(colorIdx));
-    hpsave = (HPEN)SelectObject(dc, GetSysColorPen(colorIdx));
-
-    Polygon(dc, Line1, Line1N);
-    if(Line2N > 0)
-        Polygon(dc, Line2, Line2N);
-    SelectObject(dc, hpsave);
-    SelectObject(dc, hbsave);
-
+        /* draw shadow */
+        SetTextColor(dc, GetSysColor(COLOR_BTNHIGHLIGHT));
+        TextOut(dc, myr.left + 1, myr.top + 1, &Symbol, 1);
+    }
+    SetTextColor(dc, GetSysColor(colorIdx));
+    /* draw selected symbol */
+    TextOut(dc, myr.left, myr.top, &Symbol, 1);
+    /* restore previous settings */
+    SetTextColor(dc, clrsave);
+    SelectObject(dc, hOldFont);
+    SetBkMode(dc, bkmode);
+    DeleteObject(hFont);
     return TRUE;
 }
 



More information about the Ros-diffs mailing list