X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e40298d54ecd5b109222a7c60aa2ef084a304d69..99e8cb505ad94704ec6596d20842ca8fa34e7d9e:/src/mac/glcanvas.cpp diff --git a/src/mac/glcanvas.cpp b/src/mac/glcanvas.cpp index 345fc2aeaf..e66592a619 100644 --- a/src/mac/glcanvas.cpp +++ b/src/mac/glcanvas.cpp @@ -91,7 +91,7 @@ void wxGLContext::Update() } } -void wxGLContext::SetColour(const char *colour) +void wxGLContext::SetColour(const wxChar *colour) { float r = 0.0; float g = 0.0; @@ -224,7 +224,7 @@ bool wxGLCanvas::Create(wxWindow *parent, const wxGLContext *shared, wxWindowID 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; @@ -249,18 +249,29 @@ void wxGLCanvas::SetViewport() 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(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 ) ; + } } void wxGLCanvas::OnSize(wxSizeEvent& event) @@ -298,12 +309,57 @@ void wxGLCanvas::SetCurrent() } } -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 ( MacIsReallyShown() && !m_macCanvasIsShown ) + { + m_macCanvasIsShown = true ; + SetViewport() ; + } + } + return TRUE ; +} + +void wxGLCanvas::MacSuperShown( bool show ) +{ + if ( !show ) + { + if ( m_macCanvasIsShown ) + { + m_macCanvasIsShown = false ; + SetViewport() ; + } + } + else + { + if ( MacIsReallyShown() && !m_macCanvasIsShown ) + { + m_macCanvasIsShown = true ; + SetViewport() ; + } + } + + wxWindow::MacSuperShown( show ) ; +} //--------------------------------------------------------------------------- // wxGLApp