]> git.saurik.com Git - wxWidgets.git/blob - src/qt/pen.cpp
fixed (rare but fatal) bug in wxWindowDisabler
[wxWidgets.git] / src / qt / pen.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: pen.cpp
3 // Purpose: wxPen
4 // Author: AUTHOR
5 // Modified by:
6 // Created: ??/??/98
7 // RCS-ID: $Id$
8 // Copyright: (c) AUTHOR
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11
12 #ifdef __GNUG__
13 #pragma implementation "pen.h"
14 #endif
15
16 #include "wx/setup.h"
17 #include "wx/utils.h"
18 #include "wx/pen.h"
19
20 IMPLEMENT_DYNAMIC_CLASS(wxPen, wxGDIObject)
21
22 wxPenRefData::wxPenRefData()
23 {
24 m_style = wxSOLID;
25 m_width = 1;
26 m_join = wxJOIN_ROUND ;
27 m_cap = wxCAP_ROUND ;
28 m_nbDash = 0 ;
29 m_dash = 0 ;
30 /* TODO: null data
31 m_hPen = 0;
32 */
33 }
34
35 wxPenRefData::wxPenRefData(const wxPenRefData& data)
36 {
37 m_style = data.m_style;
38 m_width = data.m_width;
39 m_join = data.m_join;
40 m_cap = data.m_cap;
41 m_nbDash = data.m_nbDash;
42 m_dash = data.m_dash;
43 m_colour = data.m_colour;
44 /* TODO: null data
45 m_hPen = 0;
46 */
47 }
48
49 wxPenRefData::~wxPenRefData()
50 {
51 // TODO: delete data
52 }
53
54 // Pens
55
56 wxPen::wxPen()
57 {
58 if ( wxThePenList )
59 wxThePenList->AddPen(this);
60 }
61
62 wxPen::~wxPen()
63 {
64 if (wxThePenList)
65 wxThePenList->RemovePen(this);
66 }
67
68 // Should implement Create
69 wxPen::wxPen(const wxColour& col, int Width, int Style)
70 {
71 m_refData = new wxPenRefData;
72
73 M_PENDATA->m_colour = col;
74 M_PENDATA->m_width = Width;
75 M_PENDATA->m_style = Style;
76 M_PENDATA->m_join = wxJOIN_ROUND ;
77 M_PENDATA->m_cap = wxCAP_ROUND ;
78 M_PENDATA->m_nbDash = 0 ;
79 M_PENDATA->m_dash = 0 ;
80
81 RealizeResource();
82
83 if ( wxThePenList )
84 wxThePenList->AddPen(this);
85 }
86
87 wxPen::wxPen(const wxBitmap& stipple, int Width)
88 {
89 m_refData = new wxPenRefData;
90
91 M_PENDATA->m_stipple = stipple;
92 M_PENDATA->m_width = Width;
93 M_PENDATA->m_style = wxSTIPPLE;
94 M_PENDATA->m_join = wxJOIN_ROUND ;
95 M_PENDATA->m_cap = wxCAP_ROUND ;
96 M_PENDATA->m_nbDash = 0 ;
97 M_PENDATA->m_dash = 0 ;
98
99 RealizeResource();
100
101 if ( wxThePenList )
102 wxThePenList->AddPen(this);
103 }
104
105 wxPen::wxPen(const wxString& col, int Width, int Style)
106 {
107 m_refData = new wxPenRefData;
108
109 M_PENDATA->m_colour = col;
110 M_PENDATA->m_width = Width;
111 M_PENDATA->m_style = Style;
112 M_PENDATA->m_join = wxJOIN_ROUND ;
113 M_PENDATA->m_cap = wxCAP_ROUND ;
114 M_PENDATA->m_nbDash = 0 ;
115 M_PENDATA->m_dash = 0 ;
116
117 RealizeResource();
118
119 if ( wxThePenList )
120 wxThePenList->AddPen(this);
121 }
122
123 void wxPen::Unshare()
124 {
125 // Don't change shared data
126 if (!m_refData)
127 {
128 m_refData = new wxPenRefData();
129 }
130 else
131 {
132 wxPenRefData* ref = new wxPenRefData(*(wxPenRefData*)m_refData);
133 UnRef();
134 m_refData = ref;
135 }
136 }
137
138 void wxPen::SetColour(const wxColour& col)
139 {
140 Unshare();
141
142 M_PENDATA->m_colour = col;
143
144 RealizeResource();
145 }
146
147 void wxPen::SetColour(const wxString& col)
148 {
149 Unshare();
150
151 M_PENDATA->m_colour = col;
152
153 RealizeResource();
154 }
155
156 void wxPen::SetColour(const unsigned char r, const unsigned char g, const unsigned char b)
157 {
158 Unshare();
159
160 M_PENDATA->m_colour.Set(r, g, b);
161
162 RealizeResource();
163 }
164
165 void wxPen::SetWidth(int Width)
166 {
167 Unshare();
168
169 M_PENDATA->m_width = Width;
170
171 RealizeResource();
172 }
173
174 void wxPen::SetStyle(int Style)
175 {
176 Unshare();
177
178 M_PENDATA->m_style = Style;
179
180 RealizeResource();
181 }
182
183 void wxPen::SetStipple(const wxBitmap& Stipple)
184 {
185 Unshare();
186
187 M_PENDATA->m_stipple = Stipple;
188 M_PENDATA->m_style = wxSTIPPLE;
189
190 RealizeResource();
191 }
192
193 void wxPen::SetDashes(int nb_dashes, const wxDash *Dash)
194 {
195 Unshare();
196
197 M_PENDATA->m_nbDash = nb_dashes;
198 M_PENDATA->m_dash = (wxDash *)Dash;
199
200 RealizeResource();
201 }
202
203 void wxPen::SetJoin(int Join)
204 {
205 Unshare();
206
207 M_PENDATA->m_join = Join;
208
209 RealizeResource();
210 }
211
212 void wxPen::SetCap(int Cap)
213 {
214 Unshare();
215
216 M_PENDATA->m_cap = Cap;
217
218 RealizeResource();
219 }
220
221 bool wxPen::RealizeResource()
222 {
223 // TODO: create actual pen
224 return FALSE;
225 }
226
227