X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/655719367ac5e131d9642e5783f3ecf64d1a3385..9869c26285dc51d13607cddaa04f65ce983653a5:/include/wx/os2/metafile.h diff --git a/include/wx/os2/metafile.h b/include/wx/os2/metafile.h index 996c190f83..5036afe6eb 100644 --- a/include/wx/os2/metafile.h +++ b/include/wx/os2/metafile.h @@ -1,12 +1,11 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: metafile.h +// Name: wx/os2/metafile.h // Purpose: wxMetaFile, wxMetaFileDC classes. // This probably should be restricted to Windows platforms, // but if there is an equivalent on your platform, great. // Author: David Webster // Modified by: // Created: 10/10/99 -// RCS-ID: $Id$ // Copyright: (c) David Webster // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -15,11 +14,9 @@ #ifndef _WX_METAFIILE_H_ #define _WX_METAFIILE_H_ -#include "wx/setup.h" - -#if wxUSE_METAFILE #include "wx/dc.h" #include "wx/gdiobj.h" +#include "wx/os2/dc.h" #if wxUSE_DRAG_AND_DROP #include "wx/dataobj.h" @@ -33,14 +30,16 @@ #define wxMetaFile wxMetafile #define wxMetaFileDC wxMetafileDC -class WXDLLEXPORT wxMetafile; +class WXDLLIMPEXP_FWD_CORE wxMetafile; -class WXDLLEXPORT wxMetafileRefData: public wxGDIRefData +class WXDLLIMPEXP_CORE wxMetafileRefData: public wxGDIRefData { - friend class WXDLLEXPORT wxMetafile; + friend class WXDLLIMPEXP_FWD_CORE wxMetafile; public: wxMetafileRefData(void); - ~wxMetafileRefData(void); + virtual ~wxMetafileRefData(void); + + virtual bool IsOk() const { return m_metafile != 0; } public: WXHANDLE m_metafile; @@ -49,83 +48,94 @@ public: #define M_METAFILEDATA ((wxMetafileRefData *)m_refData) -class WXDLLEXPORT wxMetafile: public wxGDIObject +class WXDLLIMPEXP_CORE wxMetafile: public wxGDIObject { - DECLARE_DYNAMIC_CLASS(wxMetafile) - public: - // Copy constructor - inline wxMetafile(const wxMetafile& metafile) - { Ref(metafile); } - - wxMetafile(const wxString& file = ""); - ~wxMetafile(void); - - // After this is called, the metafile cannot be used for anything - // since it is now owned by the clipboard. - virtual bool SetClipboard(int width = 0, int height = 0); - - virtual bool Play(wxDC *dc); - inline bool Ok(void) const { return (M_METAFILEDATA && (M_METAFILEDATA->m_metafile != 0)); }; - - // Implementation - inline WXHANDLE GetHMETAFILE(void) { return M_METAFILEDATA->m_metafile; } - void SetHMETAFILE(WXHANDLE mf) ; - inline int GetWindowsMappingMode(void) { return M_METAFILEDATA->m_windowsMappingMode; } - void SetWindowsMappingMode(int mm); - - // Operators - inline wxMetafile& operator = (const wxMetafile& metafile) - { if (*this == metafile) return (*this); Ref(metafile); return *this; } - inline bool operator== (const wxMetafile& metafile) const - { return m_refData == metafile.m_refData; } - inline bool operator!= (const wxMetafile& metafile) const - { return m_refData != metafile.m_refData; } + DECLARE_DYNAMIC_CLASS(wxMetafile) +public: + wxMetafile(const wxString& file = wxEmptyString); + virtual ~wxMetafile(void); + + // After this is called, the metafile cannot be used for anything + // since it is now owned by the clipboard. + virtual bool SetClipboard(int width = 0, int height = 0); + + virtual bool Play(wxDC *dc); + + // Implementation + inline WXHANDLE GetHMETAFILE(void) { return M_METAFILEDATA->m_metafile; } + 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 WXDLLIMPEXP_CORE 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(wxMappingMode 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; } - public: - // Don't supply origin and extent - // Supply them to wxMakeMetaFilePlaceable instead. - wxMetafileDC(const wxString& file = ""); +protected: + virtual void DoGetSize(int *width, int *height) const; - // 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); + int m_windowsMappingMode; + wxMetafile* m_metaFile; - ~wxMetafileDC(void); +private: + DECLARE_CLASS(wxMetafileDCImpl) + wxDECLARE_NO_COPY_CLASS(wxMetafileDCImpl); +}; - // 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, - wxFont *theFont = NULL, bool use16bit = FALSE) const; +class WXDLLIMPEXP_CORE 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 )) + { } - // 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; } + // 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 )) + { } -protected: - int m_windowsMappingMode; - wxMetafile* m_metaFile; + 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: - // function hiding warning supression - 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);}; + DECLARE_CLASS(wxMetafileDC) + wxDECLARE_NO_COPY_CLASS(wxMetafileDC); }; /* @@ -137,10 +147,17 @@ private: // No origin or extent #define wxMakeMetaFilePlaceable wxMakeMetafilePlaceable -bool WXDLLEXPORT wxMakeMetafilePlaceable(const wxString& filename, float scale = 1.0); +bool WXDLLIMPEXP_CORE wxMakeMetafilePlaceable(const wxString& filename, float scale = 1.0); // Optional origin and extent -bool WXDLLEXPORT wxMakeMetaFilePlaceable(const wxString& filename, int x1, int y1, int x2, int y2, float scale = 1.0, bool useOriginAndExtent = TRUE); +bool WXDLLIMPEXP_CORE wxMakeMetaFilePlaceable( const wxString& filename + ,int x1 + ,int y1 + ,int x2 + ,int y2 + ,float scale = 1.0 + ,bool useOriginAndExtent = true + ); // ---------------------------------------------------------------------------- // wxMetafileDataObject is a specialization of wxDataObject for metafile data @@ -150,42 +167,42 @@ bool WXDLLEXPORT wxMakeMetaFilePlaceable(const wxString& filename, int x1, int y // use. #if wxUSE_DRAG_AND_DROP -class WXDLLEXPORT wxMetafileDataObject : public wxDataObject +class WXDLLIMPEXP_CORE wxMetafileDataObject : public wxDataObject { public: - // ctors - wxMetafileDataObject() { m_width = 0; m_height = 0; }; - wxMetafileDataObject(const wxMetafile& metafile, int width = 0, int height = 0): - m_metafile(metafile), m_width(width), m_height(height) { } + // ctors + wxMetafileDataObject() { m_width = 0; m_height = 0; } + wxMetafileDataObject(const wxMetafile& metafile, int width = 0,int height = 0) + :m_metafile(metafile) + ,m_width(width) + ,m_height(height) { } - void SetMetafile(const wxMetafile& metafile, int w = 0, int h = 0) - { m_metafile = metafile; m_width = w; m_height = h; } - wxMetafile GetMetafile() const { return m_metafile; } - int GetWidth() const { return m_width; } - int GetHeight() const { return m_height; } + void SetMetafile(const wxMetafile& metafile, int w = 0, int h = 0) + { m_metafile = metafile; m_width = w; m_height = h; } + wxMetafile GetMetafile() const { return m_metafile; } + int GetWidth() const { return m_width; } + int GetHeight() const { return m_height; } - virtual wxDataFormat GetFormat() const { return wxDF_METAFILE; } + virtual wxDataFormat GetFormat() const { return wxDF_METAFILE; } /* ?? - // implement base class pure virtuals - virtual wxDataFormat GetPreferredFormat() const - { return (wxDataFormat) wxDataObject::Text; } - virtual bool IsSupportedFormat(wxDataFormat format) const - { return format == wxDataObject::Text || format == wxDataObject::Locale; } - virtual size_t GetDataSize() const - { return m_strText.Len() + 1; } // +1 for trailing '\0'of course - virtual void GetDataHere(void *pBuf) const - { memcpy(pBuf, m_strText.c_str(), GetDataSize()); } + // implement base class pure virtuals + virtual wxDataFormat GetPreferredFormat() const + { return (wxDataFormat) wxDataObject::Text; } + virtual bool IsSupportedFormat(wxDataFormat format) const + { return format == wxDataObject::Text || format == wxDataObject::Locale; } + virtual size_t GetDataSize() const + { return m_strText.Len() + 1; } // +1 for trailing '\0'of course + virtual void GetDataHere(void *pBuf) const + { memcpy(pBuf, m_strText.c_str(), GetDataSize()); } */ private: - wxMetafile m_metafile; - int m_width; - int m_height; + wxMetafile m_metafile; + int m_width; + int m_height; }; #endif -#endif // wxUSE_METAFILE #endif // _WX_METAFIILE_H_ -