On Wed, 15 Dec 2021 01:13:04 GMT, Sergey Bylokhov <[email protected]> wrote:

> I would like to clarify why we cannot merge the results of the 
> availableFontFamilies and availableFonts?

We can do it, if everyone is OK with increasing the scope of the change, due to 
the following factors:
* The number of fonts advertised via `GraphicsEnvironment.getAllFonts` and 
`GraphicsEnvironment.getAvailableFontFamilyNames` will increase, so a potential 
Java application showing a font chooser combo-box will display more fonts 
there, than a native macOS application. Not sure whether that's a good or a bad 
thing, but that's a change in behaviour that will occur.
* As the number of loaded fonts will increase, the execution time of 
`CFontManager.loadNativeFonts` will also increase, introducing a certain 
regression in Java UI application startup time. Ideally, this should be fixed 
simultaneously, e.g. by adjusting `sun.font.FontFamily` logic to perform style 
resolution lazily (when the particular family is accessed), not at the time 
`loadNativeFonts` is executed.
* `[NSFontManager availableFonts]` returns the fonts in alphabetical order, 
while `NSFontManager availableMembersOfFontFamily:]` (used currently) uses font 
weight to sort the results. The order in which fonts are processed during 
`loadNativeFonts` impacts the resulting resolution of fonts into styles in 
`FontFamily`. So, to keep the currently used approach, an additional fonts 
sorting would need to be introduced - that can be done, e.g. as part of lazy 
resolution in `FontFamily` mentioned above.

Even though it can make sense to implement all of the above (which JetBrains 
Runtime already does), I'd rather not do everything in one go. For now, what 
I'd like to achieve is to switch to 
`CTFontCopyDefaultCascadeListForLanguages`-based font fallback, as mentioned 
above. And current change, while having a value of its own, is a necessary step 
towards that.
If OpenJDK will ever switch to using `[NSFontManager availableFonts]`, as a 
sole source of system fonts or in addition to `[NSFontManager 
availableFontFamilies]`, this change can just be reverted.

-------------

PR: https://git.openjdk.java.net/jdk/pull/6633

Reply via email to