]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/cocoa/glcanvas.h
fixing overrelease and out-of-bounds write, fixes #13725
[wxWidgets.git] / include / wx / cocoa / glcanvas.h
index fdbecd935cd9d0d91ecdf736e6d8931504d06e2b..8e20a0c4eb5f85134adfde57087d45a9f819a9bf 100644 (file)
 #ifndef _WX_COCOA_GLCANVAS_H__
 #define _WX_COCOA_GLCANVAS_H__
 
+#include "wx/window.h"
+
 // #include "wx/cocoa/NSOpenGLView.h"
 // Include gl.h from the OpenGL framework
 #include <OpenGL/gl.h>
 
-class WXDLLIMPEXP_GL wxGLCanvas;
+class WXDLLIMPEXP_FWD_GL wxGLCanvas;
 DECLARE_WXCOCOA_OBJC_CLASS(NSOpenGLContext);
-//DECLARE_WXCOCOA_OBJC_CLASS(NSOpenGLView);
+DECLARE_WXCOCOA_OBJC_CLASS(NSOpenGLView);
 
 // ========================================================================
 // wxGLContext
 // ========================================================================
-class WXDLLIMPEXP_GL wxGLContext: public wxObject
+
+class WXDLLIMPEXP_GL wxGLContext : public wxGLContextBase
 {
 public:
-    wxGLContext(bool isRGB, wxGLCanvas *win, const wxPalette& palette = wxNullPalette);
-
-    wxGLContext( bool isRGB, wxGLCanvas *win,
-        const wxPalette& WXUNUSED(palette),
-        const wxGLContext *other /* for sharing display lists */ );
+    wxGLContext(wxGLCanvas *win, const wxGLContext *other = NULL);
 
     virtual ~wxGLContext();
 
+    virtual void SetCurrent(const wxGLCanvas& win) const;
 
-    void SetCurrent();
-
-    void SetColour(const wxChar *colour);
-
-    void SwapBuffers();
-
-
-    inline wxWindow* GetWindow() const
-    {   return m_window; }
-
-    inline WX_NSOpenGLContext GetNSOpenGLContext() const
-    {   return m_cocoaNSOpenGLContext; }
+    WX_NSOpenGLContext GetNSOpenGLContext() const
+        { return m_cocoaNSOpenGLContext; }
 
-public:
+private:
     WX_NSOpenGLContext m_cocoaNSOpenGLContext;
-    wxWindow*        m_window;
 };
 
-
-
 // ========================================================================
 // wxGLCanvas
 // ========================================================================
-class WXDLLIMPEXP_GL wxGLCanvas: public wxWindow// , protected wxCocoaNSOpenGLView
+
+class WXDLLIMPEXP_GL wxGLCanvas : public wxGLCanvasBase
+                             // , protected wxCocoaNSOpenGLView
 {
     DECLARE_DYNAMIC_CLASS(wxGLCanvas)
-    DECLARE_EVENT_TABLE()
 //    WX_DECLARE_COCOA_OWNER(NSOpenGLView,NSView,NSView)
 // ------------------------------------------------------------------------
 // initialization
 // ------------------------------------------------------------------------
 public:
-    wxGLCanvas()
-    :   m_glContext(NULL)
-    { }
-    wxGLCanvas(wxWindow *parent, wxWindowID winid = wxID_ANY,
-            const wxPoint& pos = wxDefaultPosition,
-            const wxSize& size = wxDefaultSize,
-            long style = 0, const wxString& name = wxGLCanvasName,
-            int *attribList = NULL, const wxPalette& palette = wxNullPalette);
-
     wxGLCanvas(wxWindow *parent,
-            const wxGLContext *shared = NULL,
-            wxWindowID winid = wxID_ANY,
-            const wxPoint& pos = wxDefaultPosition,
-            const wxSize& size = wxDefaultSize,
-            long style = 0, const wxString& name = wxGLCanvasName,
-            int *attribList = NULL, const wxPalette& palette = wxNullPalette);
+               wxWindowID id = wxID_ANY,
+               const int *attribList = NULL,
+               const wxPoint& pos = wxDefaultPosition,
+               const wxSize& size = wxDefaultSize,
+               long style = 0,
+               const wxString& name = wxGLCanvasName,
+               const wxPalette& palette = wxNullPalette)
+    {
+        Create(parent, id, pos, size, style, name, attribList, palette);
+    }
+
+    bool Create(wxWindow *parent,
+                wxWindowID id = wxID_ANY,
+                const wxPoint& pos = wxDefaultPosition,
+                const wxSize& size = wxDefaultSize,
+                long style = 0,
+                const wxString& name = wxGLCanvasName,
+                const int *attribList = NULL,
+                const wxPalette& palette = wxNullPalette);
 
-    wxGLCanvas(wxWindow *parent,
-            const wxGLCanvas *shared = NULL,
-            wxWindowID winid = wxID_ANY,
-            const wxPoint& pos = wxDefaultPosition,
-            const wxSize& size = wxDefaultSize,
-            long style = 0, const wxString& name = wxGLCanvasName,
-            int *attribList = NULL, const wxPalette& palette = wxNullPalette);
-
-    bool Create(wxWindow *parent, wxWindowID winid,
-            const wxPoint& pos = wxDefaultPosition,
-            const wxSize& size = wxDefaultSize,
-            long style = 0, const wxString& name = wxGLCanvasName);
     virtual ~wxGLCanvas();
 
 // ------------------------------------------------------------------------
@@ -108,16 +88,11 @@ protected:
 // Implementation
 // ------------------------------------------------------------------------
 public:
-    void SetCurrent();
-    void SwapBuffers();
+    virtual void SwapBuffers();
 
-    void OnSize(wxSizeEvent& event)
-    {}
-    inline wxGLContext* GetContext() const
-    {   return m_glContext; }
-protected:
-    wxGLContext *m_glContext;
-    wxPalette m_palette;
+
+    NSOpenGLView *GetNSOpenGLView() const
+        { return (NSOpenGLView *)m_cocoaNSView; }
 };
 
 #endif //ndef _WX_COCOA_GLCANVAS_H__