-// Name: univ/themes/metal.cpp
+///////////////////////////////////////////////////////////////////////////////
+// Name: src/univ/themes/metal.cpp
// Purpose: wxUniversal theme implementing Win32-like LNF
// Author: Vadim Zeitlin, Robert Roebling
// Modified by:
#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/menu.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
// ----------------------------------------------------------------------------
Arrow_Normal,
Arrow_Disabled,
Arrow_Pressed,
- Arrow_Inversed,
- Arrow_InversedDisabled,
+ Arrow_Inverted,
+ Arrow_InvertedDisabled,
Arrow_StateMax
};
public:
void DrawShadedRect(wxDC& dc, wxRect *rect,
const wxPen& pen1, const wxPen& pen2);
- void DrawArrowBorder(wxDC& dc, wxRect *rect, bool isPressed = FALSE);
+ void DrawArrowBorder(wxDC& dc, wxRect *rect, bool isPressed = false);
void DrawArrow(wxDC& dc, const wxRect& rect,
wxArrowDirection arrowDir, wxArrowStyle arrowStyle);
// 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);
}
- // create the inversed bitmap but only for the right arrow as we only
+ // create the inverted bitmap but only for the right arrow as we only
// use it for the menus
if ( n == Arrow_Right )
{
- m_bmpArrows[Arrow_Inversed][n].Create(w, h);
- dcInverse.SelectObject(m_bmpArrows[Arrow_Inversed][n]);
+ m_bmpArrows[Arrow_Inverted][n].Create(w, h);
+ dcInverse.SelectObject(m_bmpArrows[Arrow_Inverted][n]);
dcInverse.Clear();
dcInverse.Blit(0, 0, w, h,
&dcNormal, 0, 0,
wxXOR);
dcInverse.SelectObject(wxNullBitmap);
- mask = new wxMask(m_bmpArrows[Arrow_Inversed][n], *wxBLACK);
- m_bmpArrows[Arrow_Inversed][n].SetMask(mask);
+ mask = new wxMask(m_bmpArrows[Arrow_Inverted][n], *wxBLACK);
+ m_bmpArrows[Arrow_Inverted][n].SetMask(mask);
- m_bmpArrows[Arrow_InversedDisabled][n].Create(w, h);
- dcInverse.SelectObject(m_bmpArrows[Arrow_InversedDisabled][n]);
+ m_bmpArrows[Arrow_InvertedDisabled][n].Create(w, h);
+ dcInverse.SelectObject(m_bmpArrows[Arrow_InvertedDisabled][n]);
dcInverse.Clear();
dcInverse.Blit(0, 0, w, h,
&dcDisabled, 0, 0,
wxXOR);
dcInverse.SelectObject(wxNullBitmap);
- mask = new wxMask(m_bmpArrows[Arrow_InversedDisabled][n], *wxBLACK);
- m_bmpArrows[Arrow_InversedDisabled][n].SetMask(mask);
+ mask = new wxMask(m_bmpArrows[Arrow_InvertedDisabled][n], *wxBLACK);
+ m_bmpArrows[Arrow_InvertedDisabled][n].SetMask(mask);
}
dcNormal.SelectObject(wxNullBitmap);
x--;
// draw it
- dc.DrawBitmap(bmp, x, y, TRUE /* use mask */);
+ dc.DrawBitmap(bmp, x, y, true /* use mask */);
}
// ----------------------------------------------------------------------------
dc.SetPen(*wxTRANSPARENT_PEN);
for (int y = rect.y; y < rect.height+rect.y; y++)
{
- int intens = 230 + 80 * (rect.y-y) / rect.height;
+ unsigned char intens = (unsigned char)(230 + 80 * (rect.y-y) / rect.height);
dc.SetBrush( wxBrush( wxColour(intens,intens,intens), wxSOLID ) );
dc.DrawRectangle( rect.x, y, rect.width, 1 );
}
}
+
+#endif // wxUSE_THEME_METAL