- int x = 0 ;
- int y = 0 ;
- int i = 0 ;
- long width, height ;
- bool linedrawn = true;
- while( paragraph.Length() > 0 )
- {
- dc.GetTextExtent( paragraph , &width , &height ) ;
-
- if ( width > m_width )
- {
- for ( int p = paragraph.Length() -1 ; p > 0 ; --p )
- {
- if ((punct.Find(paragraph[p]) != wxNOT_FOUND) || !linedrawn)
- {
- int blank = (paragraph[p] == ' ') ? 0 : 1;
-
- dc.GetTextExtent( paragraph.Left(p + blank) , &width , &height ) ;
-
- if ( width <= m_width )
- {
- int pos = x ;
- if ( HasFlag( wxALIGN_CENTER ) )
- {
- pos += ( m_width - width ) / 2 ;
- }
- else if ( HasFlag( wxALIGN_RIGHT ) )
- {
- pos += ( m_width - width ) ;
- }
-
- dc.DrawText( paragraph.Left(p + blank), pos , y) ;
- y += height ;
- paragraph = paragraph.Mid(p+1) ;
- linedrawn = true;
- break ;
- }
- }
- }
-
- linedrawn = false;
- }
- else
- {
- int pos = x ;
- if ( HasFlag( wxALIGN_CENTER ) )
- {
- pos += ( m_width - width ) / 2 ;
- }
- else if ( HasFlag( wxALIGN_RIGHT ) )
- {
- pos += ( m_width - width ) ;
- }
-
- dc.DrawText( paragraph, pos , y) ;
- paragraph="";
- y += height ;
- }
- }
+ ControlFontStyleRec controlFont ;
+ Size outSize ;
+ verify_noerr( GetControlData( *m_peer , kControlEntireControl , kControlFontStyleTag , sizeof(controlFont) , &controlFont , &outSize ) ) ;
+
+ Point bounds ;
+ SInt16 baseline ;
+ wxMacCFStringHolder str(m_label , m_font.GetEncoding() ) ;
+ if ( m_font.MacGetThemeFontID() != kThemeCurrentPortFont )
+ verify_noerr( GetThemeTextDimensions( (m_label.Length() > 0 ? ((CFStringRef) str ) : CFSTR(" ") ) , m_font.MacGetThemeFontID() , kThemeStateActive , false , &bounds , &baseline ) ) ;
+ else
+ {
+ wxMacWindowStateSaver sv( this ) ;
+ ::TextFont( m_font.MacGetFontNum() ) ;
+ ::TextSize( (short)( m_font.MacGetFontSize()) ) ;
+ ::TextFace( m_font.MacGetFontStyle() ) ;
+ verify_noerr( GetThemeTextDimensions( (m_label.Length() > 0 ? ((CFStringRef) str ) : CFSTR(" ") ) , kThemeCurrentPortFont , kThemeStateActive , false , &bounds , &baseline ) ) ;
+ }
+ if ( m_label.Length() == 0 )
+ bounds.h = 0 ;
+ return wxSize(bounds.h, bounds.v);