Open waywardmonkeys opened 1 month ago
system
is the main point of fontique, so it being default makes sense, but that leads to the issue you describe.
There is also the issue of how to make a useful collection at all in WebAssembly, which I think would probably involve a considerable amount of support from the JavaScript side, or inlining a font into the wasm module (not necessarily the greatest solution either).
There is https://developer.mozilla.org/en-US/docs/Web/API/Local_Font_Access_API (only currently supported in Chrome and Edge 103 and later, but not Chrome for Android) ... but that would require having async APIs for WebAssembly.
Well, may not require async APIs for wasm, but rather that the loader take care of that stuff before starting the module (or that calls for the system fonts involve waiting). I was not aware that the Local Fonts API had rolled out to any stable browsers!
Looking into this, apparently it gives you the font data as Blob
, which unfortunately can not be mapped zero-copy into wasm memory (at least, not explicitly); so probably the useful way to implement this would be some sort of limited font library selected by the host and copied into the wasm memory.
Looking into it further, the Local Font Access API has to prompt for permission in a browser, and the message used is something about ‘creating high fidelity content’. If you're building something other than a graphics editor or a tech demo, then presumably a lot of people will click block on this and break your app.
FWIW: Aside from Chrome, the promise of this working well in either Firefox or Safari is not particularly rosy: https://github.com/mozilla/standards-positions/issues/401#issuecomment-2139560235
Building for WebAssembly targets with default features (read:
system
) is broken as there isn't an implementation for WebAssembly.fontique
build withno-default-features
and then enablesystem
on all but WebAssembly?system
feature? (Seems like it goes against the idea of asystem
feature.)system
not be enabled by default and let consuming crates enable it?