[ros-diffs] [mkupfer] 39888: - more improved version, reduced calls, allocate ressources if needed only

mkupfer at svn.reactos.org mkupfer at svn.reactos.org
Fri Mar 6 17:47:45 CET 2009


Author: mkupfer
Date: Fri Mar  6 19:47:44 2009
New Revision: 39888

URL: http://svn.reactos.org/svn/reactos?rev=39888&view=rev
Log:
- more improved version, reduced calls, allocate ressources if needed only

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=39888&r1=39887&r2=39888&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] Fri Mar  6 19:47:44 2009
@@ -1234,64 +1234,58 @@
     return TRUE;
 }
 
-/* Ported from WINE20020904 */
-/* Draw a menu control coming from DrawFrameControl() */
 static BOOL UITOOLS95_DrawFrameMenu(HDC dc, LPRECT r, UINT uFlags)
 {
-    RECT myr;
-    int SmallDiam = UITOOLS_MakeSquareRect(r, &myr);
-    BOOL retval = TRUE;
-    /* Start using Marlett-font instead of basic drawing */
     LOGFONT lf;
     HFONT hFont, hOldFont;
     COLORREF clrsave;
-
+    INT bkmode;
+    TCHAR Symbol;
+    switch(uFlags & 0xff)
+    {
+        case DFCS_MENUARROW:
+            Symbol = '8';
+            break;
+
+        case DFCS_MENUBULLET:
+            Symbol = 'h';
+            break;
+
+        case DFCS_MENUCHECK:
+            Symbol = 'a';
+            break;
+
+        default:
+/*
+            DbgPrint("Invalid menu; flags=0x%04x\n", uFlags);
+*/
+            return FALSE;
+    }
+    /* acquire ressources only if valid menu */
     ZeroMemory(&lf, sizeof(LOGFONT));
-    lf.lfHeight = SmallDiam;
+    lf.lfHeight = r->bottom - r->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);
-    clrsave = GetTextColor(dc);
     SetTextColor(dc, GetSysColor(COLOR_WINDOWTEXT));
-
     FillRect(dc, r, (HBRUSH)GetStockObject(WHITE_BRUSH));
-
-    switch(uFlags & 0xff)
-    {
-        case DFCS_MENUARROW:
-            // FIXME: is "8" the correct symbol?
-            TextOut(dc, myr.left, myr.top, TEXT("8"), 1);
-            break;
-
-        case DFCS_MENUBULLET:
-            // FIXME: is "h" the correct symbol?
-            TextOut(dc, myr.left, myr.top, TEXT("h"), 1);
-            break;
-
-        case DFCS_MENUCHECK:
-            // FIXME: is "a" the correct symbol?
-            TextOut(dc, myr.left, myr.top, TEXT("a"), 1);
-            break;
-
-        default:
-/*
-            DbgPrint("Invalid menu; flags=0x%04x\n", uFlags);
-*/
-            retval = FALSE;
-            break;
-    }
-
+    /* draw selected symbol */
+    TextOut(dc, r->left, r->top, &Symbol, 1);
+    /* restore previous settings */
     SetTextColor(dc, clrsave);
     SelectObject(dc, hOldFont);
+    SetBkMode(dc, bkmode);
     DeleteObject(hFont);
-
-    return retval;
-}
-
+    return TRUE;
+}
 
 BOOL
 WINAPI



More information about the Ros-diffs mailing list