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

@@ -216,7 +216,6 @@ protected:
bool CreateFromImage(const wxImage& image, int depth);
virtual wxGDIRefData *CreateGDIRefData() const;
virtual wxGDIRefData *CloneGDIRefData(const wxGDIRefData *data) const;
private:
@@ -343,7 +342,7 @@ public:
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)

View File

@@ -46,8 +46,6 @@ protected:
// Brush
class WXDLLEXPORT wxBrush: public wxBrushBase
{
DECLARE_DYNAMIC_CLASS(wxBrush)
public:
wxBrush();
wxBrush(const wxColour& rCol, int nStyle = wxSOLID);
@@ -79,7 +77,13 @@ public:
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

View File

@@ -113,7 +113,9 @@ public:
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)

View File

@@ -74,7 +74,7 @@ public:
WXHCURSOR m_hCursor;
};
UINT m_uId;
unsigned int m_uId;
};
// ----------------------------------------------------------------------------
@@ -204,7 +204,7 @@ public:
}
void SetSize(const wxSize& rSize) { SetSize(rSize.x, rSize.y); }
UINT GetId(void) const
unsigned int GetId(void) const
{
wxGDIImageRefData* pData;
@@ -214,7 +214,7 @@ public:
else
return pData->m_uId;
} // end of WxWinGdi_CGDIImage::GetId
void SetId(UINT uId)
void SetId(unsigned int uId)
{
wxGDIImageRefData* pData;
@@ -231,6 +231,15 @@ protected:
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;
};

View File

@@ -17,6 +17,7 @@
#include "wx/dc.h"
#include "wx/gdiobj.h"
#include "wx/os2/dc.h"
#if wxUSE_DRAG_AND_DROP
#include "wx/dataobj.h"
@@ -66,53 +67,76 @@ public:
void SetHMETAFILE(WXHANDLE mf) ;
inline int GetWindowsMappingMode(void) { return M_METAFILEDATA->m_windowsMappingMode; }
void SetWindowsMappingMode(int mm);
};
class WXDLLEXPORT wxMetafileDC: public wxDC
{
DECLARE_DYNAMIC_CLASS(wxMetafileDC)
public:
// Don't supply origin and extent
// Supply them to wxMakeMetaFilePlaceable instead.
wxMetafileDC(const wxString& file = wxEmptyString);
// 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);
virtual ~wxMetafileDC(void);
// 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;
// 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; }
protected:
virtual wxGDIRefData *CreateGDIRefData() const;
virtual wxGDIRefData *CloneGDIRefData(const wxGDIRefData *data) const;
};
class WXDLLEXPORT wxMetafileDCImpl: public wxPMDCImpl
{
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:
#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(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)
: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)
: wxDC(new wxMetafileDCImpl( this, file, xext, yext, xorg, yorg ))
{ }
wxMetafile *GetMetafile() const
{ return ((wxMetafileDCImpl*)m_pimpl)->GetMetaFile(); }
virtual ~wxMetafileDC(void)
{ delete m_pimpl; }
// Should be called at end of drawing
virtual wxMetafile *Close(void)
{ return ((wxMetafileDCImpl*)m_pimpl)->Close(); }
inline void SetMetaFile(wxMetafile *mf)
{ ((wxMetafileDCImpl*)m_pimpl)->SetMetaFile(mf); }
private:
DECLARE_CLASS(wxMetafileDC)
DECLARE_NO_COPY_CLASS(wxMetafileDC)
};
/*

View File

@@ -32,8 +32,6 @@ public:
class WXDLLEXPORT wxPalette: public wxPaletteBase
{
DECLARE_DYNAMIC_CLASS(wxPalette)
public:
wxPalette();
@@ -64,6 +62,13 @@ public:
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

View File

@@ -58,7 +58,6 @@ protected:
// Pen
class WXDLLEXPORT wxPen : public wxGDIObject
{
DECLARE_DYNAMIC_CLASS(wxPen)
public:
wxPen();
wxPen( const wxColour& rColour
@@ -124,11 +123,19 @@ public:
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);

View File

@@ -64,8 +64,8 @@ public:
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;
@@ -82,7 +82,6 @@ protected:
class WXDLLEXPORT wxRegionIterator : public wxObject
{
DECLARE_DYNAMIC_CLASS(wxRegionIterator);
public:
wxRegionIterator();
wxRegionIterator(const wxRegion& rRegion);
@@ -110,6 +109,8 @@ private:
long m_lNumRects;
wxRegion m_vRegion;
wxRect* m_pRects;
DECLARE_DYNAMIC_CLASS(wxRegionIterator)
}; // end of wxRegionIterator
#endif // _WX_OS2_REGION_H_