X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/43cf637fac1894db167f0ed34d1958107a48ea85..c9ccc09c64f4c29d4667796bef7b507d9e8d25ed:/include/wx/gdiobj.h diff --git a/include/wx/gdiobj.h b/include/wx/gdiobj.h index ebe3319753..d38a44bb7e 100644 --- a/include/wx/gdiobj.h +++ b/include/wx/gdiobj.h @@ -20,21 +20,42 @@ // the same native GDI object // ---------------------------------------------------------------------------- -class WXDLLIMPEXP_FWD_CORE wxGDIRefData: public wxObjectRefData { }; +class WXDLLIMPEXP_CORE wxGDIRefData : public wxObjectRefData +{ +public: + // Default ctor which needs to be defined just because we use + // wxDECLARE_NO_COPY_CLASS() below. + wxGDIRefData() { } + + // override this in the derived classes to check if this data object is + // really fully initialized + virtual bool IsOk() const { return true; } + +private: + wxDECLARE_NO_COPY_CLASS(wxGDIRefData); +}; // ---------------------------------------------------------------------------- -// wxGDIObject +// wxGDIObject: base class for bitmaps, pens, brushes, ... // ---------------------------------------------------------------------------- -class WXDLLIMPEXP_CORE wxGDIObject: public wxObject +class WXDLLIMPEXP_CORE wxGDIObject : public wxObject { public: + // checks if the object can be used + virtual bool IsOk() const + { + // the cast here is safe because the derived classes always create + // wxGDIRefData objects + return m_refData && static_cast(m_refData)->IsOk(); + } + + // don't use in the new code, use IsOk() instead bool IsNull() const { return m_refData == NULL; } - // older version, for backwards compat + // older version, for backwards compatibility only (but not deprecated + // because it's still widely used) bool Ok() const { return IsOk(); } - - virtual bool IsOk() const { return (m_refData != NULL) ; } #if defined(__WXMSW__) || defined(__WXPM__) || defined(__WXPALMOS__) // Creates the resource @@ -49,8 +70,24 @@ public: virtual WXHANDLE GetResourceHandle() const { return 0; } #endif // defined(__WXMSW__) || defined(__WXPM__) +protected: + // replace base class functions using wxObjectRefData with our own which + // use wxGDIRefData to ensure that we always work with data objects of the + // correct type (i.e. derived from wxGDIRefData) + virtual wxObjectRefData *CreateRefData() const + { + return CreateGDIRefData(); + } + + virtual wxObjectRefData *CloneRefData(const wxObjectRefData *data) const + { + return CloneGDIRefData(static_cast(data)); + } + + virtual wxGDIRefData *CreateGDIRefData() const = 0; + virtual wxGDIRefData *CloneGDIRefData(const wxGDIRefData *data) const = 0; + DECLARE_DYNAMIC_CLASS(wxGDIObject) }; -#endif - // _WX_GDIOBJ_H_BASE_ +#endif // _WX_GDIOBJ_H_BASE_