#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;
}
wxTheBrushList->RemoveBrush(this);
}
-wxBrush::wxBrush(const wxColour& 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 wxString& col, const int Style)
+wxBrush::wxBrush(const wxColour& col, int Style)
{
m_refData = new wxBrushRefData;
{
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();
wxTheBrushList->AddBrush(this);
}
-bool wxBrush::RealizeResource(void)
+bool wxBrush::RealizeResource(void)
{
if (M_BRUSHDATA && (M_BRUSHDATA->m_hBrush == 0))
{
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 ;
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;
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))
{
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();
}