]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/glcanvas.cpp
Suppress assertion when the array is sorted
[wxWidgets.git] / src / mac / carbon / glcanvas.cpp
index e208531ff41307375decf7fa64b0e0e0c56e7094..bc395ae484690429b78df15ef8cd681e0678c58c 100644 (file)
@@ -1,36 +1,30 @@
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
-// Name:        glcanvas.cpp
-// Purpose:     wxGLCanvas, for using OpenGL with wxWindows under Macintosh
+// Name:        src/mac/carbon/glcanvas.cpp
+// Purpose:     wxGLCanvas, for using OpenGL with wxWidgets under Macintosh
 // Author:      Stefan Csomor
 // Modified by:
 // Created:     1998-01-01
 // RCS-ID:      $Id$
 // Copyright:   (c) Stefan Csomor
 // Author:      Stefan Csomor
 // Modified by:
 // Created:     1998-01-01
 // RCS-ID:      $Id$
 // Copyright:   (c) Stefan Csomor
-// Licence:       wxWindows licence
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 /////////////////////////////////////////////////////////////////////////////
 
-#ifdef __GNUG__
-#pragma implementation "glcanvas.h"
-#endif
-
 #include "wx/wxprec.h"
 
 #if defined(__BORLANDC__)
 #include "wx/wxprec.h"
 
 #if defined(__BORLANDC__)
-#pragma hdrstop
+    #pragma hdrstop
 #endif
 
 #endif
 
-#include "wx/setup.h"
-
 #if wxUSE_GLCANVAS
 
 #if wxUSE_GLCANVAS
 
+#include "wx/glcanvas.h"
+
 #ifndef WX_PRECOMP
 #ifndef WX_PRECOMP
-#include "wx/frame.h"
+    #include "wx/frame.h"
+    #include "wx/log.h"
+    #include "wx/settings.h"
 #endif
 
 #endif
 
-#include "wx/settings.h"
-#include "wx/log.h"
-
-#include "wx/glcanvas.h"
 #include "wx/mac/uma.h"
 
 // DLL options compatibility check:
 #include "wx/mac/uma.h"
 
 // DLL options compatibility check:
