Author: gadamopoulos
Date: Tue Jul 25 22:41:26 2017
New Revision: 75406

URL: http://svn.reactos.org/svn/reactos?rev=75406&view=rev
Log:
[COMCTL32] -Implement taking into account the contents margins from the theme 
when calculating the size of the toolbar button. Using it while painting the 
button will be implemented in a later commit as it caused me some problems.

Modified:
    trunk/reactos/dll/win32/comctl32/toolbar.c

Modified: trunk/reactos/dll/win32/comctl32/toolbar.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/comctl32/toolbar.c?rev=75406&r1=75405&r2=75406&view=diff
==============================================================================
--- trunk/reactos/dll/win32/comctl32/toolbar.c  [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/comctl32/toolbar.c  [iso-8859-1] Tue Jul 25 
22:41:26 2017
@@ -126,6 +126,7 @@
 #ifdef __REACTOS__
     SIZE     szBarPadding;       /* padding values around the toolbar (NOT 
USED BUT STORED) */
     SIZE     szSpacing;       /* spacing values between buttons */
+    MARGINS  themeMargins;
 #endif
     INT      iTopMargin;      /* the top margin */
     INT      iListGap;        /* default gap between text and image for 
toolbar with list style */
@@ -1706,6 +1707,12 @@
                 max(2*GetSystemMetrics(SM_CXEDGE) + sizeString.cx, 
infoPtr->nBitmapWidth);
         }
     }
+
+#ifdef __REACTOS__
+    sizeButton.cx += infoPtr->themeMargins.cxLeftWidth + 
infoPtr->themeMargins.cxRightWidth;
+    sizeButton.cy += infoPtr->themeMargins.cyTopHeight + 
infoPtr->themeMargins.cyBottomHeight;
+#endif
+
     return sizeButton;
 }
 
@@ -2064,16 +2071,6 @@
     SendMessageW (hwndTip, TTM_RELAYEVENT, 0, (LPARAM)&msg);
 }
 
-#ifdef __REACTOS__
-static LRESULT
-TOOLBAR_ThemeChanged(HWND hwnd)
-{
-    HTHEME theme = GetWindowTheme(hwnd);
-    CloseThemeData(theme);
-    OpenThemeData(hwnd, themeClass);
-    return 0;
-}
-#endif
 
 static void
 TOOLBAR_TooltipAddTool(const TOOLBAR_INFO *infoPtr, const TBUTTON_INFO *button)
@@ -4601,8 +4598,13 @@
     if (cx == 0) cx = 24;
     if (cy == 0) cy = 22;
 
+#ifdef __REACTOS__
+    cx = max(cx, infoPtr->szPadding.cx + infoPtr->nBitmapWidth + 
infoPtr->themeMargins.cxLeftWidth + infoPtr->themeMargins.cxRightWidth);
+    cy = max(cy, infoPtr->szPadding.cy + infoPtr->nBitmapHeight + 
infoPtr->themeMargins.cyTopHeight + infoPtr->themeMargins.cyBottomHeight);
+#else
     cx = max(cx, infoPtr->szPadding.cx + infoPtr->nBitmapWidth);
     cy = max(cy, infoPtr->szPadding.cy + infoPtr->nBitmapHeight);
+#endif
 
     if (cx != infoPtr->nButtonWidth || cy != infoPtr->nButtonHeight ||
         top != infoPtr->iTopMargin)
@@ -5463,8 +5465,16 @@
 
     SystemParametersInfoW (SPI_GETICONTITLELOGFONT, 0, &logFont, 0);
     infoPtr->hFont = infoPtr->hDefaultFont = CreateFontIndirectW (&logFont);
-    
+
+#ifdef __REACTOS__
+    {
+        HTHEME theme = OpenThemeData (hwnd, themeClass);
+        if (theme)
+            GetThemeMargins(theme, NULL, TP_BUTTON, TS_NORMAL, 
TMT_CONTENTMARGINS, NULL, &infoPtr->themeMargins);
+    }
+#else
     OpenThemeData (hwnd, themeClass);
+#endif
 
     TOOLBAR_CheckStyle (infoPtr);
 
@@ -6239,6 +6249,7 @@
 #ifdef __REACTOS__
     infoPtr->szSpacing.cx = DEFSPACE_CX;
     infoPtr->szSpacing.cy = DEFSPACE_CY;
+    memset(&infoPtr->themeMargins, 0 , sizeof(infoPtr->themeMargins));
 #endif
     infoPtr->iListGap = DEFLISTGAP;
     infoPtr->iTopMargin = default_top_margin(infoPtr);
@@ -6649,8 +6660,22 @@
     return 0;
 }
 
-#ifndef __REACTOS__
+#ifdef __REACTOS__
 /* update theme after a WM_THEMECHANGED message */
+static LRESULT theme_changed (TOOLBAR_INFO *infoPtr)
+{
+    HTHEME theme = GetWindowTheme (infoPtr->hwndSelf);
+    CloseThemeData (theme);
+    OpenThemeData (infoPtr->hwndSelf, themeClass);
+    theme = GetWindowTheme (infoPtr->hwndSelf);
+    if (theme)
+        GetThemeMargins(theme, NULL, TP_BUTTON, TS_NORMAL, TMT_CONTENTMARGINS, 
NULL, &infoPtr->themeMargins);
+    else
+        memset(&infoPtr->themeMargins, 0 ,sizeof(infoPtr->themeMargins));
+
+    return 0;
+}
+#else
 static LRESULT theme_changed (HWND hwnd)
 {
     HTHEME theme = GetWindowTheme (hwnd);
@@ -7056,10 +7081,9 @@
 
        case WM_SYSCOLORCHANGE:
            return TOOLBAR_SysColorChange ();
-            
-        case WM_THEMECHANGED:
+    case WM_THEMECHANGED:
 #ifdef __REACTOS__
-        return TOOLBAR_ThemeChanged(hwnd);
+            return theme_changed (infoPtr);
 #else
             return theme_changed (hwnd);
 #endif


Reply via email to