bool CreateFromImage(const wxImage& image, int depth);
- virtual wxGDIRefData *CreateGDIRefData() const;
virtual wxGDIRefData *CloneGDIRefData(const wxGDIRefData *data) const;
private:
private:
inline virtual bool Load( wxGDIImage* WXUNUSED(pImage)
,const wxString& WXUNUSED(rName)
- ,HPS WXUNUSED(hPs)
+ ,WXHANDLE WXUNUSED(hPs)
,long WXUNUSED(lFlags)
,int WXUNUSED(nDesiredWidth)
,int WXUNUSED(nDesiredHeight)
// Brush
class WXDLLEXPORT wxBrush: public wxBrushBase
{
- DECLARE_DYNAMIC_CLASS(wxBrush)
-
public:
wxBrush();
wxBrush(const wxColour& rCol, int nStyle = wxSOLID);
virtual WXHANDLE GetResourceHandle(void) const;
bool FreeResource(bool bForce = false);
bool IsFree(void) const;
- void Unshare(void);
+
+protected:
+ virtual wxGDIRefData *CreateGDIRefData() const;
+ virtual wxGDIRefData *CloneGDIRefData(const wxGDIRefData *data) const;
+
+private:
+ DECLARE_DYNAMIC_CLASS(wxBrush)
}; // end of CLASS wxBrush
#endif
protected:
virtual void DoSetNativeFontInfo(const wxNativeFontInfo& rInfo);
- void Unshare(void);
+ // implement wxObject virtuals which are used by AllocExclusive()
+ virtual wxGDIRefData *CreateGDIRefData() const;
+ virtual wxGDIRefData *CloneGDIRefData(const wxGDIRefData *data) const;
private:
DECLARE_DYNAMIC_CLASS(wxFont)
WXHCURSOR m_hCursor;
};
- UINT m_uId;
+ unsigned int m_uId;
};
// ----------------------------------------------------------------------------
}
void SetSize(const wxSize& rSize) { SetSize(rSize.x, rSize.y); }
- UINT GetId(void) const
+ unsigned int GetId(void) const
{
wxGDIImageRefData* pData;
else
return pData->m_uId;
} // end of WxWinGdi_CGDIImage::GetId
- void SetId(UINT uId)
+ void SetId(unsigned int uId)
{
wxGDIImageRefData* pData;
virtual wxGDIImageRefData* CreateData() const = 0;
virtual wxGDIRefData *CreateGDIRefData() const { return CreateData(); }
+ // we can't [efficiently] clone objects of this class
+ virtual wxGDIRefData *
+ CloneGDIRefData(const wxGDIRefData *WXUNUSED(data)) const
+ {
+ wxFAIL_MSG( _T("must be implemented if used") );
+
+ return NULL;
+ }
+
static wxGDIImageHandlerList ms_handlers;
};
#include "wx/dc.h"
#include "wx/gdiobj.h"
+#include "wx/os2/dc.h"
#if wxUSE_DRAG_AND_DROP
#include "wx/dataobj.h"
void SetHMETAFILE(WXHANDLE mf) ;
inline int GetWindowsMappingMode(void) { return M_METAFILEDATA->m_windowsMappingMode; }
void SetWindowsMappingMode(int mm);
+
+protected:
+ virtual wxGDIRefData *CreateGDIRefData() const;
+ virtual wxGDIRefData *CloneGDIRefData(const wxGDIRefData *data) const;
};
-class WXDLLEXPORT wxMetafileDC: public wxDC
+class WXDLLEXPORT wxMetafileDCImpl: public wxPMDCImpl
{
- DECLARE_DYNAMIC_CLASS(wxMetafileDC)
+public:
+ wxMetafileDCImpl(wxDC *owner, const wxString& file = wxEmptyString);
+ wxMetafileDCImpl(wxDC *owner, const wxString& file,
+ int xext, int yext, int xorg, int yorg);
+ virtual ~wxMetafileDCImpl();
+
+ virtual wxMetafile *Close();
+ virtual void SetMapMode(int mode);
+ virtual void DoGetTextExtent(const wxString& string,
+ wxCoord *x, wxCoord *y,
+ wxCoord *descent = NULL,
+ wxCoord *externalLeading = NULL,
+ const wxFont *theFont = NULL) const;
+
+ // Implementation
+ wxMetafile *GetMetaFile() const { return m_metaFile; }
+ void SetMetaFile(wxMetafile *mf) { m_metaFile = mf; }
+ int GetWindowsMappingMode() const { return m_windowsMappingMode; }
+ void SetWindowsMappingMode(int mm) { m_windowsMappingMode = mm; }
+
+protected:
+ virtual void DoGetSize(int *width, int *height) const;
+
+ int m_windowsMappingMode;
+ wxMetafile* m_metaFile;
+private:
+ DECLARE_CLASS(wxMetafileDCImpl)
+ DECLARE_NO_COPY_CLASS(wxMetafileDCImpl)
+};
+
+class WXDLLEXPORT wxMetafileDC: public wxDC
+{
public:
// Don't supply origin and extent
// Supply them to wxMakeMetaFilePlaceable instead.
- wxMetafileDC(const wxString& file = wxEmptyString);
+ wxMetafileDC(const wxString& file = wxEmptyString)
+ :wxDC(new wxMetafileDCImpl( this, file ))
+ { }
// Supply origin and extent (recommended).
// Then don't need to supply them to wxMakeMetaFilePlaceable.
- wxMetafileDC(const wxString& file, int xext, int yext, int xorg, int yorg);
+ wxMetafileDC(const wxString& file, int xext, int yext, int xorg, int yorg)
+ : wxDC(new wxMetafileDCImpl( this, file, xext, yext, xorg, yorg ))
+ { }
- virtual ~wxMetafileDC(void);
+ wxMetafile *GetMetafile() const
+ { return ((wxMetafileDCImpl*)m_pimpl)->GetMetaFile(); }
- // Should be called at end of drawing
- virtual wxMetafile *Close(void);
- virtual void SetMapMode(int mode);
- virtual void GetTextExtent(const wxString& string, long *x, long *y,
- long *descent = NULL, long *externalLeading = NULL,
- const wxFont *theFont = NULL, bool use16bit = false) const;
+ virtual ~wxMetafileDC(void)
+ { delete m_pimpl; }
- // Implementation
- inline wxMetafile *GetMetaFile(void) const { return m_metaFile; }
- inline void SetMetaFile(wxMetafile *mf) { m_metaFile = mf; }
- inline int GetWindowsMappingMode(void) const { return m_windowsMappingMode; }
- inline void SetWindowsMappingMode(int mm) { m_windowsMappingMode = mm; }
+ // Should be called at end of drawing
+ virtual wxMetafile *Close(void)
+ { return ((wxMetafileDCImpl*)m_pimpl)->Close(); }
-protected:
- int m_windowsMappingMode;
- wxMetafile* m_metaFile;
+ inline void SetMetaFile(wxMetafile *mf)
+ { ((wxMetafileDCImpl*)m_pimpl)->SetMetaFile(mf); }
private:
-#ifndef __WATCOMC__
- // function hiding warning supression
- // still required ??
- inline virtual void GetTextExtent( const wxString& string
- ,long* width
- ,long* height
- ,long* descent = NULL
- ,long* externalLeading = NULL
- ,wxFont* theFont = NULL
- ) const
- { GetTextExtent( string, width, height, descent, externalLeading, theFont, false);};
-#endif
+ DECLARE_CLASS(wxMetafileDC)
+ DECLARE_NO_COPY_CLASS(wxMetafileDC)
};
/*
class WXDLLEXPORT wxPalette: public wxPaletteBase
{
- DECLARE_DYNAMIC_CLASS(wxPalette)
-
public:
wxPalette();
inline WXHPALETTE GetHPALETTE(void) const { return (M_PALETTEDATA ? M_PALETTEDATA->m_hPalette : 0); }
void SetHPALETTE(WXHPALETTE hPalette);
void SetPS(HPS hPS);
+
+protected:
+ virtual wxGDIRefData *CreateGDIRefData() const;
+ virtual wxGDIRefData *CloneGDIRefData(const wxGDIRefData *data) const;
+
+private:
+ DECLARE_DYNAMIC_CLASS(wxPalette)
}; // end of CLASS wxPalette
#endif
// Pen
class WXDLLEXPORT wxPen : public wxGDIObject
{
- DECLARE_DYNAMIC_CLASS(wxPen)
public:
wxPen();
wxPen( const wxColour& rColour
bool FreeResource(bool bForce = false);
virtual WXHANDLE GetResourceHandle(void) const;
bool IsFree(void) const;
- void Unshare(void);
private:
LINEBUNDLE m_vLineBundle;
AREABUNDLE m_vAreaBundle;
+
+protected:
+ virtual wxGDIRefData* CreateGDIRefData() const;
+ virtual wxGDIRefData* CloneGDIRefData(const wxGDIRefData* data) const;
+
+ // same as FreeResource() + RealizeResource()
+ bool Recreate();
+
+ DECLARE_DYNAMIC_CLASS(wxPen)
}; // end of CLASS wxPen
extern int wx2os2PenStyle(int nWxStyle);
void SetPS(HPS hPS);
protected:
- virtual wxGDIRefData* CreateData(void) const;
- virtual wxGDIRefData* CloneData(const wxGDIRefData* pData) const;
+ virtual wxGDIRefData* CreateGDIRefData(void) const;
+ virtual wxGDIRefData* CloneGDIRefData(const wxGDIRefData* pData) const;
virtual bool DoIsEqual(const wxRegion& region) const;
virtual bool DoGetBox(wxCoord& x, wxCoord& y, wxCoord& w, wxCoord& h) const;
class WXDLLEXPORT wxRegionIterator : public wxObject
{
-DECLARE_DYNAMIC_CLASS(wxRegionIterator);
public:
wxRegionIterator();
wxRegionIterator(const wxRegion& rRegion);
long m_lNumRects;
wxRegion m_vRegion;
wxRect* m_pRects;
+
+ DECLARE_DYNAMIC_CLASS(wxRegionIterator)
}; // end of wxRegionIterator
#endif // _WX_OS2_REGION_H_
// 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));
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
const wxBitmap& rStipple
)
{
- Unshare();
+ AllocExclusive();
M_BRUSHDATA->m_vStipple = rStipple;
RealizeResource();
} // end of wxBrush::SetStipple
HPS hPS
)
{
- Unshare();
+ AllocExclusive();
if (M_BRUSHDATA->m_hBrush)
::GpiDestroyPS(M_BRUSHDATA->m_hBrush);
M_BRUSHDATA->m_hBrush = hPS;
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);
+}
// 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() )
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
// ----------------------------------------------------------------------------
int nPointSize
)
{
- Unshare();
+ AllocExclusive();
M_FONTDATA->SetPointSize(nPointSize);
int nFamily
)
{
- Unshare();
+ AllocExclusive();
M_FONTDATA->SetFamily(nFamily);
int nStyle
)
{
- Unshare();
+ AllocExclusive();
M_FONTDATA->SetStyle(nStyle);
int nWeight
)
{
- Unshare();
+ AllocExclusive();
M_FONTDATA->SetWeight(nWeight);
const wxString& rsFaceName
)
{
- Unshare();
+ AllocExclusive();
bool refdataok = M_FONTDATA->SetFaceName(rsFaceName);
bool bUnderlined
)
{
- Unshare();
+ AllocExclusive();
M_FONTDATA->SetUnderlined(bUnderlined);
wxFontEncoding vEncoding
)
{
- Unshare();
+ AllocExclusive();
M_FONTDATA->SetEncoding(vEncoding);
const wxNativeFontInfo& rInfo
)
{
- Unshare();
+ AllocExclusive();
FreeResource();
void wxFont::SetPS( HPS hPS )
{
- Unshare();
+ AllocExclusive();
M_FONTDATA->SetPS(hPS);
{
}
+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
// 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;
// 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;
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)
*/
}
-wxMetafile *wxMetafileDC::Close(void)
+wxMetafile *wxMetafileDCImpl::Close(void)
{
SelectOldObjects(m_hDC);
HANDLE mf = 0; // TODO: CloseMetaFile((HDC) m_hDC);
return NULL;
}
-void wxMetafileDC::SetMapMode(int mode)
+void wxMetafileDCImpl::SetMapMode(int mode)
{
m_mappingMode = mode;
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
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;
int nWidth
)
{
- Unshare();
+ AllocExclusive();
M_PENDATA->m_nWidth = nWidth;
RealizeResource();
} // end of wxPen::SetWidth
int nStyle
)
{
- Unshare();
+ AllocExclusive();
M_PENDATA->m_nStyle = nStyle;
RealizeResource();
} // end of wxPen::SetStyle
const wxBitmap& rStipple
)
{
- Unshare();
+ AllocExclusive();
M_PENDATA->m_vStipple = rStipple;
M_PENDATA->m_nStyle = wxSTIPPLE;
RealizeResource();
int nJoin
)
{
- Unshare();
+ AllocExclusive();
M_PENDATA->m_nJoin = nJoin;
RealizeResource();
} // end of wxPen::SetJoin
int nCap
)
{
- Unshare();
+ AllocExclusive();
M_PENDATA->m_nCap = nCap;
RealizeResource();
} // end of wxPen::SetCap
{
} // 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);
}