Make the font cache a separate object #74
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This is a rather sizable refactor which aims to fix the [Windows] text rendering bugs introduced in #65.
Instead of creating
thread_local
globals inFont
for management of glyph caching, I've separated out the font cache into a newFontCache
object which exists independently of theCanvas*
andFont
objects. A font cache can be shared between any number of canvas instances, as long as one takes care not to use the cache simultaneously from multiple threads.One big downside of this change is that it breaks the existing
Font
API by moving theFont.string_width
method toFontCache.width
. Therefore I intend to bump the package's major version number to 2, as an extra warning to downstream users.Canvas*
classes also need to be passed aFontCache
instance at construction time, but existing code can continue to work without modification due to some Python wrappers in the package's__init__
module.It should fix #62, but some tests are needed.Fixes #62