> This PR adds a couple of null checks to `LogicalFont` and `FTFactory`, that 
> make use of `FontConfigManager::getFontConfigFont`, which under certain 
> cases, can return null.
> 
> I've tested this PR on both Linux (Ubuntu 22.04.4) and Android, just using 
> `-Dprism.useFontConfig=false`.
> 
> On Ubuntu, I've manually added some font files to the JDK path 
> `$JAVA_HOME/lib/fonts` (which didn't exist), and the test passes now, though 
> this message is still printed out:
> 
> Error: JavaFX detected no fonts! Please refer to release notes for proper 
> font configuration
> 
> which is confusing to me, because fonts where found in the JDK path after 
> all, and even in the case that there were no fonts found, "the release notes" 
> is an ambiguous reference for the user. 
> 
> Also, instead of adding fonts to the JDK, I tested adding a 
> `logicalfonts.properties` file with `-Dprism.fontdir` and without 
> `fontConfig`, but this case was already working before the patch for this PR, 
> and still works after it.
> 
> Note that if there are no fonts in the JDK path, and `prism.fontdir` is not 
> provided, without `fontConfig`, after this PR, there will still be an 
> exception:
> 
> 
> Caused by: java.lang.NullPointerException: Cannot invoke 
> "com.sun.javafx.font.FontResource.getDefaultAAMode()" because the return 
> value of "com.sun.javafx.font.LogicalFont.getSlot0Resource()" is null
>         at 
> javafx.graphics@24-internal/com.sun.javafx.font.LogicalFont.getDefaultAAMode(LogicalFont.java:456)
>         at 
> javafx.graphics@24-internal/com.sun.javafx.font.LogicalFont.getStrike(LogicalFont.java:461)
>         at 
> javafx.graphics@24-internal/com.sun.javafx.font.PrismFont.getStrike(PrismFont.java:79)
>         at 
> javafx.graphics@24-internal/com.sun.javafx.text.PrismTextLayout.setContent(PrismTextLayout.java:139)
>         at 
> javafx.graphics@24-internal/javafx.scene.text.Text.getTextLayout(Text.java:303)
>         at 
> javafx.graphics@24-internal/javafx.scene.text.Text.needsFullTextLayout(Text.java:258)
>         at 
> javafx.graphics@24-internal/javafx.scene.text.Text$6.invalidated(Text.java:576)
>  ...
> 
> 
> because `LogicalFont::getSlot0Resource` will return null. Adding null checks 
> after this point will require many changes (`LogicalFont::getSlotResource(0)` 
> is used in many places). Shouldn't we fail gracefully after 
> `LogicalFont::getSlot0Resource` if `slot0FontResource` is finally null?

Jose Pereda has updated the pull request incrementally with one additional 
commit since the last revision:

  Use isLinux in FTFactory instead of null check

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

Changes:
  - all: https://git.openjdk.org/jfx/pull/1546/files
  - new: https://git.openjdk.org/jfx/pull/1546/files/e080a4a5..a6fe2e7d

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jfx&pr=1546&range=01
 - incr: https://webrevs.openjdk.org/?repo=jfx&pr=1546&range=00-01

  Stats: 11 lines in 1 file changed: 6 ins; 4 del; 1 mod
  Patch: https://git.openjdk.org/jfx/pull/1546.diff
  Fetch: git fetch https://git.openjdk.org/jfx.git pull/1546/head:pull/1546

PR: https://git.openjdk.org/jfx/pull/1546

Reply via email to