Implemented wxGDIObject::Create/CloneGDIRefData() for the relevant classes.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@51177 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Stefan Neis
2008-01-12 15:05:15 +00:00
parent a625c5b6c0
commit 4b3f61d14c
15 changed files with 196 additions and 147 deletions

View File

@@ -94,11 +94,6 @@ void wxBitmapRefData::Free()
// wxBitmap creation
// ----------------------------------------------------------------------------
wxGDIRefData* wxBitmap::CreateGDIRefData() const
{
return new wxBitmapRefData;
}
wxGDIRefData* wxBitmap::CloneGDIRefData(const wxGDIRefData* data) const
{
return new wxBitmapRefData(*wx_static_cast(const wxBitmapRefData *, data));

View File

@@ -234,40 +234,23 @@ bool wxBrush::IsFree() const
return (M_BRUSHDATA && (M_BRUSHDATA->m_hBrush == 0));
} // end of wxBrush::IsFree
void wxBrush::Unshare()
{
//
// Don't change shared data
//
if (!m_refData)
{
m_refData = new wxBrushRefData();
}
else
{
wxBrushRefData* ref = new wxBrushRefData(*(wxBrushRefData*)m_refData);
UnRef();
m_refData = ref;
}
} // end of wxBrush::Unshare
void wxBrush::SetColour( const wxColour& rColour )
{
Unshare();
AllocExclusive();
M_BRUSHDATA->m_vColour = rColour;
RealizeResource();
}
void wxBrush::SetColour(unsigned char cRed, unsigned char cGreen, unsigned char cBlue)
{
Unshare();
AllocExclusive();
M_BRUSHDATA->m_vColour.Set( cRed, cGreen, cBlue );
RealizeResource();
} // end of wxBrush::SetColour
void wxBrush::SetStyle(int nStyle)
{
Unshare();
AllocExclusive();
M_BRUSHDATA->m_nStyle = nStyle;
RealizeResource();
} // end of wxBrush::SetStyle
@@ -276,7 +259,7 @@ void wxBrush::SetStipple(
const wxBitmap& rStipple
)
{
Unshare();
AllocExclusive();
M_BRUSHDATA->m_vStipple = rStipple;
RealizeResource();
} // end of wxBrush::SetStipple
@@ -285,7 +268,7 @@ void wxBrush::SetPS(
HPS hPS
)
{
Unshare();
AllocExclusive();
if (M_BRUSHDATA->m_hBrush)
::GpiDestroyPS(M_BRUSHDATA->m_hBrush);
M_BRUSHDATA->m_hBrush = hPS;
@@ -304,3 +287,12 @@ bool wxBrush::operator == (
return ( *(wxBrushRefData*)m_refData == *(wxBrushRefData*)brush.m_refData );
} // end of wxBrush::operator ==
wxGDIRefData *wxBrush::CreateGDIRefData() const
{
return new wxBrushRefData;
}
wxGDIRefData *wxBrush::CloneGDIRefData(const wxGDIRefData *data) const
{
return new wxBrushRefData(*(const wxBrushRefData *)data);
}

View File

@@ -931,6 +931,16 @@ wxFont::~wxFont()
// here, but we may check that font definition is true
// ----------------------------------------------------------------------------
wxGDIRefData *wxFont::CreateGDIRefData() const
{
return new wxFontRefData();
}
wxGDIRefData *wxFont::CloneGDIRefData(const wxGDIRefData *data) const
{
return new wxFontRefData(*wx_static_cast(const wxFontRefData *, data));
}
bool wxFont::RealizeResource()
{
if ( GetResourceHandle() )
@@ -965,21 +975,6 @@ bool wxFont::IsFree() const
return M_FONTDATA && (M_FONTDATA->GetHFONT() == 0);
} // end of wxFont::IsFree
void wxFont::Unshare()
{
// Don't change shared data
if ( !m_refData )
{
m_refData = new wxFontRefData();
}
else
{
wxFontRefData* ref = new wxFontRefData(*M_FONTDATA);
UnRef();
m_refData = ref;
}
} // end of wxFont::Unshare
// ----------------------------------------------------------------------------
// change font attribute: we recreate font when doing it
// ----------------------------------------------------------------------------
@@ -988,7 +983,7 @@ void wxFont::SetPointSize(
int nPointSize
)
{
Unshare();
AllocExclusive();
M_FONTDATA->SetPointSize(nPointSize);
@@ -999,7 +994,7 @@ void wxFont::SetFamily(
int nFamily
)
{
Unshare();
AllocExclusive();
M_FONTDATA->SetFamily(nFamily);
@@ -1010,7 +1005,7 @@ void wxFont::SetStyle(
int nStyle
)
{
Unshare();
AllocExclusive();
M_FONTDATA->SetStyle(nStyle);
@@ -1021,7 +1016,7 @@ void wxFont::SetWeight(
int nWeight
)
{
Unshare();
AllocExclusive();
M_FONTDATA->SetWeight(nWeight);
@@ -1032,7 +1027,7 @@ bool wxFont::SetFaceName(
const wxString& rsFaceName
)
{
Unshare();
AllocExclusive();
bool refdataok = M_FONTDATA->SetFaceName(rsFaceName);
@@ -1045,7 +1040,7 @@ void wxFont::SetUnderlined(
bool bUnderlined
)
{
Unshare();
AllocExclusive();
M_FONTDATA->SetUnderlined(bUnderlined);
@@ -1056,7 +1051,7 @@ void wxFont::SetEncoding(
wxFontEncoding vEncoding
)
{
Unshare();
AllocExclusive();
M_FONTDATA->SetEncoding(vEncoding);
@@ -1067,7 +1062,7 @@ void wxFont::DoSetNativeFontInfo(
const wxNativeFontInfo& rInfo
)
{
Unshare();
AllocExclusive();
FreeResource();
@@ -1147,7 +1142,7 @@ void wxFont::SetFM( PFONTMETRICS pFM, int nNumFonts )
void wxFont::SetPS( HPS hPS )
{
Unshare();
AllocExclusive();
M_FONTDATA->SetPS(hPS);

View File

@@ -66,6 +66,16 @@ wxMetafile::~wxMetafile(void)
{
}
wxGDIRefData *wxMetafile::CreateGDIRefData() const
{
return new wxMetafileRefData;
}
wxGDIRefData *wxMetafile::CloneGDIRefData(const wxGDIRefData *data) const
{
return new wxMetafileRefData(*wx_static_cast(const wxMetafileRefData *, data));
}
bool wxMetafile::SetClipboard(int width, int height)
{
#if !wxUSE_CLIPBOARD
@@ -122,7 +132,8 @@ void wxMetafile::SetWindowsMappingMode(int mm)
// Original constructor that does not takes origin and extent. If you use this,
// *DO* give origin/extent arguments to wxMakeMetafilePlaceable.
wxMetafileDC::wxMetafileDC(const wxString& file)
wxMetafileDCImpl::wxMetafileDCImpl(wxDC *owner, const wxString& file)
: wxPMDCImpl(owner)
{
m_metaFile = NULL;
m_minX = 10000;
@@ -152,11 +163,12 @@ wxMetafileDC::wxMetafileDC(const wxString& file)
// New constructor that takes origin and extent. If you use this, don't
// give origin/extent arguments to wxMakeMetafilePlaceable.
wxMetafileDC::wxMetafileDC( const wxString& file,
int WXUNUSED(xext),
int WXUNUSED(yext),
int WXUNUSED(xorg),
int WXUNUSED(yorg) )
wxMetafileDCImpl::wxMetafileDCImpl( wxDC *owner, const wxString& file,
int WXUNUSED(xext),
int WXUNUSED(yext),
int WXUNUSED(xorg),
int WXUNUSED(yorg) )
: wxPMDCImpl(owner)
{
m_minX = 10000;
m_minY = 10000;
@@ -178,18 +190,17 @@ wxMetafileDC::wxMetafileDC( const wxString& file,
SetMapMode(wxMM_TEXT); // NOTE: does not set HDC mapmode (this is correct)
}
wxMetafileDC::~wxMetafileDC(void)
wxMetafileDCImpl::~wxMetafileDCImpl(void)
{
m_hDC = 0;
}
void wxMetafileDC::GetTextExtent(const wxString& WXUNUSED(string),
long *WXUNUSED(x),
long *WXUNUSED(y),
long *WXUNUSED(descent),
long *WXUNUSED(externalLeading),
const wxFont *theFont,
bool WXUNUSED(use16bit) ) const
void wxMetafileDCImpl::DoGetTextExtent(const wxString& WXUNUSED(string),
wxCoord *WXUNUSED(x),
wxCoord *WXUNUSED(y),
wxCoord *WXUNUSED(descent),
wxCoord *WXUNUSED(externalLeading),
const wxFont *theFont) const
{
const wxFont *fontToUse = theFont;
if (!fontToUse)
@@ -217,7 +228,7 @@ void wxMetafileDC::GetTextExtent(const wxString& WXUNUSED(string),
*/
}
wxMetafile *wxMetafileDC::Close(void)
wxMetafile *wxMetafileDCImpl::Close(void)
{
SelectOldObjects(m_hDC);
HANDLE mf = 0; // TODO: CloseMetaFile((HDC) m_hDC);
@@ -232,7 +243,7 @@ wxMetafile *wxMetafileDC::Close(void)
return NULL;
}
void wxMetafileDC::SetMapMode(int mode)
void wxMetafileDCImpl::SetMapMode(int mode)
{
m_mappingMode = mode;

View File

@@ -104,6 +104,16 @@ bool wxPalette::Create( int n,
return true;
} // end of wxPalette::Create
wxGDIRefData *wxPalette::CreateGDIRefData() const
{
return new wxPaletteRefData;
}
wxGDIRefData *wxPalette::CloneGDIRefData(const wxGDIRefData *data) const
{
return new wxPaletteRefData(*wx_static_cast(const wxPaletteRefData *, data));
}
int wxPalette::GetPixel( unsigned char cRed,
unsigned char cGreen,
unsigned char cBlue) const

View File

@@ -327,38 +327,33 @@ bool wxPen::IsFree() const
return (M_PENDATA && M_PENDATA->m_hPen == 0);
}
void wxPen::Unshare()
wxGDIRefData* wxPen::CreateGDIRefData() const
{
// Don't change shared data
if (!m_refData)
{
m_refData = new wxPenRefData();
}
else
{
wxPenRefData* ref = new wxPenRefData(*(wxPenRefData*)m_refData);
UnRef();
m_refData = ref;
}
} // end of wxPen::Unshare
return new wxPenRefData;
}
wxGDIRefData* wxPen::CloneGDIRefData(const wxGDIRefData* data) const
{
return new wxPenRefData(*wx_static_cast(const wxPenRefData*, data));
}
void wxPen::SetColour( const wxColour& rColour )
{
Unshare();
AllocExclusive();
M_PENDATA->m_vColour = rColour;
RealizeResource();
} // end of wxPen::SetColour
void wxPen::SetColour( unsigned char cRed, unsigned char cGreen, unsigned char cBlue)
{
Unshare();
AllocExclusive();
M_PENDATA->m_vColour.Set(cRed, cGreen, cBlue);
RealizeResource();
} // end of wxPen::SetColour
void wxPen::SetPS( HPS hPS )
{
Unshare();
AllocExclusive();
if (M_PENDATA->m_hPen)
::GpiDestroyPS(M_PENDATA->m_hPen);
M_PENDATA->m_hPen = hPS;
@@ -369,7 +364,7 @@ void wxPen::SetWidth(
int nWidth
)
{
Unshare();
AllocExclusive();
M_PENDATA->m_nWidth = nWidth;
RealizeResource();
} // end of wxPen::SetWidth
@@ -378,7 +373,7 @@ void wxPen::SetStyle(
int nStyle
)
{
Unshare();
AllocExclusive();
M_PENDATA->m_nStyle = nStyle;
RealizeResource();
} // end of wxPen::SetStyle
@@ -387,7 +382,7 @@ void wxPen::SetStipple(
const wxBitmap& rStipple
)
{
Unshare();
AllocExclusive();
M_PENDATA->m_vStipple = rStipple;
M_PENDATA->m_nStyle = wxSTIPPLE;
RealizeResource();
@@ -405,7 +400,7 @@ void wxPen::SetJoin(
int nJoin
)
{
Unshare();
AllocExclusive();
M_PENDATA->m_nJoin = nJoin;
RealizeResource();
} // end of wxPen::SetJoin
@@ -414,7 +409,7 @@ void wxPen::SetCap(
int nCap
)
{
Unshare();
AllocExclusive();
M_PENDATA->m_nCap = nCap;
RealizeResource();
} // end of wxPen::SetCap

View File

@@ -233,12 +233,12 @@ wxRegion::~wxRegion()
{
} // end of wxRegion::~wxRegion
wxGDIRefData *wxRegion::CreateData() const
wxGDIRefData *wxRegion::CreateGDIRefData() const
{
return new wxRegionRefData;
}
wxGDIRefData *wxRegion::CloneData(const wxGDIRefData *data) const
wxGDIRefData *wxRegion::CloneGDIRefData(const wxGDIRefData *data) const
{
return new wxRegionRefData(*(wxRegionRefData *)data);
}