On Sat, 26 Jun 2021 15:40:47 GMT, Johan Vos <[email protected]> wrote:
> [Mac only] register system fonts.
> Fix for JDK-8246104
>
> The list of available fonts returned by
> CTFontCollectionCreateFromAvailableFonts does not contain internal fonts (at
> least not by default, although this is not documented). By registering
> font(s) (files), those fonts become available in the returned list.
> The CT Glyph processing might assign internal fonts to a glyph, and since we
> lookup the requested font in this list, we fail if the list doesn't contain
> the font.
> This PR registers all fonts in the system library so that they become
> available. This is not creating additional Java objects or overhead, as it
> almost directly invokes `CTFontManagerRegisterFontsForURL` via
> `CTFontFile.registerFont(String fontfile)`
modules/javafx.graphics/src/main/java/com/sun/javafx/font/MacFontFinder.java
line 83:
> 81: Stream<Path> stream =
> Files.list(Paths.get("/System/Library/Fonts"));
> 82: stream.forEach(f ->
> PrismFontFactory.getFontFactory().registerEmbeddedFont(f.toString()));
> 83: } catch (IOException e) {
registerEmbeddedFont() is intended to be used for fonts embedded in an
application not for system fonts.
Also is there anywhere else we are hard-coding /System/Library/Fonts. Apple
move things around.
Also as well as likely needing to use a different call to register, you should
make sure that the API
is registering all the fonts in a collection.
Finally (I think) what happens if you print ? The font info needs to be passed
over to J2D.
-------------
PR: https://git.openjdk.java.net/jfx/pull/547