[OpenJDK 2D-Dev] RFR: 8244621: [macos10.15] Garbled FX printing plus CoreText warnings on Catalina when building with Xcode 11

Kevin Rushforth kevin.rushforth at oracle.com
Thu May 21 21:16:18 UTC 2020


+1

In case you want to fix it before you push, you have trailing whitespace 
in the file (jcheck won't complain since it doesn't check .m files, so 
no worries if you don't).

-- Kevin


On 5/21/2020 1:56 PM, Philip Race wrote:
> Bug: https://bugs.openjdk.java.net/browse/JDK-8244621
> Webrev : http://cr.openjdk.java.net/~prr/8244621/
>
> macOS ships some UI fonts which it does not enumerate, all having 
> names beginning with "."
> It expects you to create them using APIs such as
> CTFontCreateUIFontForLanguage(kCTFontSystemFontType, 0, NULL);
> or
> nsFont = [NSFont systemFontOfSize:1.0];
>
> In apps built with all SDKs to date, so long as you can get the real 
> "." name you can still
> request it by name.
>
> But with the latest Xcode 11 this not only prints a warning that you 
> should not do it,
> it also gives you Times New Roman instead - not a standard UI font - 
> probably a choice
> so it is obvious it is not a UI font.
>
> Our problem here is that JavaFX uses the system font as its "logical" 
> font called System
> and also JavaFX uses Java 2D for printing. It messages over the ".*" 
> name to Java 2D
> to use as the font to print. But with the latest Xcode 2D is not 
> allowed to create the font using that name.
>
> This fix changes the JDK code for macOS that creates the native font 
> pointer to check if the name being requested
> is one of the UI fonts. If it is, then it uses the NSFont 
> systemFontOfSize API to create the font, which fixes the problem.
>
> If someone asks for a random name such as ".foo"
> Note that
> 1) JDK only enumerates the regular and bold system font which is all 
> FX uses.
>
> 2) The fix *could* have just tested to see if the requested name 
> begins with "." and that worked too but it
> wasn't clear what would happen if there is some other font called 
> ".Foo". We tested and
> names starting with "." seem to be absolutely reserved for these 
> system fonts on macOS
> If you see such a font. it is a system font. We tested and if you have 
> a random name such as ".FOO"
> macOS does the same thing - it assumes it is a system font and won't 
> give it to you.
> So probably testing for a "." prefix would have been OK but as written 
> it is more certain and
> is robust against Apple changing the nameing scheme to be (sa) a "~" 
> prefix.
>
> No regression test as this isn't easily testable and the main place it 
> matters is FX printing.
> However we've verified this on 10.13.6 with the old tool chain and 
> 10.15.2 with the new toolchain
> and fixes the warnings and FX printing.
>
> The removal of adding the fixed width font is because we never needed 
> it and it is just Monaco anyway ...
>
> -phil.
>
>
>



More information about the 2d-dev mailing list