[OpenJDK 2D-Dev] RFR: 8244621: [macos10.15] Garbled FX printing plus CoreText warnings on Catalina when building with Xcode 11
Prasanta Sadhukhan
prasanta.sadhukhan at oracle.com
Tue Jun 2 07:34:34 UTC 2020
Thanks Kevin for the clarification. Looks ok to me.
Only thing that can be thought of is to use
CTFontCreateUIFontForLanguage() (instead of [NSFont
systemFontOfSize:1.0]) similar to JDK-8234916(which is already
committed) just to have same approach, incase Apple changes anything in
future.
Regards
Prasanta
On 01-Jun-20 6:41 PM, Kevin Rushforth wrote:
> Hi Prasanta,
>
> No, the reason for the warning / garbled JavaFX printing in this
> Java2D bug (JDK-8244621) is *similar to* that of FX bug JDK-8234916,
> but in no way is one of them caused by the other.
>
> -- Kevin
>
>
> On 6/1/2020 5:21 AM, Prasanta Sadhukhan wrote:
>> Hi Phil,
>>
>> I was reading somewhere that the warning is caused by JDK-8234916.
>> Will we still get the problem if we remove 8234916?
>>
>> Regards
>> Prasanta
>> On 22-May-20 2:26 AM, 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.
>>>
>>>
>>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.java.net/pipermail/2d-dev/attachments/20200602/a683fff5/attachment.htm>
More information about the 2d-dev
mailing list