@@ -48,12 +42,12 @@ wxGLContext::wxGLContext(
                          )
 {
     m_window = win;
                          )
 {
     m_window = win;
-    
-    m_drawable = (AGLDrawable) UMAGetWindowPort(MAC_WXHWND(win->MacGetRootWindow()));
-    
+
+    m_drawable = (AGLDrawable) UMAGetWindowPort(MAC_WXHWND(win->MacGetTopLevelWindowRef()));
+
     m_glContext = aglCreateContext(fmt, other ? other->m_glContext : NULL);
     wxCHECK_RET( m_glContext, wxT("Couldn't create OpenGl context") );
     m_glContext = aglCreateContext(fmt, other ? other->m_glContext : NULL);
     wxCHECK_RET( m_glContext, wxT("Couldn't create OpenGl context") );
-    
+
     GLboolean b;
     b = aglSetDrawable(m_glContext, m_drawable);
     wxCHECK_RET( b, wxT("Couldn't bind OpenGl context") );
     GLboolean b;
     b = aglSetDrawable(m_glContext, m_drawable);
     wxCHECK_RET( b, wxT("Couldn't bind OpenGl context") );
@@ -151,14 +145,14 @@ wxGLCanvas::~wxGLCanvas()
 static AGLPixelFormat ChoosePixelFormat(const int *attribList)
 {
     GLint data[512];
 static AGLPixelFormat ChoosePixelFormat(const int *attribList)
 {
     GLint data[512];
-    GLint defaultAttribs[] = { AGL_RGBA, 
-        AGL_DOUBLEBUFFER, 
-        AGL_MINIMUM_POLICY, 
+    GLint defaultAttribs[] = { AGL_RGBA,
+        AGL_DOUBLEBUFFER,
+        AGL_MINIMUM_POLICY,
         AGL_DEPTH_SIZE, 1,  // use largest available depth buffer
         AGL_DEPTH_SIZE, 1,  // use largest available depth buffer
-        AGL_RED_SIZE, 1, 
-        AGL_GREEN_SIZE, 1, 
-        AGL_BLUE_SIZE, 1, 
-        AGL_ALPHA_SIZE, 0, 
+        AGL_RED_SIZE, 1,
+        AGL_GREEN_SIZE, 1,
+        AGL_BLUE_SIZE, 1,
+        AGL_ALPHA_SIZE, 0,
         AGL_NONE };
     GLint *attribs;
     if (!attribList)
         AGL_NONE };
     GLint *attribs;
     if (!attribList)
@@ -168,7 +162,7 @@ static AGLPixelFormat ChoosePixelFormat(const int *attribList)
     else
     {
         int arg=0, p=0;
     else
     {
         int arg=0, p=0;
-        
+
         data[p++] = AGL_MINIMUM_POLICY; // make _SIZE tags behave more like GLX
         while( (attribList[arg]!=0) && (p<512) )
         {
         data[p++] = AGL_MINIMUM_POLICY; // make _SIZE tags behave more like GLX
         while( (attribList[arg]!=0) && (p<512) )
         {
@@ -191,9 +185,9 @@ static AGLPixelFormat ChoosePixelFormat(const int *attribList)
                 data[p++]=AGL_BLUE_SIZE; data[p++]=attribList[arg++]; break;
             case WX_GL_MIN_ALPHA:
                 data[p++]=AGL_ALPHA_SIZE; data[p++]=attribList[arg++]; break;
                 data[p++]=AGL_BLUE_SIZE; data[p++]=attribList[arg++]; break;
             case WX_GL_MIN_ALPHA:
                 data[p++]=AGL_ALPHA_SIZE; data[p++]=attribList[arg++]; break;
-            case WX_GL_DEPTH_SIZE: 
+            case WX_GL_DEPTH_SIZE:
                 data[p++]=AGL_DEPTH_SIZE; data[p++]=attribList[arg++]; break;
                 data[p++]=AGL_DEPTH_SIZE; data[p++]=attribList[arg++]; break;
-            case WX_GL_STENCIL_SIZE: 
+            case WX_GL_STENCIL_SIZE:
                 data[p++]=AGL_STENCIL_SIZE; data[p++]=attribList[arg++]; break;
             case WX_GL_MIN_ACCUM_RED:
                 data[p++]=AGL_ACCUM_RED_SIZE; data[p++]=attribList[arg++]; break;
                 data[p++]=AGL_STENCIL_SIZE; data[p++]=attribList[arg++]; break;
             case WX_GL_MIN_ACCUM_RED:
                 data[p++]=AGL_ACCUM_RED_SIZE; data[p++]=attribList[arg++]; break;
@@ -206,12 +200,12 @@ static AGLPixelFormat ChoosePixelFormat(const int *attribList)
             default:
                 break;
             }
             default:
                 break;
             }
-        }       
-        data[p] = 0; 
-        
+        }
+        data[p] = 0;
+
         attribs = data;
     }
         attribs = data;
     }
-    
+
     return aglChoosePixelFormat(NULL, 0, attribs);
 }
 
     return aglChoosePixelFormat(NULL, 0, attribs);
 }
 
@@ -219,15 +213,17 @@ bool wxGLCanvas::Create(wxWindow *parent, const wxGLContext *shared, wxWindowID
                         const wxPoint& pos, const wxSize& size, long style, const wxString& name,
                         int *attribList, const wxPalette& palette)
 {
                         const wxPoint& pos, const wxSize& size, long style, const wxString& name,
                         int *attribList, const wxPalette& palette)
 {
+    m_macCanvasIsShown = false ;
+    m_glContext = 0 ;
     wxWindow::Create( parent, id, pos, size, style, name );
     wxWindow::Create( parent, id, pos, size, style, name );
-    
+
     AGLPixelFormat fmt = ChoosePixelFormat(attribList);
     wxCHECK_MSG( fmt, false, wxT("Couldn't create OpenGl pixel format") );
     AGLPixelFormat fmt = ChoosePixelFormat(attribList);
     wxCHECK_MSG( fmt, false, wxT("Couldn't create OpenGl pixel format") );
-    
+
     m_glContext = new wxGLContext(fmt, this, palette, shared);
     m_macCanvasIsShown = true ;
     aglDestroyPixelFormat(fmt);
     m_glContext = new wxGLContext(fmt, this, palette, shared);
     m_macCanvasIsShown = true ;
     aglDestroyPixelFormat(fmt);
-    
+
     return true;
 }
 
     return true;
 }
 
