X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e9576ca53db96b462ed4c0b4bdf47d64c40203e4..82c126e50158efee5a1f46e1200be380c5199f8d:/src/mac/carbon/brush.cpp diff --git a/src/mac/carbon/brush.cpp b/src/mac/carbon/brush.cpp index 4f28e92f53..876415261f 100644 --- a/src/mac/carbon/brush.cpp +++ b/src/mac/carbon/brush.cpp @@ -1,140 +1,185 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: brush.cpp +// Name: src/mac/carbon/brush.cpp // Purpose: wxBrush -// Author: AUTHOR +// Author: Stefan Csomor // Modified by: -// Created: ??/??/98 +// Created: 1998-01-01 // RCS-ID: $Id$ -// Copyright: (c) AUTHOR -// Licence: wxWindows licence +// Copyright: (c) Stefan Csomor +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ -#pragma implementation "brush.h" -#endif +#include "wx/wxprec.h" -#include "wx/setup.h" -#include "wx/utils.h" #include "wx/brush.h" -#if !USE_SHARED_LIBRARIES -IMPLEMENT_DYNAMIC_CLASS(wxBrush, wxGDIObject) +#ifndef WX_PRECOMP + #include "wx/utils.h" #endif -wxBrushRefData::wxBrushRefData() +#include "wx/mac/private.h" + +IMPLEMENT_DYNAMIC_CLASS(wxBrush, wxGDIObject) + +class WXDLLEXPORT wxBrushRefData: public wxGDIRefData +{ +public: + wxBrushRefData(const wxColour& colour = wxNullColour, int style = wxSOLID); + wxBrushRefData(const wxBitmap& stipple); + wxBrushRefData(const wxBrushRefData& data); + virtual ~wxBrushRefData(); + + bool operator==(const wxBrushRefData& data) const; + + const wxColour& GetColour() const { return m_colour; } + int GetStyle() const { return m_style; } + wxBitmap *GetStipple() { return &m_stipple; } + + void SetColour(const wxColour& colour) { m_colour = colour; } + void SetStyle(int style) { m_style = style; } + void SetStipple(const wxBitmap& stipple) { DoSetStipple(stipple); } + +protected: + void DoSetStipple(const wxBitmap& stipple); + + wxBitmap m_stipple ; + wxColour m_colour; + int m_style; +}; + +#define M_BRUSHDATA ((wxBrushRefData *)m_refData) + +wxBrushRefData::wxBrushRefData(const wxColour& colour, int style) + : m_colour(colour), m_style( style ) +{ +} + +wxBrushRefData::wxBrushRefData(const wxBitmap& stipple) { - m_style = wxSOLID; -// TODO: null data + DoSetStipple( stipple ); } wxBrushRefData::wxBrushRefData(const wxBrushRefData& data) + : wxGDIRefData() , + m_stipple(data.m_stipple), + m_colour(data.m_colour), + m_style(data.m_style) { - m_style = data.m_style; - m_stipple = data.m_stipple; - m_colour = data.m_colour; -/* TODO: null data - m_hBrush = 0; -*/ } wxBrushRefData::~wxBrushRefData() { -// TODO: delete data } -// Brushes -wxBrush::wxBrush() +bool wxBrushRefData::operator==(const wxBrushRefData& data) const { - if ( wxTheBrushList ) - wxTheBrushList->AddBrush(this); + 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) { - if ( wxTheBrushList ) - wxTheBrushList->RemoveBrush(this); + m_stipple = stipple; + m_style = stipple.GetMask() ? wxSTIPPLE_MASK_OPAQUE : wxSTIPPLE; } +// +// +// -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() +{ +} - if ( wxTheBrushList ) - wxTheBrushList->AddBrush(this); +wxBrush::wxBrush(const wxColour& col, int style) +{ + m_refData = new wxBrushRefData( col, style ); } wxBrush::wxBrush(const wxBitmap& stipple) { - m_refData = new wxBrushRefData; - - M_BRUSHDATA->m_style = wxSTIPPLE; - M_BRUSHDATA->m_stipple = stipple; + m_refData = new wxBrushRefData( stipple ); +} - RealizeResource(); +// ---------------------------------------------------------------------------- +// wxBrush house keeping stuff +// ---------------------------------------------------------------------------- - if ( wxTheBrushList ) - wxTheBrushList->AddBrush(this); +bool wxBrush::operator==(const wxBrush& brush) const +{ + const wxBrushRefData *brushData = (wxBrushRefData *)brush.m_refData; + + // an invalid brush is considered to be only equal to another invalid brush + return m_refData ? (brushData && *M_BRUSHDATA == *brushData) : !brushData; } -void wxBrush::Unshare() +wxObjectRefData *wxBrush::CreateRefData() const { - // Don't change shared data - if (!m_refData) - { - m_refData = new wxBrushRefData(); - } - else - { - wxBrushRefData* ref = new wxBrushRefData(*(wxBrushRefData*)m_refData); - UnRef(); - m_refData = ref; - } + return new wxBrushRefData; } -void wxBrush::SetColour(const wxColour& col) +wxObjectRefData *wxBrush::CloneRefData(const wxObjectRefData *data) const { - Unshare(); + return new wxBrushRefData(*(const wxBrushRefData *)data); +} - M_BRUSHDATA->m_colour = col; +// ---------------------------------------------------------------------------- +// wxBrush accessors +// ---------------------------------------------------------------------------- - RealizeResource(); +const wxColour& wxBrush::GetColour() const +{ + wxCHECK_MSG( Ok(), wxNullColour, _T("invalid brush") ); + + return M_BRUSHDATA->GetColour(); } -void wxBrush::SetColour(unsigned char r, unsigned char g, unsigned char b) +int wxBrush::GetStyle() const { - Unshare(); - - M_BRUSHDATA->m_colour.Set(r, g, b); - - RealizeResource(); + wxCHECK_MSG( Ok(), 0, _T("invalid brush") ); + + return M_BRUSHDATA->GetStyle(); } -void wxBrush::SetStyle(int Style) +wxBitmap *wxBrush::GetStipple() const { - Unshare(); + wxCHECK_MSG( Ok(), NULL, _T("invalid brush") ); + + return M_BRUSHDATA->GetStipple(); +} - M_BRUSHDATA->m_style = Style; +// ---------------------------------------------------------------------------- +// wxBrush setters +// ---------------------------------------------------------------------------- - RealizeResource(); +void wxBrush::SetColour(const wxColour& col) +{ + AllocExclusive(); + + M_BRUSHDATA->SetColour(col); } -void wxBrush::SetStipple(const wxBitmap& Stipple) +void wxBrush::SetColour(unsigned char r, unsigned char g, unsigned char b) { - Unshare(); - - M_BRUSHDATA->m_stipple = Stipple; - - RealizeResource(); + AllocExclusive(); + + M_BRUSHDATA->SetColour(wxColour(r, g, b)); } -bool wxBrush::RealizeResource() +void wxBrush::SetStyle(int style) { -// TODO: create the brush - return FALSE; + AllocExclusive(); + + M_BRUSHDATA->SetStyle(style); } +void wxBrush::SetStipple(const wxBitmap& stipple) +{ + AllocExclusive(); + + M_BRUSHDATA->SetStipple(stipple); +}