From 6c18db538faf7bab370c2c842da872ad7fa83e10 Mon Sep 17 00:00:00 2001 From: Stefan Csomor Date: Mon, 28 Apr 2008 13:09:20 +0000 Subject: [PATCH] adapted Julian's new speed improved version git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_8_BRANCH@53400 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/mac/carbon/graphics.cpp | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/mac/carbon/graphics.cpp b/src/mac/carbon/graphics.cpp index e7c8e6110d..2c9c1dad3d 100755 --- a/src/mac/carbon/graphics.cpp +++ b/src/mac/carbon/graphics.cpp @@ -1976,6 +1976,8 @@ void wxMacCoreGraphicsContext::GetPartialTextExtents(const wxString& text, wxArr status = ::ATSUSetTransientFontMatching( atsuLayout , true ); wxASSERT_MSG( status == noErr , wxT("couldn't setup transient font matching") ); +// new implementation from JS, keep old one just in case +#if 0 for ( int pos = 0; pos < (int)chars; pos ++ ) { unsigned long actualNumberOfBounds = 0; @@ -1991,6 +1993,31 @@ void wxMacCoreGraphicsContext::GetPartialTextExtents(const wxString& text, wxArr widths[pos] = FixedToInt( glyphBounds.upperRight.x - glyphBounds.upperLeft.x ); //unsigned char uch = s[i]; } +#else + ATSLayoutRecord *layoutRecords = NULL; + ItemCount glyphCount = 0; + + // Get the glyph extents + OSStatus err = ::ATSUDirectGetLayoutDataArrayPtrFromTextLayout(atsuLayout, + 0, + kATSUDirectDataLayoutRecordATSLayoutRecordCurrent, + (void **) + &layoutRecords, + &glyphCount); + wxASSERT(glyphCount == (text.length()+1)); + + if ( err == noErr && glyphCount == (text.length()+1)) + { + for ( int pos = 1; pos < (int)glyphCount ; pos ++ ) + { + widths[pos-1] = FixedToInt( layoutRecords[pos].realPos ); + } + } + + ::ATSUDirectReleaseLayoutDataArrayPtr(NULL, + kATSUDirectDataLayoutRecordATSLayoutRecordCurrent, + (void **) &layoutRecords); +#endif ::ATSUDisposeTextLayout(atsuLayout); #if SIZEOF_WCHAR_T == 4