RFR: 8329098: Support "@1x" image naming convention as fallback

Kevin Rushforth kcr at openjdk.org
Tue Oct 15 00:08:14 UTC 2024


On Fri, 11 Oct 2024 10:57:34 GMT, Lukasz Kostyra <lkostyra at openjdk.org> wrote:

> This PR adds a title-mentioned fallback to `ImageStorage.java` and a test for that specific scenario.
> 
> In `ImageStorage.loadAll()` we still prefer the Image path that was provided by the user, but if it is missing we will now try to add a `@1x` suffix to Image name and give it one last try.
> 
> Added test includes a binary file `checkers at 1x.png`. This was added to differentiate it from the collection of `checker.png` files and their higher scale variants, but it is a direct copy of already existing `checker.png` test resource, just with a different name and suffix. Test should fail without a change in `ImageStorage.java` and pass with it.

I left one minor comment on the fallback and one minor comment on the test. I don't think either of them are that important, so I'll approve it as is. I'll reapprove if you decide to make any changes.

modules/javafx.graphics/src/main/java/com/sun/javafx/iio/ImageStorage.java line 392:

> 390:                         // last fallback, try to see if the file exists with @1x suffix
> 391:                         String scaled1xName = ImageTools.getScaledImageName(input, 1);
> 392:                         theStream = ImageTools.createInputStream(scaled1xName);

The fallback code looks good with one comment. Because you catch and ignore the previous exception and let this one propagate, if neither the original image name nor any `@1x`, `@2x`,  ... name can be found, the exception thrown will no longer have the original name in the exception message, but will instead have the `@1x` name.

You can see this if you run with `-Dprism.verbose=true` and try to load a non-existent file or URL.

Maybe catch the exception on line 386 and then rethrow that so the error message is more understandable (alternatively, wrap the exception in a message that has the original input String as part of its message)?

modules/javafx.graphics/src/test/java/test/com/sun/javafx/iio/ImageStorageTest.java line 63:

> 61: 
> 62:     @Test
> 63:     public void testImageNameFallbackTo1X() throws ImageStorageException {

This will test that the fallback works if there is an `@1x` name without the base name being present. Good.

Can you think of a good way to test that it will _only_ fall back if there is no image name without any `@Nx`? Other than creating a pair of images that are different (e.g., differently sized) and seeing if it loads the one you expect, I can't think of a good way. It might or might not be worth doing.

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

Marked as reviewed by kcr (Lead).

PR Review: https://git.openjdk.org/jfx/pull/1598#pullrequestreview-2367833926
PR Review Comment: https://git.openjdk.org/jfx/pull/1598#discussion_r1800240151
PR Review Comment: https://git.openjdk.org/jfx/pull/1598#discussion_r1800246848


More information about the openjfx-dev mailing list