From: Stefan Csomor Date: Mon, 28 Apr 2008 12:57:00 +0000 (+0000) Subject: adapted Julian's new speed improved version X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/cb751f46a0db6efd12b1e8f9d1074e71b6249253?ds=inline adapted Julian's new speed improved version git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@53399 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/mac/carbon/graphics.cpp b/src/mac/carbon/graphics.cpp index 80e114ea8b..b7a64d5726 100644 --- a/src/mac/carbon/graphics.cpp +++ b/src/mac/carbon/graphics.cpp @@ -2151,6 +2151,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; @@ -2166,7 +2168,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); } #endif