📄 control.cpp
字号:
}void wxControl::MacAdjustControlRect(){ wxASSERT_MSG( (ControlHandle) m_macControl != NULL , wxT("No valid mac control") ) ; if ( m_width == -1 || m_height == -1 ) { Rect bestsize = { 0 , 0 , 0 , 0 } ; short baselineoffset ; ::GetBestControlRect( (ControlHandle) m_macControl , &bestsize , &baselineoffset ) ; if ( EmptyRect( &bestsize ) ) { baselineoffset = 0; bestsize.left = bestsize.top = 0 ; bestsize.right = 16 ; bestsize.bottom = 16 ; if ( IsKindOf( CLASSINFO( wxScrollBar ) ) ) { bestsize.bottom = 16 ; } else if ( IsKindOf( CLASSINFO( wxSpinButton ) ) ) { bestsize.bottom = 24 ; } } if ( m_width == -1 ) { if ( IsKindOf( CLASSINFO( wxButton ) ) ) { m_width = m_label.length() * 8 + 12 ; if ( m_width < 70 ) m_width = 70 ; } else if ( IsKindOf( CLASSINFO( wxStaticText ) ) ) { m_width = m_label.length() * 8 ; } else m_width = bestsize.right - bestsize.left ; m_width += 2 * m_macHorizontalBorder + MacGetLeftBorderSize() + MacGetRightBorderSize() ; } if ( m_height == -1 ) { m_height = bestsize.bottom - bestsize.top ; if ( m_height < 10 ) m_height = 13 ; m_height += 2 * m_macVerticalBorder + MacGetTopBorderSize() + MacGetBottomBorderSize() ; } MacUpdateDimensions() ; }}WXWidget wxControl::MacGetContainerForEmbedding(){ if ( m_macControl ) return m_macControl ; return wxWindow::MacGetContainerForEmbedding() ;}void wxControl::MacUpdateDimensions(){ // actually in the current systems this should never be possible, but later reparenting // may become a reality if ( (ControlHandle) m_macControl == NULL ) return ; if ( GetParent() == NULL ) return ; WindowRef rootwindow = (WindowRef) MacGetRootWindow() ; if ( rootwindow == NULL ) return ; Rect oldBounds ; GetControlBounds( (ControlHandle) m_macControl , &oldBounds ) ; int new_x = m_x + MacGetLeftBorderSize() + m_macHorizontalBorder ; int new_y = m_y + MacGetTopBorderSize() + m_macVerticalBorder ; int new_width = m_width - MacGetLeftBorderSize() - MacGetRightBorderSize() - 2 * m_macHorizontalBorder ; int new_height = m_height - MacGetTopBorderSize() - MacGetBottomBorderSize() - 2 * m_macVerticalBorder ; GetParent()->MacWindowToRootWindow( & new_x , & new_y ) ; bool doMove = new_x != oldBounds.left || new_y != oldBounds.top ; bool doResize = ( oldBounds.right - oldBounds.left ) != new_width || (oldBounds.bottom - oldBounds.top ) != new_height ; if ( doMove || doResize ) { InvalWindowRect( rootwindow, &oldBounds ) ; if ( doMove ) { UMAMoveControl( (ControlHandle) m_macControl , new_x , new_y ) ; } if ( doResize ) { UMASizeControl( (ControlHandle) m_macControl , new_width , new_height ) ; } }}void wxControl::MacSuperChangedPosition(){ MacUpdateDimensions() ; wxWindow::MacSuperChangedPosition() ;}void wxControl::MacSuperEnabled( bool enabled ){ Refresh(false) ; wxWindow::MacSuperEnabled( enabled ) ;}void wxControl::MacSuperShown( bool show ){ if ( (ControlHandle) m_macControl ) { if ( !show ) { if ( m_macControlIsShown ) { ::UMAHideControl( (ControlHandle) m_macControl ) ; m_macControlIsShown = false ; } } else { if ( MacIsReallyShown() && !m_macControlIsShown ) { ::UMAShowControl( (ControlHandle) m_macControl ) ; m_macControlIsShown = true ; } } } wxWindow::MacSuperShown( show ) ;}void wxControl::DoSetSize(int x, int y, int width, int height, int sizeFlags ){ wxWindow::DoSetSize( x , y ,width , height ,sizeFlags ) ;#if 0 { Rect meta , control ; GetControlBounds( (ControlHandle) m_macControl , &control ) ; RgnHandle rgn = NewRgn() ; GetControlRegion( (ControlHandle) m_macControl , kControlStructureMetaPart , rgn ) ; GetRegionBounds( rgn , &meta ) ; if ( !EmptyRect( &meta ) ) { wxASSERT( meta.left >= control.left - m_macHorizontalBorder ) ; wxASSERT( meta.right <= control.right + m_macHorizontalBorder ) ; wxASSERT( meta.top >= control.top - m_macVerticalBorder ) ; wxASSERT( meta.bottom <= control.bottom + m_macVerticalBorder ) ; } DisposeRgn( rgn ) ; }#endif return ;}bool wxControl::Show(bool show){ if ( !wxWindow::Show( show ) ) return false ; if ( (ControlHandle) m_macControl ) { if ( !show ) { if ( m_macControlIsShown ) { ::UMAHideControl( (ControlHandle) m_macControl ) ; m_macControlIsShown = false ; } } else { if ( MacIsReallyShown() && !m_macControlIsShown ) { ::UMAShowControl( (ControlHandle) m_macControl ) ; m_macControlIsShown = true ; } } } return true ;}bool wxControl::Enable(bool enable){ if ( !wxWindow::Enable(enable) ) return false; if ( (ControlHandle) m_macControl ) { if ( enable ) UMAActivateControl( (ControlHandle) m_macControl ) ; else UMADeactivateControl( (ControlHandle) m_macControl ) ; } return true ;}void wxControl::Refresh(bool eraseBack, const wxRect *rect){ wxWindow::Refresh( eraseBack , rect ) ;}void wxControl::MacRedrawControl(){ if ( (ControlHandle) m_macControl && MacGetRootWindow() && m_macControlIsShown ) { wxClientDC dc(this) ; wxMacPortSetter helper(&dc) ; wxMacWindowClipper clipper(this) ; wxDC::MacSetupBackgroundForCurrentPort( MacGetBackgroundBrush() ) ; UMADrawControl( (ControlHandle) m_macControl ) ; }}void wxControl::OnPaint(wxPaintEvent& event){ if ( (ControlHandle) m_macControl ) { wxPaintDC dc(this) ; wxMacPortSetter helper(&dc) ; wxMacWindowClipper clipper(this) ; wxDC::MacSetupBackgroundForCurrentPort( MacGetBackgroundBrush() ) ; UMADrawControl( (ControlHandle) m_macControl ) ; } else { event.Skip() ; }}void wxControl::OnEraseBackground(wxEraseEvent& event){ wxWindow::OnEraseBackground( event ) ;}void wxControl::OnKeyDown( wxKeyEvent &event ){ if ( (ControlHandle) m_macControl == NULL ) return ;#if TARGET_CARBON char charCode ; UInt32 keyCode ; UInt32 modifiers ; GetEventParameter( (EventRef) wxTheApp->MacGetCurrentEvent(), kEventParamKeyMacCharCodes, typeChar, NULL,sizeof(char), NULL,&charCode ); GetEventParameter( (EventRef) wxTheApp->MacGetCurrentEvent(), kEventParamKeyCode, typeUInt32, NULL, sizeof(UInt32), NULL, &keyCode ); GetEventParameter((EventRef) wxTheApp->MacGetCurrentEvent(), kEventParamKeyModifiers, typeUInt32, NULL, sizeof(UInt32), NULL, &modifiers); ::HandleControlKey( (ControlHandle) m_macControl , keyCode , charCode , modifiers ) ;#else EventRecord *ev = (EventRecord*) wxTheApp->MacGetCurrentEvent() ; short keycode ; short keychar ; keychar = short(ev->message & charCodeMask); keycode = short(ev->message & keyCodeMask) >> 8 ; ::HandleControlKey( (ControlHandle) m_macControl , keycode , keychar , ev->modifiers ) ;#endif}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() ; }}bool wxControl::MacCanFocus() const{ if ( (ControlHandle) m_macControl == NULL ) return true ; else return false ;}void wxControl::MacHandleControlClick( WXWidget control , wxInt16 controlpart , bool WXUNUSED( mouseStillDown ) ){ wxASSERT_MSG( (ControlHandle) m_macControl != NULL , wxT("No valid mac control") ) ;}void wxControl::DoSetWindowVariant( wxWindowVariant variant ){ if ( m_macControl == NULL ) { wxWindow::SetWindowVariant( variant ) ; return ; } m_windowVariant = variant ; ControlSize size ; ControlFontStyleRec fontStyle; fontStyle.flags = kControlUseFontMask ; // we will get that from the settings later // and make this NORMAL later, but first // we have a few calculations that we must fix if ( variant == wxWINDOW_VARIANT_NORMAL ) { if ( IsKindOf( CLASSINFO( wxScrollBar ) ) ) variant = wxWINDOW_VARIANT_NORMAL ; else variant = wxWINDOW_VARIANT_SMALL ; } switch ( variant ) { case wxWINDOW_VARIANT_NORMAL : size = kControlSizeNormal; fontStyle.font = kControlFontBigSystemFont; break ; case wxWINDOW_VARIANT_SMALL : size = kControlSizeSmall; fontStyle.font = kControlFontSmallSystemFont; break ; case wxWINDOW_VARIANT_MINI : if (UMAGetSystemVersion() >= 0x1030 ) { size = 3 ; // not always defined in the header fontStyle.font = -5 ; // not always defined in the header } else { size = kControlSizeSmall; fontStyle.font = kControlFontSmallSystemFont; } break; break ; case wxWINDOW_VARIANT_LARGE : size = kControlSizeLarge; fontStyle.font = kControlFontBigSystemFont; break ; default: wxFAIL_MSG(_T("unexpected window variant")); break ; } ::SetControlData( (ControlHandle) m_macControl , kControlEntireControl, kControlSizeTag, sizeof( ControlSize ), &size ); ::SetControlFontStyle( (ControlHandle) m_macControl , &fontStyle );}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -