Fix Ok/IsOk() mess in wxGDIObject-derived classes; also added
wxGDIObject::Create/CloneGDIRefData() and implemented them for (almost) all ports git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@50727 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -20,21 +20,35 @@
|
||||
// the same native GDI object
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
class WXDLLIMPEXP_FWD_CORE wxGDIRefData: public wxObjectRefData { };
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxGDIObject
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
class WXDLLIMPEXP_CORE wxGDIObject: public wxObject
|
||||
class WXDLLIMPEXP_FWD_CORE wxGDIRefData : public wxObjectRefData
|
||||
{
|
||||
public:
|
||||
// override this in the derived classes to check if this data object is
|
||||
// really fully initialized
|
||||
virtual bool IsOk() const { return true; }
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxGDIObject: base class for bitmaps, pens, brushes, ...
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
class WXDLLIMPEXP_CORE wxGDIObject : public wxObject
|
||||
{
|
||||
public:
|
||||
// checks if the object can be used
|
||||
bool IsOk() const
|
||||
{
|
||||
// the cast here is safe because the derived classes always create
|
||||
// wxGDIRefData objects
|
||||
return m_refData && wx_static_cast(wxGDIRefData *, 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 +63,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(wx_static_cast(const wxGDIRefData *, 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_
|
||||
|
Reference in New Issue
Block a user