[prev in list] [next in list] [prev in thread] [next in thread]
List: openjdk-openjfx-dev
Subject: Re: RFR: 8234916: [macos 10.15] Garbled text running with native-image
From: Kevin Rushforth <kcr () openjdk ! java ! net>
Date: 2019-11-27 19:51:38
Message-ID: wT8lpRGn7EvfCBa4aXWUGWaGAETYMlyEWJ642HE7R9o=.814310d1-08cd-4cfa-bf59-a7a8f3220e59 () github ! com
[Download RAW message or body]
On Wed, 27 Nov 2019 17:06:13 GMT, Jose Pereda <jpereda@openjdk.org> wrote:
> Running on MacOS Catalina, when doing static builds of `libjavafx_font.a` and \
> linking against this in a JavaFX app compiled with GraalVM native-image, if default \
> fonts are used, the rendered text is garbled, and a warning message is printed:
> CoreText note: Client requested name ".SFUI-Regular", it will get TimesNewRomanPSMT \
> rather than the intended font. All system UI font access should be through proper \
> APIs such as CTFontCreateUIFontForLanguage() or +[UIFont systemFontOfSize:]. \
> CoreText note: Set a breakpoint on CTFontLogSystemFontNameRequest to debug.
> On Mac OS, when a map with all the regular fonts is created, we also add two system \
> fonts: [System regular](https://github.com/openjdk/jfx/blob/master/modules/javafx.graphics/src/main/native-font/MacFontFinder.c#L178), \
> and [System bold](https://github.com/openjdk/jfx/blob/master/modules/javafx.graphics/src/main/native-font/MacFontFinder.c#L187). \
> These will be the default fonts to be used if the project doesn't specify a font.
> On runtime, when a font is \
> [created](https://github.com/openjdk/jfx/blob/master/modules/javafx.graphics/src/main/java/com/sun/javafx/font/coretext/CTFontStrike.java#L90), \
> `CTFontCreateWithName` is \
> [used](https://github.com/openjdk/jfx/blob/master/modules/javafx.graphics/src/main/native-font/coretext.c#L391), \
> which according to Apple guidelines should be used only for the regular fonts \
> (those that are not system fonts). In fact the above warning doesn't happen when \
> creating any of those fonts.
> Following the warning message, one of the options to create system fonts is to use \
> `CTFontCreateUIFontForLanguage`, which according to the documentation in \
> `CTFont.h`:
> > Returns the special UI font for the given language and UI type.
>
> and matches what we already do in `MacFontFinder` to create such fonts. (The other \
> option will require the use of UIKit.)
>
> This PR modifies `CTFontCreateWithName` in `coretext.c` to detect if the font is a \
> system font in the first place, else use the same existing mechanism.
> As an aside, the constants `kCTFontSystemFontType` and \
> `kCTFontEmphasizedSystemFontType` are deprecated, and this PR uses now the new \
> ones, but in both cases their int value is the same (2 and 3, in that order). As a \
> follow-up PR, we could replace these deprecated constants.
> ----------------
>
> Commits:
> - 693dfa78: Use CTFontCreateUIFontForLanguage for system fonts
>
> Changes: https://git.openjdk.java.net/jfx/pull/55/files
> Webrev: https://webrevs.openjdk.java.net/jfx/55/webrev.00
> Issue: https://bugs.openjdk.java.net/browse/JDK-8234916
> Stats: 9 lines in 1 file changed: 8 ins; 0 del; 1 mod
> Patch: https://git.openjdk.java.net/jfx/pull/55.diff
> Fetch: git fetch https://git.openjdk.java.net/jfx pull/55/head:pull/55
This seems simple enough that one reviewer should be sufficient (unless Phil thinks \
otherwise).
PR: https://git.openjdk.java.net/jfx/pull/55
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic