#pragma hdrstop
#endif
+#include "wx/univ/theme.h"
+
+#if wxUSE_THEME_METAL
+
#ifndef WX_PRECOMP
#include "wx/timer.h"
#include "wx/intl.h"
#include "wx/textctrl.h"
#include "wx/toolbar.h"
- #ifdef __WXMSW__
- // for COLOR_* constants
- #include "wx/msw/private.h"
- #endif
#include "wx/menu.h"
+ #include "wx/settings.h"
+ #include "wx/toplevel.h"
#endif // WX_PRECOMP
#include "wx/notebook.h"
#include "wx/spinbutt.h"
-#include "wx/settings.h"
#include "wx/artprov.h"
-#include "wx/toplevel.h"
#include "wx/univ/scrtimer.h"
#include "wx/univ/renderer.h"
+#include "wx/univ/inpcons.h"
#include "wx/univ/inphand.h"
#include "wx/univ/colschem.h"
-#include "wx/univ/theme.h"
+// ----------------------------------------------------------------------------
// wxMetalRenderer: draw the GUI elements in Metal style
// ----------------------------------------------------------------------------
// wxMetalTheme
// ----------------------------------------------------------------------------
-WX_DEFINE_ARRAY_PTR(wxInputHandler *, wxArrayHandlers);
-
-class wxMetalTheme : public wxTheme
+class wxMetalTheme : public wxDelegateTheme
{
public:
- wxMetalTheme();
- virtual ~wxMetalTheme();
+ wxMetalTheme() : wxDelegateTheme(_T("win32")), m_renderer(NULL) {}
+ ~wxMetalTheme() { delete m_renderer; }
- virtual wxRenderer *GetRenderer();
- virtual wxArtProvider *GetArtProvider();
- virtual wxInputHandler *GetInputHandler(const wxString& control);
- virtual wxColourScheme *GetColourScheme();
-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;
}
-private:
- 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)
-{
- if ( !GetOrCreateTheme() )
- return 0;
- return m_win32Theme->GetInputHandler(control);
-}
-
-wxColourScheme *wxMetalTheme::GetColourScheme()
-{
- if ( !GetOrCreateTheme() )
- return 0;
- return m_win32Theme->GetColourScheme();
-}
+// ============================================================================
+// implementation
+// ============================================================================
// ----------------------------------------------------------------------------
// wxMetalRenderer
// ----------------------------------------------------------------------------
wxMetalRenderer::wxMetalRenderer(wxRenderer *renderer, wxColourScheme *scheme)
- : wxDelegateRenderer(renderer)
+ : wxDelegateRenderer(renderer)
{
// init colours and pens
m_penBlack = wxPen(wxSCHEME_COLOUR(scheme, SHADOW_DARK), 0, wxSOLID);
dc.DrawRectangle( rect.x, y, rect.width, 1 );
}
}
+
+#endif // wxUSE_THEME_METAL