X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2e57368359ab190b5bbad1849d88f298e30723c9..5c7b506103cfc078a821860766e31c47d595e07f:/src/mac/carbon/brush.cpp?ds=sidebyside diff --git a/src/mac/carbon/brush.cpp b/src/mac/carbon/brush.cpp index b0fa74aa0a..46132211be 100644 --- a/src/mac/carbon/brush.cpp +++ b/src/mac/carbon/brush.cpp @@ -23,234 +23,170 @@ IMPLEMENT_DYNAMIC_CLASS(wxBrush, wxGDIObject) class WXDLLEXPORT wxBrushRefData: public wxGDIRefData { - friend class WXDLLEXPORT wxBrush; - public: - wxBrushRefData(); + wxBrushRefData(const wxColour& colour = wxNullColour, wxBrushStyle style = wxBRUSHSTYLE_SOLID); + wxBrushRefData(const wxBitmap& stipple); wxBrushRefData(const wxBrushRefData& data); virtual ~wxBrushRefData(); - bool operator == ( const wxBrushRefData& brush ) const - { - return m_style == brush.m_style && - m_stipple.IsRefTo(&brush.m_stipple) && - m_colour == brush.m_colour && - m_macBrushKind == brush.m_macBrushKind && - m_macThemeBrush == brush.m_macThemeBrush && - m_macThemeBackground == brush.m_macThemeBackground && - EqualRect(&m_macThemeBackgroundExtent, &brush.m_macThemeBackgroundExtent); - } + bool operator==(const wxBrushRefData& data) const; + const wxColour& GetColour() const { return m_colour; } + wxBrushStyle GetStyle() const { return m_style; } + wxBitmap *GetStipple() { return &m_stipple; } -protected: - wxMacBrushKind m_macBrushKind ; - int m_style; - wxBitmap m_stipple ; - wxColour m_colour; + void SetColour(const wxColour& colour) { m_colour = colour; } + void SetStyle(wxBrushStyle style) { m_style = style; } + void SetStipple(const wxBitmap& stipple) { DoSetStipple(stipple); } - ThemeBrush m_macThemeBrush ; +protected: + void DoSetStipple(const wxBitmap& stipple); - ThemeBackgroundKind m_macThemeBackground ; - Rect m_macThemeBackgroundExtent ; + wxBitmap m_stipple; + wxColour m_colour; + wxBrushStyle m_style; }; #define M_BRUSHDATA ((wxBrushRefData *)m_refData) +wxBrushRefData::wxBrushRefData(const wxColour& colour, wxBrushStyle style) + : m_colour(colour), m_style( style ) +{ +} -wxBrushRefData::wxBrushRefData() - : m_style(wxSOLID) +wxBrushRefData::wxBrushRefData(const wxBitmap& stipple) { - m_macBrushKind = kwxMacBrushColour ; + DoSetStipple( stipple ); } wxBrushRefData::wxBrushRefData(const wxBrushRefData& data) - : wxGDIRefData() - , m_style(data.m_style) + : wxGDIRefData() , + m_stipple(data.m_stipple), + m_colour(data.m_colour), + m_style(data.m_style) { - m_stipple = data.m_stipple; - m_colour = data.m_colour; - m_macBrushKind = data.m_macBrushKind ; - m_macThemeBrush = data.m_macThemeBrush ; - m_macThemeBackground = data.m_macThemeBackground ; - m_macThemeBackgroundExtent = data.m_macThemeBackgroundExtent ; } wxBrushRefData::~wxBrushRefData() { } -wxBrush::wxBrush() +bool wxBrushRefData::operator==(const wxBrushRefData& data) const { + return m_style == data.m_style && + m_colour == data.m_colour && + m_stipple.IsSameAs(data.m_stipple); } -wxBrush::~wxBrush() +void wxBrushRefData::DoSetStipple(const wxBitmap& stipple) { + m_stipple = stipple; + m_style = stipple.GetMask() ? wxBRUSHSTYLE_STIPPLE_MASK_OPAQUE : wxBRUSHSTYLE_STIPPLE; } +// +// +// -wxBrush::wxBrush(const wxColour& col, int Style) +wxBrush::wxBrush() { - m_refData = new wxBrushRefData; - - M_BRUSHDATA->m_colour = col; - M_BRUSHDATA->m_style = Style; - - RealizeResource(); } -wxBrush::wxBrush(const wxBitmap& stipple) +wxBrush::~wxBrush() { - m_refData = new wxBrushRefData; - - M_BRUSHDATA->m_colour = *wxBLACK; - M_BRUSHDATA->m_stipple = stipple; - - if (M_BRUSHDATA->m_stipple.GetMask()) - M_BRUSHDATA->m_style = wxSTIPPLE_MASK_OPAQUE; - else - M_BRUSHDATA->m_style = wxSTIPPLE; - - RealizeResource(); } -wxBrush::wxBrush( ThemeBrush macThemeBrush ) +wxBrush::wxBrush(const wxColour& col, wxBrushStyle style) { - m_refData = new wxBrushRefData; - - M_BRUSHDATA->m_macBrushKind = kwxMacBrushTheme; - M_BRUSHDATA->m_macThemeBrush = macThemeBrush; - - RealizeResource(); + m_refData = new wxBrushRefData( col, style ); } -void wxBrush::Unshare() +#if FUTURE_WXWIN_COMPATIBILITY_3_0 +wxBrush::wxBrush(const wxColour& col, int style) { - // Don't change shared data - if (!m_refData) - { - m_refData = new wxBrushRefData(); - } - else - { - wxBrushRefData* ref = new wxBrushRefData(*(wxBrushRefData*)m_refData); - UnRef(); - m_refData = ref; - } + m_refData = new wxBrushRefData(col, (wxBrushStyle)style); } +#endif -void wxBrush::SetColour(const wxColour& col) +wxBrush::wxBrush(const wxBitmap& stipple) { - Unshare(); - M_BRUSHDATA->m_macBrushKind = kwxMacBrushColour; - M_BRUSHDATA->m_colour = col; - - RealizeResource(); + m_refData = new wxBrushRefData( stipple ); } -void wxBrush::SetColour(unsigned char r, unsigned char g, unsigned char b) -{ - Unshare(); - - M_BRUSHDATA->m_macBrushKind = kwxMacBrushColour; - M_BRUSHDATA->m_colour.Set(r, g, b); - - RealizeResource(); -} +// ---------------------------------------------------------------------------- +// wxBrush house keeping stuff +// ---------------------------------------------------------------------------- -void wxBrush::SetStyle(int Style) +bool wxBrush::operator==(const wxBrush& brush) const { - Unshare(); - - M_BRUSHDATA->m_macBrushKind = kwxMacBrushColour; - M_BRUSHDATA->m_style = Style; + const wxBrushRefData *brushData = (wxBrushRefData *)brush.m_refData; - RealizeResource(); + // an invalid brush is considered to be only equal to another invalid brush + return m_refData ? (brushData && *M_BRUSHDATA == *brushData) : !brushData; } -void wxBrush::SetStipple(const wxBitmap& Stipple) +wxGDIRefData *wxBrush::CreateGDIRefData() const { - Unshare(); - - M_BRUSHDATA->m_macBrushKind = kwxMacBrushColour; - M_BRUSHDATA->m_stipple = Stipple; - - RealizeResource(); + return new wxBrushRefData; } -void wxBrush::MacSetTheme(ThemeBrush macThemeBrush) +wxGDIRefData *wxBrush::CloneGDIRefData(const wxGDIRefData *data) const { - Unshare(); + return new wxBrushRefData(*(const wxBrushRefData *)data); +} - M_BRUSHDATA->m_macBrushKind = kwxMacBrushTheme; - M_BRUSHDATA->m_macThemeBrush = macThemeBrush; +// ---------------------------------------------------------------------------- +// wxBrush accessors +// ---------------------------------------------------------------------------- - RGBColor color ; - GetThemeBrushAsColor( macThemeBrush , 32, true, &color ); - M_BRUSHDATA->m_colour.Set( color.red >> 8 , color.green >> 8 , color.blue >> 8 ); +const wxColour& wxBrush::GetColour() const +{ + wxCHECK_MSG( Ok(), wxNullColour, _T("invalid brush") ); - RealizeResource(); + return M_BRUSHDATA->GetColour(); } -void wxBrush::MacSetThemeBackground(unsigned long macThemeBackground, const WXRECTPTR extent) +wxBrushStyle wxBrush::GetStyle() const { - Unshare(); + wxCHECK_MSG( Ok(), wxBRUSHSTYLE_INVALID, _T("invalid brush") ); - M_BRUSHDATA->m_macBrushKind = kwxMacBrushThemeBackground; - M_BRUSHDATA->m_macThemeBackground = macThemeBackground; - M_BRUSHDATA->m_macThemeBackgroundExtent = *(Rect*)extent; - - RealizeResource(); + return M_BRUSHDATA->GetStyle(); } -bool wxBrush::RealizeResource() +wxBitmap *wxBrush::GetStipple() const { - return true; -} + wxCHECK_MSG( Ok(), NULL, _T("invalid brush") ); -unsigned long wxBrush::MacGetThemeBackground(WXRECTPTR extent) const -{ - if ( M_BRUSHDATA && M_BRUSHDATA->m_macBrushKind == kwxMacBrushThemeBackground ) - { - if ( extent ) - *(Rect*)extent = M_BRUSHDATA->m_macThemeBackgroundExtent; - - return M_BRUSHDATA->m_macThemeBackground; - } - else - { - return 0; - } + return M_BRUSHDATA->GetStipple(); } -short wxBrush::MacGetTheme() const -{ - return (M_BRUSHDATA ? ((M_BRUSHDATA->m_macBrushKind == kwxMacBrushTheme) ? M_BRUSHDATA->m_macThemeBrush : kThemeBrushBlack) : kThemeBrushBlack); -} +// ---------------------------------------------------------------------------- +// wxBrush setters +// ---------------------------------------------------------------------------- -wxColour& wxBrush::GetColour() const +void wxBrush::SetColour(const wxColour& col) { - return (M_BRUSHDATA ? M_BRUSHDATA->m_colour : wxNullColour); -} + AllocExclusive(); -int wxBrush::GetStyle() const -{ - return (M_BRUSHDATA ? M_BRUSHDATA->m_style : 0); + M_BRUSHDATA->SetColour(col); } -wxBitmap *wxBrush::GetStipple() const +void wxBrush::SetColour(unsigned char r, unsigned char g, unsigned char b) { - return (M_BRUSHDATA ? & M_BRUSHDATA->m_stipple : 0); + AllocExclusive(); + + M_BRUSHDATA->SetColour(wxColour(r, g, b)); } -wxMacBrushKind wxBrush::MacGetBrushKind() const +void wxBrush::SetStyle(wxBrushStyle style) { - return (M_BRUSHDATA ? M_BRUSHDATA->m_macBrushKind : kwxMacBrushColour); + AllocExclusive(); + + M_BRUSHDATA->SetStyle(style); } -bool wxBrush::operator == ( const wxBrush& brush ) const +void wxBrush::SetStipple(const wxBitmap& stipple) { - if (m_refData == brush.m_refData) return true; - - if (!m_refData || !brush.m_refData) return false; + AllocExclusive(); - return ( *(wxBrushRefData*)m_refData == *(wxBrushRefData*)brush.m_refData ); + M_BRUSHDATA->SetStipple(stipple); }