RFR: 8329098: Support "@1x" image naming convention as fallback [v2]
John Hendrikx
jhendrikx at openjdk.org
Wed Oct 16 13:19:15 UTC 2024
On Wed, 16 Oct 2024 11:30:26 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.
>
> Lukasz Kostyra has updated the pull request incrementally with one additional commit since the last revision:
>
> Review fixes
>
> - Change exception message in loadAll() to include original resource
> path
> - Add a test case to ImageStorageTest checking if we load a correct
> resource when both <res> and <res>@1x are present
@mstr2 as you're busy in the `ImageStorage` class as well and know how it works, perhaps you could take a peek at this PR as well.
modules/javafx.graphics/src/main/java/com/sun/javafx/iio/ImageStorage.java line 385:
> 383: try {
> 384: theStream = ImageTools.createInputStream(input);
> 385: } catch (IOException ignored) {
It looks like this abstracts away errors like `FileNotFoundException`, and it will do a fallback in all cases, even if it is not a 404 or `FileNotFoundException` -- errors like network problems, permission problems, etc, will also trigger a fallback (likely resulting in the same error). But it could also be a different error, hiding the original problem.
In Java we have the option to add a 'surpressed' exception. You could attach it to the 2nd exception, so the original cause of the problem (which could be a permission problem for example) is not lost.
Maybe I'm being too picky :)
modules/javafx.graphics/src/main/java/com/sun/javafx/iio/ImageStorage.java line 392:
> 390: try {
> 391: // last fallback, try to see if the file exists with @1x suffix
> 392: String scaled1xName = ImageTools.getScaledImageName(input, 1);
I think this function does not properly handle cases where the input may already have a scale specified.
If I want to load `testimg at 1x.png` then this function will return `testimg at 1x@1x.png`
I'm not sure what is normal here, but I'd think that if a scale was already specified that we shouldn't do any fallback.
-------------
PR Review: https://git.openjdk.org/jfx/pull/1598#pullrequestreview-2372422385
PR Review Comment: https://git.openjdk.org/jfx/pull/1598#discussion_r1803081373
PR Review Comment: https://git.openjdk.org/jfx/pull/1598#discussion_r1803073434
More information about the openjfx-dev
mailing list