X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/51596bcb982d1147c00f869acf18062ca150fa91..a1900c9e1d07ac71f373f94656bf26a45f032c39:/src/msw/notebook.cpp

diff --git a/src/msw/notebook.cpp b/src/msw/notebook.cpp
index edbeaa0c3e..37ae63235e 100644
--- a/src/msw/notebook.cpp
+++ b/src/msw/notebook.cpp
@@ -9,7 +9,7 @@
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
 #pragma implementation "notebook.h"
 #endif
 
@@ -68,6 +68,16 @@
 #include "wx/panel.h"
 #endif
 
+/*
+	notebookpage
+		object
+		object_ref
+		label
+		selected
+		style
+		usenotebooksizer
+*/
+
 // ----------------------------------------------------------------------------
 // macros
 // ----------------------------------------------------------------------------
@@ -485,11 +495,21 @@ bool wxNotebook::InsertPage(int nPage,
                     _T("notebook pages must have notebook as parent") );
 
 #if wxUSE_UXTHEME && wxUSE_UXTHEME_AUTO
+    static bool g_TestedForTheme = FALSE;
+    static bool g_UseTheme = FALSE;
+    if (!g_TestedForTheme)
+    {
+        int commCtrlVersion = wxTheApp->GetComCtl32Version() ;
+        
+        g_UseTheme = (commCtrlVersion >= 600);
+        g_TestedForTheme = TRUE;
+    }
+    
     // Automatically apply the theme background,
     // changing the colour of the panel to match the
     // tab page colour. This won't work well with all
     // themes but it's a start.
-    if (wxUxThemeEngine::Get() && pPage->IsKindOf(CLASSINFO(wxPanel)))
+    if (g_UseTheme && wxUxThemeEngine::Get() && pPage->IsKindOf(CLASSINFO(wxPanel)))
     {
         ApplyThemeBackground(pPage, GetThemeBackgroundColour());
     }
@@ -787,31 +807,36 @@ wxColour wxNotebook::GetThemeBackgroundColour()
 #if wxUSE_UXTHEME
     if (wxUxThemeEngine::Get())
     {
-        WXHTHEME hTheme = wxUxThemeEngine::Get()->m_pfnOpenThemeData(GetHWND(), L"TAB");
+        wxUxThemeHandle hTheme(this, L"TAB");
         if (hTheme)
         {
             // This is total guesswork.
             // See PlatformSDK\Include\Tmschema.h for values
             COLORREF themeColor;
-            wxUxThemeEngine::Get()->
-                m_pfnGetThemeColor(hTheme,
-                10 /* TABP_BODY */,
-                1 /* NORMAL */,
-                3821, /* FILLCOLORHINT */
-                & themeColor);
-            
-            wxUxThemeEngine::Get()->m_pfnCloseThemeData(hTheme);
+            wxUxThemeEngine::Get()->GetThemeColor
+                                    (
+                                        hTheme,
+                                        10 /* TABP_BODY */,
+                                        1 /* NORMAL */,
+                                        3821, /* FILLCOLORHINT */
+                                        & themeColor
+                                    );
             
             wxColour colour(GetRValue(themeColor), GetGValue(themeColor), GetBValue(themeColor));
             return colour;
         }
     }
-#endif
+#endif // wxUSE_UXTHEME
+
     return GetBackgroundColour();
 }
 
 // Windows only: attempts to apply the UX theme page background to this page
+#if wxUSE_UXTHEME
 void wxNotebook::ApplyThemeBackground(wxWindow* window, const wxColour& colour)
+#else
+void wxNotebook::ApplyThemeBackground(wxWindow*, const wxColour&)
+#endif
 {
 #if wxUSE_UXTHEME
     // Don't set the background for buttons since this will
@@ -841,10 +866,34 @@ void wxNotebook::ApplyThemeBackground(wxWindow* window, const wxColour& colour)
         wxWindow *child = node->GetData();
         ApplyThemeBackground(child, colour);
     }
-#else
-    window;
-    colour;
 #endif
 }
 
+long wxNotebook::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam)
+{
+    static bool g_TestedForTheme = FALSE;
+    static bool g_UseTheme = FALSE;
+    switch ( nMsg )
+    {
+        case WM_ERASEBKGND:
+        {
+            if (!g_TestedForTheme)
+            {
+                int commCtrlVersion = wxTheApp->GetComCtl32Version() ;
+
+                g_UseTheme = (commCtrlVersion >= 600);
+                g_TestedForTheme = TRUE;
+            }
+
+            // If using XP themes, it seems we can get away
+            // with not drawing a background, which reduces flicker.
+            if (g_UseTheme)            
+                return TRUE;
+        }
+    }
+
+    return wxControl::MSWWindowProc(nMsg, wParam, lParam);
+}
+
+
 #endif // wxUSE_NOTEBOOK