void wxGLCanvas::SetViewport() { // viewport is initially set to entire port // adjust glViewport to just this window int x = 0 ; int y = 0 ; wxWindow* iter = this ; while( iter->GetParent() ) { iter = iter->GetParent() ; } 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 wxControl::OnMouseEvent( wxMouseEvent &event ) { if ( (ControlHandle) m_macControl == NULL ) { event.Skip() ; return ; } if (event.GetEventType() == wxEVT_LEFT_DOWN || event.GetEventType() == wxEVT_LEFT_DCLICK ) { int x = event.m_x ; int y = event.m_y ; MacClientToRootWindow( &x , &y ) ; ControlHandle control ; Point localwhere ; SInt16 controlpart ; localwhere.h = x ; localwhere.v = y ; short modifiers = 0; if ( !event.m_leftDown && !event.m_rightDown ) modifiers |= btnState ; if ( event.m_shiftDown ) modifiers |= shiftKey ; if ( event.m_controlDown ) modifiers |= controlKey ; if ( event.m_altDown ) modifiers |= optionKey ; if ( event.m_metaDown ) modifiers |= cmdKey ; { control = (ControlHandle) m_macControl ; if ( control && ::IsControlActive( control ) ) { { controlpart = ::HandleControlClick( control , localwhere , modifiers , (ControlActionUPP) -1 ) ; wxTheApp->s_lastMouseDown = 0 ; if ( control && controlpart != kControlNoPart ) { MacHandleControlClick( (WXWidget) control , controlpart , false /* mouse not down anymore */ ) ; } } } } } else { event.Skip() ; } }
void wxGLCanvas::SetViewport() { #ifndef __LP64__ // viewport is initially set to entire port // adjust glViewport to just this window int x = 0 ; int y = 0 ; wxWindow* iter = this ; while( iter->GetParent() ) { iter = iter->GetParent() ; } if ( iter && iter->IsTopLevel() ) { MacClientToRootWindow( &x , &y ) ; int width, height; GetClientSize(& width, & height); Rect bounds ; #if 0 // TODO in case we adopt point vs pixel coordinates, this will make the conversion GetWindowPortBounds( MAC_WXHWND(MacGetTopLevelWindowRef()) , &bounds ) ; HIRect hiRect = CGRectMake( x, y, width, height ) ; HIRectConvert( &hiRect, kHICoordSpace72DPIGlobal, NULL, kHICoordSpaceScreenPixel, NULL) ; HIRect hiBounds = CGRectMake( 0, 0, bounds.right - bounds.left , bounds.bottom - bounds.top ) ; HIRectConvert( &hiBounds, kHICoordSpace72DPIGlobal, NULL, kHICoordSpaceScreenPixel, NULL) ; GLint parms[4] ; parms[0] = hiRect.origin.x ; parms[1] = hiBounds.size.height - (hiRect.origin.y + hiRect.size.height) ; parms[2] = hiRect.size.width ; parms[3] = hiRect.size.height ; #else 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 ; #endif if ( !m_macCanvasIsShown ) parms[0] += 20000 ; aglSetInteger( m_glContext->m_glContext , AGL_BUFFER_RECT , parms ) ; aglUpdateContext(m_glContext->m_glContext); } #endif }
void wxGLCanvas::SetViewport() { if ( !m_needsUpdate ) return; m_needsUpdate = false; // AGLContext context = aglGetCurrentContext(); // if ( !context ) // return; // viewport is initially set to entire port, adjust it to just this window int x = 0, y = 0; 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; // move the buffer rect out of sight if we're hidden if ( !m_macCanvasIsShown ) parms[0] += 20000; if ( !aglSetInteger(m_dummyContext, AGL_BUFFER_RECT, parms) ) wxLogAGLError("aglSetInteger(AGL_BUFFER_RECT)"); if ( !aglEnable(m_dummyContext, AGL_BUFFER_RECT) ) wxLogAGLError("aglEnable(AGL_BUFFER_RECT)"); if ( !aglUpdateContext(m_dummyContext) ) wxLogAGLError("aglUpdateContext"); }