]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/gdiobj.h
in debug mode when clicking with the middle mouse button draw borders around all...
[wxWidgets.git] / include / wx / gdiobj.h
index 5c9747694adfa436abb80f1ad1d0662c941e7a18..a7f946d2d67a09f1b0028098f6988dbed6c532d4 100644 (file)
 // the same native GDI object
 // ----------------------------------------------------------------------------
 
-class WXDLLIMPEXP_CORE wxGDIRefData: public wxObjectRefData { };
+class WXDLLIMPEXP_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
+// 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<wxGDIRefData *>(m_refData)->IsOk();
+    }
+
+    // don't use in the new code, use IsOk() instead
     bool IsNull() const { return m_refData == NULL; }
 
-#if defined(__WXMSW__) || defined(__WXOS2__) || defined(__WXPALMOS__)
+    // older version, for backwards compatibility only (but not deprecated
+    // because it's still widely used)
+    bool Ok() const { return IsOk(); }
+
+#if defined(__WXMSW__) || defined(__WXPM__) || defined(__WXPALMOS__)
     // Creates the resource
     virtual bool RealizeResource() { return false; }
 
@@ -42,10 +61,26 @@ public:
 
     // Returns handle.
     virtual WXHANDLE GetResourceHandle() const { return 0; }
-#endif // defined(__WXMSW__) || defined(__WXOS2__)
+#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<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_