wxSize wxStaticText::DoGetBestSize() const { Rect bestsize = { 0 , 0 , 0 , 0 } ; Point bounds; // try the built-in best size if available Boolean former = m_peer->GetData<Boolean>( kControlStaticTextIsMultilineTag); m_peer->SetData( kControlStaticTextIsMultilineTag, (Boolean)0 ); m_peer->GetBestRect( &bestsize ) ; m_peer->SetData( kControlStaticTextIsMultilineTag, former ); if ( !EmptyRect( &bestsize ) ) { bounds.h = bestsize.right - bestsize.left ; bounds.v = bestsize.bottom - bestsize.top ; } else { ControlFontStyleRec controlFont; OSStatus err = m_peer->GetData<ControlFontStyleRec>( kControlEntireControl, kControlFontStyleTag, &controlFont ); verify_noerr( err ); SInt16 baseline; wxMacCFStringHolder str( m_label, m_font.GetEncoding() ); #ifndef __LP64__ if ( m_font.MacGetThemeFontID() != kThemeCurrentPortFont ) { err = GetThemeTextDimensions( (!m_label.empty() ? (CFStringRef)str : CFSTR(" ")), m_font.MacGetThemeFontID(), kThemeStateActive, false, &bounds, &baseline ); verify_noerr( err ); } else #endif { #if wxMAC_USE_CORE_GRAPHICS wxClientDC dc(const_cast<wxStaticText*>(this)); wxCoord width, height ; dc.GetTextExtent( m_label , &width, &height); bounds.h = width; bounds.v = height; #else wxMacWindowStateSaver sv( this ); ::TextFont( m_font.MacGetFontNum() ); ::TextSize( (short)(m_font.MacGetFontSize()) ); ::TextFace( m_font.MacGetFontStyle() ); err = GetThemeTextDimensions( (!m_label.empty() ? (CFStringRef)str : CFSTR(" ")), kThemeCurrentPortFont, kThemeStateActive, false, &bounds, &baseline ); verify_noerr( err ); #endif } if ( m_label.empty() ) bounds.h = 0; } bounds.h += MacGetLeftBorderSize() + MacGetRightBorderSize(); bounds.v += MacGetTopBorderSize() + MacGetBottomBorderSize(); return wxSize( bounds.h, bounds.v ); }
void wxSlider::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 ; int xborder, yborder; int minValWidth, maxValWidth, textwidth, textheight; int sliderBreadth; xborder = yborder = 0; if (GetWindowStyle() & wxSL_LABELS) { wxString text; int ht; // Get maximum text label width and height text.Printf(wxT("%d"), m_rangeMin); GetTextExtent(text, &minValWidth, &textheight); text.Printf(wxT("%d"), m_rangeMax); GetTextExtent(text, &maxValWidth, &ht); if(ht > textheight) { textheight = ht; } textwidth = (minValWidth > maxValWidth ? minValWidth : maxValWidth); xborder = textwidth + wxSLIDER_BORDERTEXT; yborder = textheight + wxSLIDER_BORDERTEXT; // Get slider breadth if(GetWindowStyle() & wxSL_AUTOTICKS) { sliderBreadth = wxSLIDER_DIMENSIONACROSS_WITHTICKMARKS; } else { sliderBreadth = wxSLIDER_DIMENSIONACROSS_ARROW; } if(GetWindowStyle() & wxSL_VERTICAL) { m_macMinimumStatic->Move(sliderBreadth + wxSLIDER_BORDERTEXT, m_height - yborder - textheight); m_macMaximumStatic->Move(sliderBreadth + wxSLIDER_BORDERTEXT, 0); m_macValueStatic->Move(0, m_height - textheight); } else { m_macMinimumStatic->Move(0, sliderBreadth + wxSLIDER_BORDERTEXT); m_macMaximumStatic->Move(m_width - xborder - maxValWidth / 2, sliderBreadth + wxSLIDER_BORDERTEXT); m_macValueStatic->Move(m_width - textwidth, 0); } } 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 - xborder ; int new_height = m_height - MacGetTopBorderSize() - MacGetBottomBorderSize() - 2 * m_macVerticalBorder - yborder ; 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 ) ; } } }