#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/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
// ----------------------------------------------------------------------------
-class wxMetalTheme : public wxTheme
+class wxMetalTheme : public wxDelegateTheme
{
public:
- wxMetalTheme();
- virtual ~wxMetalTheme();
+ wxMetalTheme() : wxDelegateTheme(wxT("win32")), m_renderer(NULL) {}
+ ~wxMetalTheme() { delete m_renderer; }
- virtual wxRenderer *GetRenderer();
- virtual wxArtProvider *GetArtProvider();
- virtual wxInputHandler *GetInputHandler(const wxString& control,
- wxInputConsumer *consumer);
- 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;
}
- 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
case wxDOWN: arrowDir = Arrow_Down; break;
default:
- wxFAIL_MSG(_T("unknown arrow direction"));
+ wxFAIL_MSG(wxT("unknown arrow direction"));
return;
}
dc.DrawRectangle( rect.x, y, rect.width, 1 );
}
}
+
+#endif // wxUSE_THEME_METAL