Thanks, Igor, I created an entry in the Pharo tracker with a link to the Mantis entry to allow us to keep track of its integration into Pharo. http://code.google.com/p/pharo/issues/detail?id=758 Cheers, Adrian http://code.google.com/p/pharo/issues/detail?id=758 On Apr 19, 2009, at 15:36 , Igor Stasenko wrote:
I put this on mantis, since i'm sure this applies to squeak3.10 and Pharo both.
http://bugs.squeak.org/view.php?id=7338
---------- Forwarded message ---------- From: Igor Stasenko <siguctua@gmail.com> Date: 2009/4/19 Subject: A little font rendering speedup To: Pharo Development <Pharo-project@lists.gforge.inria.fr>
This is an image-side change, which makes a primitiveDisplayString to not fail because StrikeFontSet returns nil for (font characterToGlyphMap).
Since the code, which using fast primitive looks like following:
self primDisplayString: aString from: startIndex to: stopIndex map: font characterToGlyphMap xTable: font xTable kern: kernDelta
I thought, why one would return nil in ( font characterToGlyphMap ). Since #xTable in StrikeFontSet implemented as following:
xTable "Answer an Array of the left x-coordinate of characters in glyphs."
^ (fontArray at: 1) xTable.
i think it is safe to do similar in characterToGlyphMap , this allows the primitive to work w/o failure, because otherwise, if you look at implementation of
primDisplayString: aString from: startIndex to: stopIndex map: glyphMap xTable: xTable kern: kernDelta
in fallback code it does same thing again (and ignoring glyphMap at all, btw).
To bench a difference, leave a couple of windows with text in world and then do:
[10 timesRepeat: [World fullDrawOn: World assuredCanvas] ] timeToRun
before change:
645
after change:
545
-- Best regards, Igor Stasenko AKA sig. <StrikeFontSet-characterToGlyphMap.st>