X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2bda0e173844e8e0f8acf4e8ad8b5c26e5c6fe5d..0ded6bb695f82a0b98d0862ec6870fc5c6cb8b97:/src/msw/brush.cpp?ds=sidebyside diff --git a/src/msw/brush.cpp b/src/msw/brush.cpp index 2b34ed2f23..66206940e6 100644 --- a/src/msw/brush.cpp +++ b/src/msw/brush.cpp @@ -33,14 +33,19 @@ #include "assert.h" -#if !USE_SHARED_LIBRARIES IMPLEMENT_DYNAMIC_CLASS(wxBrush, wxGDIObject) -#endif wxBrushRefData::wxBrushRefData(void) { m_style = wxSOLID; -// m_stipple = NULL ; + m_hBrush = 0; +} + +wxBrushRefData::wxBrushRefData(const wxBrushRefData& data) +{ + m_style = data.m_style; + m_stipple = data.m_stipple; + m_colour = data.m_colour; m_hBrush = 0; } @@ -53,17 +58,13 @@ wxBrushRefData::~wxBrushRefData(void) // Brushes wxBrush::wxBrush(void) { - if ( wxTheBrushList ) - wxTheBrushList->AddBrush(this); } wxBrush::~wxBrush() { - if (wxTheBrushList) - wxTheBrushList->RemoveBrush(this); } -wxBrush::wxBrush(const wxColour& col, const int Style) +wxBrush::wxBrush(const wxColour& col, int Style) { m_refData = new wxBrushRefData; @@ -73,39 +74,25 @@ wxBrush::wxBrush(const wxColour& col, const int Style) RealizeResource(); - if ( wxTheBrushList ) - wxTheBrushList->AddBrush(this); -} - -wxBrush::wxBrush(const wxString& col, const int Style) -{ - m_refData = new wxBrushRefData; - - M_BRUSHDATA->m_colour = col; - M_BRUSHDATA->m_style = Style; - M_BRUSHDATA->m_hBrush = 0; - - RealizeResource(); - - if ( wxTheBrushList ) - wxTheBrushList->AddBrush(this); } wxBrush::wxBrush(const wxBitmap& stipple) { m_refData = new wxBrushRefData; - M_BRUSHDATA->m_style = wxSTIPPLE; M_BRUSHDATA->m_stipple = stipple; + if (M_BRUSHDATA->m_stipple.GetMask()) + M_BRUSHDATA->m_style = wxSTIPPLE_MASK_OPAQUE; + else + M_BRUSHDATA->m_style = wxSTIPPLE; + M_BRUSHDATA->m_hBrush = 0; RealizeResource(); - if ( wxTheBrushList ) - wxTheBrushList->AddBrush(this); } -bool wxBrush::RealizeResource(void) +bool wxBrush::RealizeResource(void) { if (M_BRUSHDATA && (M_BRUSHDATA->m_hBrush == 0)) { @@ -132,6 +119,7 @@ bool wxBrush::RealizeResource(void) // - could choose white always for a quick solution break; ***/ +#ifndef __WXMICROWIN__ case wxBDIAGONAL_HATCH: M_BRUSHDATA->m_hBrush = (WXHBRUSH) CreateHatchBrush(HS_BDIAGONAL,ms_colour) ; break ; @@ -156,12 +144,19 @@ bool wxBrush::RealizeResource(void) else M_BRUSHDATA->m_hBrush = (WXHBRUSH) CreateSolidBrush(ms_colour) ; break ; + case wxSTIPPLE_MASK_OPAQUE: + if (M_BRUSHDATA->m_stipple.Ok() && M_BRUSHDATA->m_stipple.GetMask()) + M_BRUSHDATA->m_hBrush = (WXHBRUSH) CreatePatternBrush((HBITMAP) M_BRUSHDATA->m_stipple.GetMask()->GetMaskBitmap()); + else + M_BRUSHDATA->m_hBrush = (WXHBRUSH) CreateSolidBrush(ms_colour) ; + break ; +#endif case wxSOLID: default: M_BRUSHDATA->m_hBrush = (WXHBRUSH) CreateSolidBrush(ms_colour) ; break; } -#ifdef DEBUG_CREATE +#ifdef WXDEBUG_CREATE if (M_BRUSHDATA->m_hBrush==NULL) wxError("Cannot create brush","Internal error") ; #endif return TRUE; @@ -175,7 +170,7 @@ WXHANDLE wxBrush::GetResourceHandle(void) return (WXHANDLE) M_BRUSHDATA->m_hBrush; } -bool wxBrush::FreeResource(bool force) +bool wxBrush::FreeResource(bool WXUNUSED(force)) { if (M_BRUSHDATA && (M_BRUSHDATA->m_hBrush != 0)) { @@ -186,77 +181,64 @@ bool wxBrush::FreeResource(bool force) else return FALSE; } -/* -bool wxBrush::UseResource(void) +bool wxBrush::IsFree() const { - IncrementResourceUsage(); - return TRUE; + return (M_BRUSHDATA && (M_BRUSHDATA->m_hBrush == 0)); } -bool wxBrush::ReleaseResource(void) +void wxBrush::Unshare() { - DecrementResourceUsage(); - return TRUE; + // Don't change shared data + if (!m_refData) + { + m_refData = new wxBrushRefData(); + } + else + { + wxBrushRefData* ref = new wxBrushRefData(*(wxBrushRefData*)m_refData); + UnRef(); + m_refData = ref; + } } -*/ -bool wxBrush::IsFree(void) -{ - return (M_BRUSHDATA && (M_BRUSHDATA->m_hBrush == 0)); -} void wxBrush::SetColour(const wxColour& col) { - if ( !M_BRUSHDATA ) - m_refData = new wxBrushRefData; + Unshare(); - M_BRUSHDATA->m_colour = col; + M_BRUSHDATA->m_colour = col; - if (FreeResource()) RealizeResource(); } -void wxBrush::SetColour(const wxString& col) +void wxBrush::SetColour(unsigned char r, unsigned char g, unsigned char b) { - if ( !M_BRUSHDATA ) - m_refData = new wxBrushRefData; + Unshare(); - M_BRUSHDATA->m_colour = col; + M_BRUSHDATA->m_colour.Set(r, g, b); - if (FreeResource()) RealizeResource(); } -void wxBrush::SetColour(const unsigned char r, const unsigned char g, const unsigned char b) +void wxBrush::SetStyle(int Style) { - if ( !M_BRUSHDATA ) - m_refData = new wxBrushRefData; - - M_BRUSHDATA->m_colour.Set(r, g, b); + Unshare(); - if (FreeResource()) - RealizeResource(); -} - -void wxBrush::SetStyle(const int Style) -{ - if ( !M_BRUSHDATA ) - m_refData = new wxBrushRefData; - - M_BRUSHDATA->m_style = Style; + M_BRUSHDATA->m_style = Style; - if (FreeResource()) RealizeResource(); } void wxBrush::SetStipple(const wxBitmap& Stipple) { - if ( !M_BRUSHDATA ) - m_refData = new wxBrushRefData; + Unshare(); - M_BRUSHDATA->m_stipple = Stipple; + M_BRUSHDATA->m_stipple = Stipple; + if (M_BRUSHDATA->m_stipple.GetMask()) + M_BRUSHDATA->m_style = wxSTIPPLE_MASK_OPAQUE; + else + M_BRUSHDATA->m_style = wxSTIPPLE; - if (FreeResource()) RealizeResource(); }