]> git.saurik.com Git - wxWidgets.git/blob - src/common/rendcmn.cpp
added wxAppTraits::CreateRenderer() which may be used to customize the renderer
[wxWidgets.git] / src / common / rendcmn.cpp
1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: common/rendcmn.cpp
3 // Purpose: wxRendererNative common functions
4 // Author: Vadim Zeitlin
5 // Modified by:
6 // Created: 28.07.03
7 // RCS-ID: $Id$
8 // Copyright: (c) 2003 Vadim Zeitlin <vadim@wxwindows.org>
9 // License: wxWindows license
10 ///////////////////////////////////////////////////////////////////////////////
11
12 // ============================================================================
13 // declarations
14 // ============================================================================
15
16 // ----------------------------------------------------------------------------
17 // headers
18 // ----------------------------------------------------------------------------
19
20 #include "wx/wxprec.h"
21
22 #ifdef __BORLANDC__
23 #pragma hdrstop
24 #endif
25
26 #ifndef WX_PRECOMP
27 #endif //WX_PRECOMP
28
29 #include "wx/apptrait.h"
30 #include "wx/renderer.h"
31
32 #include "wx/ptr_scpd.h"
33
34 // ----------------------------------------------------------------------------
35 // wxRendererPtr: auto pointer holding the global renderer
36 // ----------------------------------------------------------------------------
37
38 wxDECLARE_SCOPED_PTR(wxRendererNative, wxRendererPtrBase);
39 wxDEFINE_SCOPED_PTR(wxRendererNative, wxRendererPtrBase);
40
41 class wxRendererPtr : public wxRendererPtrBase
42 {
43 public:
44 wxRendererPtr() : wxRendererPtrBase(NULL) { m_initialized = false; }
45
46 // return true if we have a renderer, false otherwise
47 bool IsOk()
48 {
49 if ( !m_initialized )
50 {
51 // only try to create the renderer once
52 m_initialized = true;
53
54 DoInit();
55 }
56
57 return get() != NULL;
58 }
59
60 private:
61 void DoInit()
62 {
63 wxAppTraits *traits = wxTheApp ? wxTheApp->GetTraits() : NULL;
64 if ( traits )
65 {
66 // ask the traits object to create a renderer for us
67 reset(traits->CreateRenderer());
68 }
69 }
70
71 bool m_initialized;
72
73 DECLARE_NO_COPY_CLASS(wxRendererPtr)
74 };
75
76 // ============================================================================
77 // wxRendererNative implementation
78 // ============================================================================
79
80 /* static */
81 wxRendererNative& wxRendererNative::Get()
82 {
83 static wxRendererPtr s_renderer;
84
85 return s_renderer.IsOk() ? *s_renderer.get() : GetDefault();
86 }
87