RFR: 8246104: Some complex text doesn't render correctly on macOS

Phil Race prr at openjdk.java.net
Thu Jul 1 20:56:01 UTC 2021


On Sat, 26 Jun 2021 15:40:47 GMT, Johan Vos <jvos at 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


More information about the openjfx-dev mailing list