@@ -249,30 +245,30 @@ void wxGLCanvas::SetViewport()
     // adjust glViewport to just this window
     int x = 0 ;
     int y = 0 ;
     // adjust glViewport to just this window
     int x = 0 ;
     int y = 0 ;
-    
+
     wxWindow* iter = this ;
     while( iter->GetParent() )
     {
     wxWindow* iter = this ;
     while( iter->GetParent() )
     {
-       iter = iter->GetParent() ;
+        iter = iter->GetParent() ;
     }
     }
-    
+
     if ( iter && iter->IsTopLevel() )
     {
     if ( iter && iter->IsTopLevel() )
     {
-           MacClientToRootWindow( &x , &y ) ;
-           int width, height;
-           GetClientSize(& width, & height);
-           Rect bounds ;
-           GetWindowPortBounds( MAC_WXHWND(MacGetRootWindow()) , &bounds ) ;
-           GLint parms[4] ;
-           parms[0] = x ;
-           parms[1] = bounds.bottom - bounds.top - ( y + height ) ;
-           parms[2] = width ;
-           parms[3] = height ;
-           
-           if ( !m_macCanvasIsShown )
-               parms[0] += 20000 ;
-           aglSetInteger( m_glContext->m_glContext , AGL_BUFFER_RECT , parms ) ;
-       }
+        MacClientToRootWindow( &x , &y ) ;
+        int width, height;
+        GetClientSize(& width, & height);
+        Rect bounds ;
+        GetWindowPortBounds( MAC_WXHWND(MacGetTopLevelWindowRef()) , &bounds ) ;
+        GLint parms[4] ;
+        parms[0] = x ;
+        parms[1] = bounds.bottom - bounds.top - ( y + height ) ;
+        parms[2] = width ;
+        parms[3] = height ;
+
+        if ( !m_macCanvasIsShown )
+            parms[0] += 20000 ;
+        aglSetInteger( m_glContext->m_glContext , AGL_BUFFER_RECT , parms ) ;
+   }
 }
 
 void wxGLCanvas::OnSize(wxSizeEvent& event)
 }
 
 void wxGLCanvas::OnSize(wxSizeEvent& event)
@@ -316,11 +312,11 @@ void wxGLCanvas::SetColour(const wxChar *colour)
         m_glContext->SetColour(colour);
 }
 
         m_glContext->SetColour(colour);
 }
 
-bool wxGLCanvas::Show(bool show) 
+bool wxGLCanvas::Show(bool show)
 {
     if ( !wxWindow::Show( show ) )
 {
     if ( !wxWindow::Show( show ) )
-        return FALSE ;
-        
+        return false ;
+/*
     if ( !show )
     {
         if ( m_macCanvasIsShown )
     if ( !show )
     {
         if ( m_macCanvasIsShown )
@@ -331,18 +327,19 @@ bool wxGLCanvas::Show(bool show)
     }
     else
     {
     }
     else
     {
-        if ( MacIsReallyShown() && !m_macCanvasIsShown )
+        if ( m_peer->IsVisible()&& !m_macCanvasIsShown )
         {
             m_macCanvasIsShown = true ;
             SetViewport() ;
         }
     }
         {
             m_macCanvasIsShown = true ;
             SetViewport() ;
         }
     }
-    return TRUE ;
+*/
+    return true ;
 }
 
 }
 
-void wxGLCanvas::MacSuperShown( bool show ) 
+void wxGLCanvas::MacVisibilityChanged()
 {
 {
-    if ( !show )
+    if ( !MacIsReallyShown() )
     {
         if ( m_macCanvasIsShown )
         {
     {
         if ( m_macCanvasIsShown )
         {
@@ -352,14 +349,13 @@ void wxGLCanvas::MacSuperShown( bool show )
     }
     else
     {
     }
     else
     {
-        if ( MacIsReallyShown() && !m_macCanvasIsShown )
+        if ( !m_macCanvasIsShown )
         {
             m_macCanvasIsShown = true ;
             SetViewport() ;
         }
     }
         {
             m_macCanvasIsShown = true ;
             SetViewport() ;
         }
     }
-        
-    wxWindow::MacSuperShown( show ) ;
+    wxWindowMac::MacVisibilityChanged() ;
 }
 
 //---------------------------------------------------------------------------
 }
 
 //---------------------------------------------------------------------------