/////////////////////////////////////////////////////////////////////////////
// Name: glcanvas.cpp
-// Purpose: wxGLCanvas, for using OpenGL with wxWindows under Macintosh
+// Purpose: wxGLCanvas, for using OpenGL with wxWidgets under Macintosh
// Author: Stefan Csomor
// Modified by:
// Created: 1998-01-01
#include "wx/glcanvas.h"
#include "wx/mac/uma.h"
+// DLL options compatibility check:
+#include "wx/build.h"
+WX_CHECK_BUILD_OPTIONS("wxGL")
+
/*
* GLContext implementation
*/
{
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") );
}
}
-void wxGLContext::SetColour(const char *colour)
+void wxGLContext::SetColour(const wxChar *colour)
{
- float r = 0.0;
- float g = 0.0;
- float b = 0.0;
- wxColour *col = wxTheColourDatabase->FindColour(colour);
- if (col)
+ wxColour col = wxTheColourDatabase->Find(colour);
+ if (col.Ok())
{
- r = (float)(col->Red()/256.0);
- g = (float)(col->Green()/256.0);
- b = (float)(col->Blue()/256.0);
+ float r = (float)(col.Red()/256.0);
+ float g = (float)(col.Green()/256.0);
+ float b = (float)(col.Blue()/256.0);
glColor3f( r, g, b);
}
}
wxCHECK_MSG( fmt, false, wxT("Couldn't create OpenGl pixel format") );
m_glContext = new wxGLContext(fmt, this, palette, shared);
-
+ m_macCanvasIsShown = true ;
aglDestroyPixelFormat(fmt);
return true;
int x = 0 ;
int y = 0 ;
- 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 ;
+ wxWindow* iter = this ;
+ while( iter->GetParent() )
+ {
+ iter = iter->GetParent() ;
+ }
- aglSetInteger( m_glContext->m_glContext , AGL_BUFFER_RECT , parms ) ;
+ if ( iter && iter->IsTopLevel() )
+ {
+ 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::SetColour(const char *colour)
+void wxGLCanvas::SetColour(const wxChar *colour)
{
if (m_glContext)
m_glContext->SetColour(colour);
}
+bool wxGLCanvas::Show(bool show)
+{
+ if ( !wxWindow::Show( show ) )
+ return FALSE ;
+/*
+ if ( !show )
+ {
+ if ( m_macCanvasIsShown )
+ {
+ m_macCanvasIsShown = false ;
+ SetViewport() ;
+ }
+ }
+ else
+ {
+ if ( m_peer->IsVisible()&& !m_macCanvasIsShown )
+ {
+ m_macCanvasIsShown = true ;
+ SetViewport() ;
+ }
+ }
+*/
+ return TRUE ;
+}
+
+void wxGLCanvas::MacVisibilityChanged()
+{
+ if ( !MacIsReallyShown() )
+ {
+ if ( m_macCanvasIsShown )
+ {
+ m_macCanvasIsShown = false ;
+ SetViewport() ;
+ }
+ }
+ else
+ {
+ if ( !m_macCanvasIsShown )
+ {
+ m_macCanvasIsShown = true ;
+ SetViewport() ;
+ }
+ }
+ wxWindowMac::MacVisibilityChanged() ;
+}
//---------------------------------------------------------------------------
// wxGLApp