X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/bfbd6dc1921a17bd880d580dd660e8bc478a9391..7344108e8a129a3f9b4df5ab0f98a1713db03b89:/include/wx/msw/enhmeta.h diff --git a/include/wx/msw/enhmeta.h b/include/wx/msw/enhmeta.h index 88f7cfa8a9..e134750ea6 100644 --- a/include/wx/msw/enhmeta.h +++ b/include/wx/msw/enhmeta.h @@ -6,17 +6,14 @@ // Created: 13.01.00 // RCS-ID: $Id$ // Copyright: (c) 2000 Vadim Zeitlin -// Licence: wxWindows license +// Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// #ifndef _WX_MSW_ENHMETA_H_ #define _WX_MSW_ENHMETA_H_ -#ifdef __GNUG__ - #pragma interface "enhmeta.h" -#endif - #include "wx/dc.h" +#include "wx/gdiobj.h" #if wxUSE_DRAG_AND_DROP #include "wx/dataobj.h" @@ -26,12 +23,12 @@ // wxEnhMetaFile: encapsulation of Win32 HENHMETAFILE // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxEnhMetaFile : public wxObject +class WXDLLIMPEXP_CORE wxEnhMetaFile : public wxGDIObject { public: wxEnhMetaFile(const wxString& file = wxEmptyString) : m_filename(file) { Init(); } - wxEnhMetaFile(const wxEnhMetaFile& metafile) + wxEnhMetaFile(const wxEnhMetaFile& metafile) : wxGDIObject() { Init(); Assign(metafile); } wxEnhMetaFile& operator=(const wxEnhMetaFile& metafile) { Free(); Assign(metafile); return *this; } @@ -40,10 +37,10 @@ public: { Free(); } // display the picture stored in the metafile on the given DC - bool Play(wxDC *dc, wxRect *rectBound = (wxRect *)NULL); + bool Play(wxDC *dc, wxRect *rectBound = NULL); // accessors - bool Ok() const { return m_hMF != 0; } + virtual bool IsOk() const { return m_hMF != 0; } wxSize GetSize() const; int GetWidth() const { return GetSize().x; } @@ -61,10 +58,15 @@ public: void SetHENHMETAFILE(WXHANDLE hMF) { Free(); m_hMF = hMF; } protected: - void Init() { m_hMF = 0; } + void Init(); void Free(); void Assign(const wxEnhMetaFile& mf); + // we don't use these functions (but probably should) but have to implement + // them as they're pure virtual in the base class + virtual wxGDIRefData *CreateGDIRefData() const; + virtual wxGDIRefData *CloneGDIRefData(const wxGDIRefData *data) const; + private: wxString m_filename; WXHANDLE m_hMF; @@ -76,7 +78,7 @@ private: // wxEnhMetaFileDC: allows to create a wxEnhMetaFile // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxEnhMetaFileDC : public wxDC +class WXDLLIMPEXP_CORE wxEnhMetaFileDC : public wxDC { public: // the ctor parameters specify the filename (empty for memory metafiles), @@ -85,24 +87,30 @@ public: int width = 0, int height = 0, const wxString& description = wxEmptyString); - virtual ~wxEnhMetaFileDC(); + // as above, but takes reference DC as first argument to take resolution, + // size, font metrics etc. from + wxEXPLICIT + wxEnhMetaFileDC(const wxDC& referenceDC, + const wxString& filename = wxEmptyString, + int width = 0, int height = 0, + const wxString& description = wxEmptyString); // obtain a pointer to the new metafile (caller should delete it) wxEnhMetaFile *Close(); private: - DECLARE_DYNAMIC_CLASS(wxEnhMetaFileDC) + DECLARE_DYNAMIC_CLASS_NO_COPY(wxEnhMetaFileDC) }; +#if wxUSE_DRAG_AND_DROP + // ---------------------------------------------------------------------------- // wxEnhMetaFileDataObject is a specialization of wxDataObject for enh metafile // ---------------------------------------------------------------------------- -#if wxUSE_DRAG_AND_DROP - // notice that we want to support both CF_METAFILEPICT and CF_ENHMETAFILE and // so we derive from wxDataObject and not from wxDataObjectSimple -class WXDLLEXPORT wxEnhMetaFileDataObject : public wxDataObject +class WXDLLIMPEXP_CORE wxEnhMetaFileDataObject : public wxDataObject { public: // ctors @@ -128,6 +136,51 @@ public: protected: wxEnhMetaFile m_metafile; + + wxDECLARE_NO_COPY_CLASS(wxEnhMetaFileDataObject); +}; + + +// ---------------------------------------------------------------------------- +// wxEnhMetaFileSimpleDataObject does derive from wxDataObjectSimple which +// makes it more convenient to use (it can be used with wxDataObjectComposite) +// at the price of not supoprting any more CF_METAFILEPICT but only +// CF_ENHMETAFILE +// ---------------------------------------------------------------------------- + +class WXDLLIMPEXP_CORE wxEnhMetaFileSimpleDataObject : public wxDataObjectSimple +{ +public: + // ctors + wxEnhMetaFileSimpleDataObject() : wxDataObjectSimple(wxDF_ENHMETAFILE) { } + wxEnhMetaFileSimpleDataObject(const wxEnhMetaFile& metafile) + : wxDataObjectSimple(wxDF_ENHMETAFILE), m_metafile(metafile) { } + + // virtual functions which you may override if you want to provide data on + // demand only - otherwise, the trivial default versions will be used + virtual void SetEnhMetafile(const wxEnhMetaFile& metafile) + { m_metafile = metafile; } + virtual wxEnhMetaFile GetEnhMetafile() const + { return m_metafile; } + + // implement base class pure virtuals + virtual size_t GetDataSize() const; + virtual bool GetDataHere(void *buf) const; + virtual bool SetData(size_t len, const void *buf); + + virtual size_t GetDataSize(const wxDataFormat& WXUNUSED(format)) const + { return GetDataSize(); } + virtual bool GetDataHere(const wxDataFormat& WXUNUSED(format), + void *buf) const + { return GetDataHere(buf); } + virtual bool SetData(const wxDataFormat& WXUNUSED(format), + size_t len, const void *buf) + { return SetData(len, buf); } + +protected: + wxEnhMetaFile m_metafile; + + wxDECLARE_NO_COPY_CLASS(wxEnhMetaFileSimpleDataObject); }; #endif // wxUSE_DRAG_AND_DROP