X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/655719367ac5e131d9642e5783f3ecf64d1a3385..f196316400fd247a760b2ef77d5064b4e10e5471:/include/wx/msw/gdiimage.h diff --git a/include/wx/msw/gdiimage.h b/include/wx/msw/gdiimage.h index 5598ed0238..b22ff3ceaa 100644 --- a/include/wx/msw/gdiimage.h +++ b/include/wx/msw/gdiimage.h @@ -16,17 +16,13 @@ #ifndef _WX_MSW_GDIIMAGE_H_ #define _WX_MSW_GDIIMAGE_H_ -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) - #pragma interface "gdiimage.h" -#endif - #include "wx/gdiobj.h" // base class #include "wx/gdicmn.h" // wxBITMAP_TYPE_INVALID #include "wx/list.h" -class WXDLLEXPORT wxGDIImageRefData; -class WXDLLEXPORT wxGDIImageHandler; -class WXDLLEXPORT wxGDIImage; +class WXDLLIMPEXP_FWD_CORE wxGDIImageRefData; +class WXDLLIMPEXP_FWD_CORE wxGDIImageHandler; +class WXDLLIMPEXP_FWD_CORE wxGDIImage; WX_DECLARE_EXPORTED_LIST(wxGDIImageHandler, wxGDIImageHandlerList); @@ -44,6 +40,16 @@ public: m_handle = 0; } + wxGDIImageRefData(const wxGDIImageRefData& data) : wxGDIRefData(data) + { + m_width = data.m_width; + m_height = data.m_height; + m_depth = data.m_depth; + + // can't copy handles like this, derived class copy ctor must do it! + m_handle = NULL; + } + // accessors bool IsOk() const { return m_handle != 0; } @@ -92,13 +98,13 @@ public: void SetExtension(const wxString& ext) { m_extension = ext; } void SetType(long type) { m_type = type; } - wxString GetName() const { return m_name; } - wxString GetExtension() const { return m_extension; } + const wxString& GetName() const { return m_name; } + const wxString& GetExtension() const { return m_extension; } long GetType() const { return m_type; } // real handler operations: to implement in derived classes virtual bool Create(wxGDIImage *image, - void *data, + const void* data, long flags, int width, int height, int depth = 1) = 0; virtual bool Load(wxGDIImage *image, @@ -142,40 +148,41 @@ public: wxGDIImageRefData *GetGDIImageData() const { return (wxGDIImageRefData *)m_refData; } - // create data if we don't have it yet - void EnsureHasData() { if ( IsNull() ) m_refData = CreateData(); } - // accessors WXHANDLE GetHandle() const { return IsNull() ? 0 : GetGDIImageData()->m_handle; } void SetHandle(WXHANDLE handle) - { EnsureHasData(); GetGDIImageData()->m_handle = handle; } + { AllocExclusive(); GetGDIImageData()->m_handle = handle; } - bool Ok() const { return GetHandle() != 0; } + bool Ok() const { return IsOk(); } + bool IsOk() const { return GetHandle() != 0; } int GetWidth() const { return IsNull() ? 0 : GetGDIImageData()->m_width; } int GetHeight() const { return IsNull() ? 0 : GetGDIImageData()->m_height; } int GetDepth() const { return IsNull() ? 0 : GetGDIImageData()->m_depth; } - void SetWidth(int w) { EnsureHasData(); GetGDIImageData()->m_width = w; } - void SetHeight(int h) { EnsureHasData(); GetGDIImageData()->m_height = h; } - void SetDepth(int d) { EnsureHasData(); GetGDIImageData()->m_depth = d; } + void SetWidth(int w) { AllocExclusive(); GetGDIImageData()->m_width = w; } + void SetHeight(int h) { AllocExclusive(); GetGDIImageData()->m_height = h; } + void SetDepth(int d) { AllocExclusive(); GetGDIImageData()->m_depth = d; } void SetSize(int w, int h) { - EnsureHasData(); + AllocExclusive(); GetGDIImageData()->SetSize(w, h); } void SetSize(const wxSize& size) { SetSize(size.x, size.y); } // forward some of base class virtuals to wxGDIImageRefData - bool FreeResource(bool force = FALSE); + bool FreeResource(bool force = false); virtual WXHANDLE GetResourceHandle() const; protected: // create the data for the derived class here virtual wxGDIImageRefData *CreateData() const = 0; + // implement the wxObject method in terms of our, more specific, one + virtual wxObjectRefData *CreateRefData() const { return CreateData(); } + static wxGDIImageHandlerList ms_handlers; };