X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6f65e33794fca0c936227235515a40e7df5c56e3..520e470fdd0daef09c77938db642e4583933c90d:/src/msw/pen.cpp diff --git a/src/msw/pen.cpp b/src/msw/pen.cpp index 831cf96b01..ea9b92d667 100644 --- a/src/msw/pen.cpp +++ b/src/msw/pen.cpp @@ -38,7 +38,6 @@ IMPLEMENT_DYNAMIC_CLASS(wxPen, wxGDIObject) wxPenRefData::wxPenRefData(void) { -// m_stipple = NULL ; m_style = wxSOLID; m_width = 1; m_join = wxJOIN_ROUND ; @@ -48,6 +47,18 @@ wxPenRefData::wxPenRefData(void) m_hPen = 0; } +wxPenRefData::wxPenRefData(const wxPenRefData& data) +{ + m_style = data.m_style; + m_width = data.m_width; + m_join = data.m_join; + m_cap = data.m_cap; + m_nbDash = data.m_nbDash; + m_dash = data.m_dash; + m_colour = data.m_colour; + m_hPen = 0; +} + wxPenRefData::~wxPenRefData(void) { if ( m_hPen ) @@ -69,7 +80,7 @@ wxPen::~wxPen() } // Should implement Create -wxPen::wxPen(const wxColour& col, const int Width, const int Style) +wxPen::wxPen(const wxColour& col, int Width, int Style) { m_refData = new wxPenRefData; @@ -112,7 +123,7 @@ wxPen::wxPen(const wxColour& col, const int Width, const int Style) wxThePenList->AddPen(this); } -wxPen::wxPen(const wxBitmap& stipple, const int Width) +wxPen::wxPen(const wxBitmap& stipple, int Width) { m_refData = new wxPenRefData; @@ -132,7 +143,7 @@ wxPen::wxPen(const wxBitmap& stipple, const int Width) wxThePenList->AddPen(this); } -wxPen::wxPen(const wxString& col, const int Width, const int Style) +wxPen::wxPen(const wxString& col, int Width, int Style) { m_refData = new wxPenRefData; @@ -260,7 +271,7 @@ bool wxPen::RealizeResource(void) #else M_PENDATA->m_hPen = (WXHPEN) CreatePen(wx2msPenStyle(M_PENDATA->m_style), M_PENDATA->m_width, ms_colour); #endif -#ifdef DEBUG_CREATE +#ifdef WXDEBUG_CREATE if (M_PENDATA->m_hPen==0) wxError("Cannot create pen","Internal error") ; #endif @@ -288,123 +299,106 @@ bool wxPen::FreeResource(bool force) else return FALSE; } -/* -bool wxPen::UseResource(void) -{ - IncrementResourceUsage(); - return TRUE; -} - -bool wxPen::ReleaseResource(void) +bool wxPen::IsFree(void) { - DecrementResourceUsage(); - return TRUE; + return (M_PENDATA && M_PENDATA->m_hPen == 0); } -*/ -bool wxPen::IsFree(void) +void wxPen::Unshare() { - return (M_PENDATA && M_PENDATA->m_hPen == 0); + // Don't change shared data + if (!m_refData) + { + m_refData = new wxPenRefData(); + } + else + { + wxPenRefData* ref = new wxPenRefData(*(wxPenRefData*)m_refData); + UnRef(); + m_refData = ref; + } } void wxPen::SetColour(const wxColour& col) { - if ( !M_PENDATA ) - m_refData = new wxPenRefData; + Unshare(); - M_PENDATA->m_colour = col; + M_PENDATA->m_colour = col; - if (FreeResource()) RealizeResource(); } void wxPen::SetColour(const wxString& col) { - if ( !M_PENDATA ) - m_refData = new wxPenRefData; + Unshare(); - M_PENDATA->m_colour = col; + M_PENDATA->m_colour = col; - if (FreeResource()) RealizeResource(); } void wxPen::SetColour(const unsigned char r, const unsigned char g, const unsigned char b) { - if ( !M_PENDATA ) - m_refData = new wxPenRefData; + Unshare(); - M_PENDATA->m_colour.Set(r, g, b); + M_PENDATA->m_colour.Set(r, g, b); - if (FreeResource()) RealizeResource(); } -void wxPen::SetWidth(const int Width) +void wxPen::SetWidth(int Width) { - if ( !M_PENDATA ) - m_refData = new wxPenRefData; + Unshare(); - M_PENDATA->m_width = Width; + M_PENDATA->m_width = Width; - if (FreeResource()) RealizeResource(); } -void wxPen::SetStyle(const int Style) +void wxPen::SetStyle(int Style) { - if ( !M_PENDATA ) - m_refData = new wxPenRefData; + Unshare(); - M_PENDATA->m_style = Style; + M_PENDATA->m_style = Style; - if (FreeResource()) RealizeResource(); } void wxPen::SetStipple(const wxBitmap& Stipple) { - if ( !M_PENDATA ) - m_refData = new wxPenRefData; + Unshare(); - M_PENDATA->m_stipple = Stipple; - M_PENDATA->m_style = wxSTIPPLE; + M_PENDATA->m_stipple = Stipple; + M_PENDATA->m_style = wxSTIPPLE; - if (FreeResource()) RealizeResource(); } -void wxPen::SetDashes(const int nb_dashes, const wxDash *Dash) +void wxPen::SetDashes(int nb_dashes, const wxDash *Dash) { - if ( !M_PENDATA ) - m_refData = new wxPenRefData; + Unshare(); - M_PENDATA->m_nbDash = nb_dashes; - M_PENDATA->m_dash = (wxDash *)Dash; + M_PENDATA->m_nbDash = nb_dashes; + M_PENDATA->m_dash = (wxDash *)Dash; - if (FreeResource()) RealizeResource(); } -void wxPen::SetJoin(const int Join) +void wxPen::SetJoin(int Join) { - if ( !M_PENDATA ) - m_refData = new wxPenRefData; + Unshare(); - M_PENDATA->m_join = Join; + M_PENDATA->m_join = Join; - if (FreeResource()) RealizeResource(); } -void wxPen::SetCap(const int Cap) +void wxPen::SetCap(int Cap) { - if ( !M_PENDATA ) - m_refData = new wxPenRefData; + Unshare(); - M_PENDATA->m_cap = Cap; + M_PENDATA->m_cap = Cap; - if (FreeResource()) RealizeResource(); }