1 /////////////////////////////////////////////////////////////////////////////
4 // Author: Stefan Csomor
8 // Copyright: (c) Stefan Csomor
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
13 #pragma implementation "brush.h"
20 #include "wx/mac/private.h"
22 #if !USE_SHARED_LIBRARIES
23 IMPLEMENT_DYNAMIC_CLASS(wxBrush
, wxGDIObject
)
26 class WXDLLEXPORT wxBrushRefData
: public wxGDIRefData
28 friend class WXDLLEXPORT wxBrush
;
31 wxBrushRefData(const wxBrushRefData
& data
);
35 wxMacBrushKind m_macBrushKind
;
40 ThemeBrush m_macThemeBrush
;
42 ThemeBackgroundKind m_macThemeBackground
;
43 Rect m_macThemeBackgroundExtent
;
46 #define M_BRUSHDATA ((wxBrushRefData *)m_refData)
48 wxBrushRefData::wxBrushRefData()
51 m_macBrushKind
= kwxMacBrushColour
;
54 wxBrushRefData::wxBrushRefData(const wxBrushRefData
& data
)
56 , m_style(data
.m_style
)
58 m_stipple
= data
.m_stipple
;
59 m_colour
= data
.m_colour
;
60 m_macBrushKind
= data
.m_macBrushKind
;
61 m_macThemeBrush
= data
.m_macThemeBrush
;
62 m_macThemeBackground
= data
.m_macThemeBackground
;
63 m_macThemeBackgroundExtent
= data
.m_macThemeBackgroundExtent
;
66 wxBrushRefData::~wxBrushRefData()
79 wxBrush::wxBrush(const wxColour
& col
, int Style
)
81 m_refData
= new wxBrushRefData
;
83 M_BRUSHDATA
->m_colour
= col
;
84 M_BRUSHDATA
->m_style
= Style
;
89 wxBrush::wxBrush(const wxBitmap
& stipple
)
91 m_refData
= new wxBrushRefData
;
93 M_BRUSHDATA
->m_colour
= *wxBLACK
;
94 M_BRUSHDATA
->m_stipple
= stipple
;
96 if (M_BRUSHDATA
->m_stipple
.GetMask())
97 M_BRUSHDATA
->m_style
= wxSTIPPLE_MASK_OPAQUE
;
99 M_BRUSHDATA
->m_style
= wxSTIPPLE
;
104 wxBrush::wxBrush(ThemeBrush macThemeBrush
)
106 m_refData
= new wxBrushRefData
;
108 M_BRUSHDATA
->m_macBrushKind
= kwxMacBrushTheme
;
109 M_BRUSHDATA
->m_macThemeBrush
= macThemeBrush
;
113 void wxBrush::Unshare()
115 // Don't change shared data
118 m_refData
= new wxBrushRefData();
122 wxBrushRefData
* ref
= new wxBrushRefData(*(wxBrushRefData
*)m_refData
);
128 void wxBrush::SetColour(const wxColour
& col
)
131 M_BRUSHDATA
->m_macBrushKind
= kwxMacBrushColour
;
132 M_BRUSHDATA
->m_colour
= col
;
137 void wxBrush::SetColour(unsigned char r
, unsigned char g
, unsigned char b
)
141 M_BRUSHDATA
->m_macBrushKind
= kwxMacBrushColour
;
142 M_BRUSHDATA
->m_colour
.Set(r
, g
, b
);
147 void wxBrush::SetStyle(int Style
)
151 M_BRUSHDATA
->m_macBrushKind
= kwxMacBrushColour
;
152 M_BRUSHDATA
->m_style
= Style
;
157 void wxBrush::SetStipple(const wxBitmap
& Stipple
)
161 M_BRUSHDATA
->m_macBrushKind
= kwxMacBrushColour
;
162 M_BRUSHDATA
->m_stipple
= Stipple
;
167 void wxBrush::SetMacTheme(ThemeBrush macThemeBrush
)
171 M_BRUSHDATA
->m_macBrushKind
= kwxMacBrushTheme
;
172 M_BRUSHDATA
->m_macThemeBrush
= macThemeBrush
;
177 void wxBrush::SetMacThemeBackground(unsigned long macThemeBackground
, const WXRECTPTR extent
)
181 M_BRUSHDATA
->m_macBrushKind
= kwxMacBrushThemeBackground
;
182 M_BRUSHDATA
->m_macThemeBackground
= macThemeBackground
;
183 M_BRUSHDATA
->m_macThemeBackgroundExtent
= *(Rect
*)extent
;
187 bool wxBrush::RealizeResource()
192 unsigned long wxBrush::GetMacThemeBackground( WXRECTPTR extent
) const
194 if ( M_BRUSHDATA
&& M_BRUSHDATA
->m_macBrushKind
== kwxMacBrushThemeBackground
)
197 *(Rect
*)extent
= M_BRUSHDATA
->m_macThemeBackgroundExtent
;
198 return M_BRUSHDATA
->m_macThemeBackground
;
206 short wxBrush::GetMacTheme() const
208 return (M_BRUSHDATA
? ( M_BRUSHDATA
->m_macBrushKind
== kwxMacBrushTheme
? M_BRUSHDATA
->m_macThemeBrush
: kThemeBrushBlack
) : kThemeBrushBlack
);
211 wxColour
& wxBrush::GetColour() const
213 return (M_BRUSHDATA
? M_BRUSHDATA
->m_colour
: wxNullColour
);
216 int wxBrush::GetStyle() const
218 return (M_BRUSHDATA
? M_BRUSHDATA
->m_style
: 0);
221 wxBitmap
*wxBrush::GetStipple() const
223 return (M_BRUSHDATA
? & M_BRUSHDATA
->m_stipple
: 0);
226 wxMacBrushKind
wxBrush::MacGetBrushKind() const
228 return (M_BRUSHDATA
? M_BRUSHDATA
->m_macBrushKind
: kwxMacBrushColour
);