Closed laurmaedje closed 4 months ago
Bumped fontdb
Bumped fontdb
Thanks, that was quick! Since this PR doesn't directly depend on the fontdb changes (only users need it), the dependency can be updated separately from this PR, but if you want I can also update it here.
Let update fontdb as well.
Done
I guess we're ready for a new resvg release?
More than ready! 😄
This PR adds support for user-provided font loading callbacks.
Here is small overview of the changes:
Options
now contain anArc<Database>
and a newFontResolver<'a>
. Thefontdb
arguments on other top-level functions were removed.ImageHrefResolver
is nowImageHrefResolver<'a>
(since it might as well). With the default resolvers, you just getOptions<'static>
.&mut Arc<Database>
, so they can mutate the database withArc::make_mut
if necessary, but if they don't need to add a font, we don't force the database to be cloned.Arc<Database>
in theCache
, which is populated over the course of conversion. It is only cloned if fonts are actually added.Cache
is moved into theTree
after conversion and users can access it withtree.fontdb()
to make sense of theID
s in theirSpan
s.Options
, but share the same resolver.Options
is never mutated (it's&Options
after all)One small change in
fontdb
is necessary to make writing a customFontResolver
possible, or at least convenient: The best function to add a new font ispush_face_info
, but it doesn't return the newID
it assigned. I've opened https://github.com/RazrFalcon/fontdb/pull/66 to change that. As it is a breaking change, resvg would need to update to a new release of fontdb. (Alternatively, we could make it non-breaking with a new function.)Supersedes https://github.com/RazrFalcon/resvg/pull/754