Add wxCairoLibrary (not yet built)
[wxWidgets.git] / src / common / cairo.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: src/common/cairo.cpp
3 // Purpose: Cairo library
4 // Author: Anthony Betaudeau
5 // Created: 2007-08-25
6 // RCS-ID: $Id: cairo.cpp 44625 2007-08-25 11:35:04Z VZ $
7 // Copyright: (c) Anthony Bretaudeau
8 // Licence: wxWindows licence
9 /////////////////////////////////////////////////////////////////////////////
10
11
12 // For compilers that support precompilation, includes "wx/wx.h".
13 #include "wx/wxprec.h"
14
15 #ifdef __BORLANDC__
16 #pragma hdrstop
17 #endif
18
19 #include "wx/cairo.h"
20
21 #if wxUSE_CAIRO
22
23 #ifndef WX_PRECOMP
24 #include "wx/module.h"
25 #include "wx/log.h"
26 #endif
27
28
29 wxCairoLibrary *wxCairoLibrary::s_lib = NULL;
30
31 //----------------------------------------------------------------------------
32 // wxCairoLibrary
33 //----------------------------------------------------------------------------
34
35 wxCairoLibrary::wxCairoLibrary()
36 {
37 m_cairo_lib = NULL;
38
39 wxLogNull log;
40 m_cairo_lib = new wxDynamicLibrary( wxT("libcairo.so") );
41 m_ok = m_cairo_lib->IsLoaded();
42 if (!m_ok) return;
43
44 InitializeMethods();
45 }
46
47 wxCairoLibrary::~wxCairoLibrary()
48 {
49 if (m_cairo_lib)
50 delete m_cairo_lib;
51 }
52
53 /* static */ wxCairoLibrary* wxCairoLibrary::Get()
54 {
55 if (s_lib)
56 return s_lib;
57
58 s_lib = new wxCairoLibrary();
59 if (s_lib->IsOk())
60 return s_lib;
61
62 delete s_lib;
63 s_lib = NULL;
64
65 return NULL;
66 }
67
68 /* static */ void wxCairoLibrary::CleanUp()
69 {
70 if (s_lib)
71 {
72 delete s_lib;
73 s_lib = NULL;
74 }
75 }
76
77 bool wxCairoLibrary::IsOk()
78 {
79 return m_ok;
80 }
81
82 void wxCairoLibrary::InitializeMethods()
83 {
84 m_ok = false;
85 bool success;
86
87 wxDL_METHOD_LOAD( m_cairo_lib, cairo_arc, success )
88 wxDL_METHOD_LOAD( m_cairo_lib, cairo_arc_negative, success )
89 wxDL_METHOD_LOAD( m_cairo_lib, cairo_clip, success )
90 wxDL_METHOD_LOAD( m_cairo_lib, cairo_close_path, success )
91 wxDL_METHOD_LOAD( m_cairo_lib, cairo_create, success )
92 wxDL_METHOD_LOAD( m_cairo_lib, cairo_curve_to, success )
93 wxDL_METHOD_LOAD( m_cairo_lib, cairo_destroy, success )
94 wxDL_METHOD_LOAD( m_cairo_lib, cairo_fill, success )
95 wxDL_METHOD_LOAD( m_cairo_lib, cairo_fill_preserve, success )
96 wxDL_METHOD_LOAD( m_cairo_lib, cairo_get_target, success )
97 wxDL_METHOD_LOAD( m_cairo_lib, cairo_image_surface_create_for_data, success )
98 wxDL_METHOD_LOAD( m_cairo_lib, cairo_line_to, success )
99 wxDL_METHOD_LOAD( m_cairo_lib, cairo_move_to, success )
100 wxDL_METHOD_LOAD( m_cairo_lib, cairo_new_path, success )
101 wxDL_METHOD_LOAD( m_cairo_lib, cairo_paint, success )
102 wxDL_METHOD_LOAD( m_cairo_lib, cairo_pattern_add_color_stop_rgba, success )
103 wxDL_METHOD_LOAD( m_cairo_lib, cairo_pattern_create_for_surface, success )
104 wxDL_METHOD_LOAD( m_cairo_lib, cairo_pattern_create_linear, success )
105 wxDL_METHOD_LOAD( m_cairo_lib, cairo_pattern_create_radial, success )
106 wxDL_METHOD_LOAD( m_cairo_lib, cairo_pattern_destroy, success )
107 wxDL_METHOD_LOAD( m_cairo_lib, cairo_pattern_set_extend, success )
108 wxDL_METHOD_LOAD( m_cairo_lib, cairo_pattern_set_filter, success )
109 wxDL_METHOD_LOAD( m_cairo_lib, cairo_rectangle, success )
110 wxDL_METHOD_LOAD( m_cairo_lib, cairo_reset_clip, success )
111 wxDL_METHOD_LOAD( m_cairo_lib, cairo_restore, success )
112 wxDL_METHOD_LOAD( m_cairo_lib, cairo_rotate, success )
113 wxDL_METHOD_LOAD( m_cairo_lib, cairo_save, success )
114 wxDL_METHOD_LOAD( m_cairo_lib, cairo_scale, success )
115 wxDL_METHOD_LOAD( m_cairo_lib, cairo_set_dash, success )
116 wxDL_METHOD_LOAD( m_cairo_lib, cairo_set_fill_rule, success )
117 wxDL_METHOD_LOAD( m_cairo_lib, cairo_set_line_cap, success )
118 wxDL_METHOD_LOAD( m_cairo_lib, cairo_set_line_join, success )
119 wxDL_METHOD_LOAD( m_cairo_lib, cairo_set_line_width, success )
120 wxDL_METHOD_LOAD( m_cairo_lib, cairo_set_operator, success )
121 wxDL_METHOD_LOAD( m_cairo_lib, cairo_set_source, success )
122 wxDL_METHOD_LOAD( m_cairo_lib, cairo_set_source_rgba, success )
123 wxDL_METHOD_LOAD( m_cairo_lib, cairo_stroke, success )
124 wxDL_METHOD_LOAD( m_cairo_lib, cairo_stroke_preserve, success )
125 wxDL_METHOD_LOAD( m_cairo_lib, cairo_surface_create_similar, success )
126 wxDL_METHOD_LOAD( m_cairo_lib, cairo_surface_destroy, success )
127 wxDL_METHOD_LOAD( m_cairo_lib, cairo_translate, success )
128
129 m_ok = true;
130 }
131
132 //----------------------------------------------------------------------------
133 // wxCairoModule
134 //----------------------------------------------------------------------------
135
136 class wxCairoModule: public wxModule
137 {
138 public:
139 wxCairoModule() { }
140 bool OnInit();
141 void OnExit();
142
143 private:
144 DECLARE_DYNAMIC_CLASS(wxGtkPrintModule)
145 };
146
147 bool wxCairoModule::OnInit()
148 {
149 return true;
150 }
151
152 void wxCairoModule::OnExit()
153 {
154 wxCairoLibrary::CleanUp();
155 }
156
157 IMPLEMENT_DYNAMIC_CLASS(wxCairoModule, wxModule)
158
159 #endif
160 // wxUSE_CAIRO