Static object -> pointer
Clean up renderer in module OnExit or we get a crash on exit (under wxX11 at least). To-do: we need to add priorities to wxModule so we can clean this up last. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@22697 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -33,9 +33,8 @@
|
|||||||
|
|
||||||
#include "wx/settings.h"
|
#include "wx/settings.h"
|
||||||
#include "wx/splitter.h"
|
#include "wx/splitter.h"
|
||||||
|
|
||||||
#include "wx/dcmirror.h"
|
#include "wx/dcmirror.h"
|
||||||
|
#include "wx/module.h"
|
||||||
#include "wx/renderer.h"
|
#include "wx/renderer.h"
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -72,6 +71,11 @@ public:
|
|||||||
|
|
||||||
virtual wxSplitterRenderParams GetSplitterParams(const wxWindow *win);
|
virtual wxSplitterRenderParams GetSplitterParams(const wxWindow *win);
|
||||||
|
|
||||||
|
// Cleanup by deleting standard renderer
|
||||||
|
static void Cleanup();
|
||||||
|
|
||||||
|
// Get the generic object
|
||||||
|
static wxRendererGeneric* DoGetGeneric();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// draw the rectange using the first pen for the left and top sides and
|
// draw the rectange using the first pen for the left and top sides and
|
||||||
@@ -84,12 +88,22 @@ protected:
|
|||||||
m_penDarkGrey,
|
m_penDarkGrey,
|
||||||
m_penLightGrey,
|
m_penLightGrey,
|
||||||
m_penHighlight;
|
m_penHighlight;
|
||||||
|
|
||||||
|
static wxRendererGeneric* sm_rendererGeneric;
|
||||||
};
|
};
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// wxRendererGeneric implementation
|
// wxRendererGeneric implementation
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
|
||||||
|
// Get the generic object
|
||||||
|
wxRendererGeneric* wxRendererGeneric::DoGetGeneric()
|
||||||
|
{
|
||||||
|
if (!sm_rendererGeneric)
|
||||||
|
sm_rendererGeneric = new wxRendererGeneric;
|
||||||
|
return sm_rendererGeneric;
|
||||||
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// wxRendererGeneric creation
|
// wxRendererGeneric creation
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -97,11 +111,19 @@ protected:
|
|||||||
/* static */
|
/* static */
|
||||||
wxRendererNative& wxRendererNative::GetGeneric()
|
wxRendererNative& wxRendererNative::GetGeneric()
|
||||||
{
|
{
|
||||||
static wxRendererGeneric s_rendererGeneric;
|
return * wxRendererGeneric::DoGetGeneric();
|
||||||
|
|
||||||
return s_rendererGeneric;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wxRendererGeneric::Cleanup()
|
||||||
|
{
|
||||||
|
if (sm_rendererGeneric)
|
||||||
|
delete sm_rendererGeneric;
|
||||||
|
|
||||||
|
sm_rendererGeneric = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxRendererGeneric* wxRendererGeneric::sm_rendererGeneric = NULL;
|
||||||
|
|
||||||
wxRendererGeneric::wxRendererGeneric()
|
wxRendererGeneric::wxRendererGeneric()
|
||||||
: m_penBlack(wxSystemSettings::GetColour(wxSYS_COLOUR_3DDKSHADOW)),
|
: m_penBlack(wxSystemSettings::GetColour(wxSYS_COLOUR_3DDKSHADOW)),
|
||||||
m_penDarkGrey(wxSystemSettings::GetColour(wxSYS_COLOUR_3DSHADOW)),
|
m_penDarkGrey(wxSystemSettings::GetColour(wxSYS_COLOUR_3DSHADOW)),
|
||||||
@@ -300,3 +322,15 @@ wxRendererGeneric::DrawSplitterSash(wxWindow *win,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// A module to allow cleanup of generic renderer.
|
||||||
|
class wxGenericRendererModule: public wxModule
|
||||||
|
{
|
||||||
|
DECLARE_DYNAMIC_CLASS(wxGenericRendererModule)
|
||||||
|
public:
|
||||||
|
wxGenericRendererModule() {}
|
||||||
|
bool OnInit() { return true; };
|
||||||
|
void OnExit() { wxRendererGeneric::Cleanup(); };
|
||||||
|
};
|
||||||
|
|
||||||
|
IMPLEMENT_DYNAMIC_CLASS(wxGenericRendererModule, wxModule)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user