]> git.saurik.com Git - wxWidgets.git/commitdiff
added wxDelegateTheme to accompany wxDelegateRenderer
authorVáclav Slavík <vslavik@fastmail.fm>
Thu, 26 Oct 2006 15:33:10 +0000 (15:33 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Thu, 26 Oct 2006 15:33:10 +0000 (15:33 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42455 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/univ/theme.h
src/univ/theme.cpp
src/univ/themes/metal.cpp

index abc19d6631653799d481dff6bc730a6f3c9373dc..a386a2cca837697a80aa8e019ebf4f58dfd9db8f 100644 (file)
@@ -76,6 +76,34 @@ private:
     friend struct WXDLLEXPORT wxThemeInfo;
 };
 
+// ----------------------------------------------------------------------------
+// wxDelegateTheme: it is impossible to inherit from any of standard
+// themes as their declarations are in private code, but you can use this
+// class to override only some of their functions - all the other ones
+// will be left to the original theme
+// ----------------------------------------------------------------------------
+
+class wxDelegateTheme : public wxTheme
+{
+public:
+    wxDelegateTheme(const wxChar *theme);
+    virtual ~wxDelegateTheme();
+
+    virtual wxRenderer *GetRenderer();
+    virtual wxArtProvider *GetArtProvider();
+    virtual wxInputHandler *GetInputHandler(const wxString& control,
+                                            wxInputConsumer *consumer);
+    virtual wxColourScheme *GetColourScheme();
+
+protected:
+    // gets or creates theme and sets m_theme to point to it,
+    // returns true on success
+    bool GetOrCreateTheme();
+
+    wxString    m_themeName;
+    wxTheme    *m_theme;
+};
+
 // ----------------------------------------------------------------------------
 // dynamic theme creation helpers
 // ----------------------------------------------------------------------------
index 4f89ceb076b311cd9d7b83ae465c0510d2446449..985bc527acbd1dc7c1548e0fc320e221f933a364 100644 (file)
@@ -147,3 +147,58 @@ wxTheme::~wxTheme()
 {
 }
 
+
+// ----------------------------------------------------------------------------
+// wxDelegateTheme
+// ----------------------------------------------------------------------------
+
+wxDelegateTheme::wxDelegateTheme(const wxChar *theme)
+{
+    m_themeName = theme;
+    m_theme = NULL;
+}
+
+wxDelegateTheme::~wxDelegateTheme()
+{
+    delete m_theme;
+}
+
+bool wxDelegateTheme::GetOrCreateTheme()
+{
+    if ( !m_theme )
+        m_theme = wxTheme::Create(m_themeName);
+    return m_theme != NULL;
+}
+
+wxRenderer *wxDelegateTheme::GetRenderer()
+{
+    if ( !GetOrCreateTheme() )
+        return NULL;
+
+    return m_theme->GetRenderer();
+}
+
+wxArtProvider *wxDelegateTheme::GetArtProvider()
+{
+    if ( !GetOrCreateTheme() )
+        return NULL;
+
+    return m_theme->GetArtProvider();
+}
+
+wxInputHandler *wxDelegateTheme::GetInputHandler(const wxString& control,
+                                                 wxInputConsumer *consumer)
+{
+    if ( !GetOrCreateTheme() )
+        return NULL;
+
+    return m_theme->GetInputHandler(control, consumer);
+}
+
+wxColourScheme *wxDelegateTheme::GetColourScheme()
+{
+    if ( !GetOrCreateTheme() )
+        return NULL;
+
+    return m_theme->GetColourScheme();
+}
index af2b79fd60bc683595c71bda1759dc565d7533d2..a0849274c4e59be29d9d297de9ad6b40ef710dc2 100644 (file)
@@ -60,6 +60,7 @@
 #include "wx/univ/inphand.h"
 #include "wx/univ/colschem.h"
 
+// ----------------------------------------------------------------------------
 // wxMetalRenderer: draw the GUI elements in Metal style
 // ----------------------------------------------------------------------------
 
@@ -142,86 +143,35 @@ private:
 // wxMetalTheme
 // ----------------------------------------------------------------------------
 
-class wxMetalTheme : public wxTheme
+class wxMetalTheme : public wxDelegateTheme
 {
 public:
-    wxMetalTheme();
-    virtual ~wxMetalTheme();
-
-    virtual wxRenderer *GetRenderer();
-    virtual wxArtProvider *GetArtProvider();
-    virtual wxInputHandler *GetInputHandler(const wxString& control,
-                                            wxInputConsumer *consumer);
-    virtual wxColourScheme *GetColourScheme();
+    wxMetalTheme() : wxDelegateTheme(_T("win32")), m_renderer(NULL) {}
+    ~wxMetalTheme() { delete m_renderer; }
 
-private:
-    bool GetOrCreateTheme()
+protected:
+    virtual wxRenderer *GetRenderer()
     {
-        if ( !m_win32Theme )
-            m_win32Theme = wxTheme::Create( wxT("win32") );
-        return m_win32Theme != NULL;
+        if ( !m_renderer )
+        {
+            m_renderer = new wxMetalRenderer(m_theme->GetRenderer(),
+                                             GetColourScheme());
+        }
+
+        return m_renderer;
     }
 
-    wxTheme *m_win32Theme;
-    wxMetalRenderer *m_renderer;
+    wxRenderer *m_renderer;
 
     WX_DECLARE_THEME(Metal)
 };
 
-// ============================================================================
-// implementation
-// ============================================================================
-
 WX_IMPLEMENT_THEME(wxMetalTheme, Metal, wxTRANSLATE("Metal theme"));
 
-// ----------------------------------------------------------------------------
-// wxMetalTheme
-// ----------------------------------------------------------------------------
 
-wxMetalTheme::wxMetalTheme()
-{
-    m_win32Theme = NULL;
-    m_renderer = NULL;
-}
-
-wxMetalTheme::~wxMetalTheme()
-{
-    delete m_win32Theme;
-    delete m_renderer;
-}
-
-wxRenderer *wxMetalTheme::GetRenderer()
-{
-    if ( !GetOrCreateTheme() )
-        return 0;
-    if ( !m_renderer )
-        m_renderer = new wxMetalRenderer(m_win32Theme->GetRenderer(),
-                                         m_win32Theme->GetColourScheme());
-
-    return m_renderer;
-}
-
-wxArtProvider *wxMetalTheme::GetArtProvider()
-{
-    if ( !GetOrCreateTheme() )
-        return 0;
-    return m_win32Theme->GetArtProvider();
-}
-
-wxInputHandler *wxMetalTheme::GetInputHandler(const wxString& control,
-                                              wxInputConsumer *consumer)
-{
-    if ( !GetOrCreateTheme() )
-        return 0;
-    return m_win32Theme->GetInputHandler(control, consumer);
-}
-
-wxColourScheme *wxMetalTheme::GetColourScheme()
-{
-    if ( !GetOrCreateTheme() )
-        return 0;
-    return m_win32Theme->GetColourScheme();
-}
+// ============================================================================
+// implementation
+// ============================================================================
 
 // ----------------------------------------------------------------------------
 // wxMetalRenderer