On Sat, 26 Jun 2021 15:40:47 GMT, Johan Vos <j...@openjdk.org> 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