On Thu, 15 May 2025 20:10:53 GMT, John Hendrikx <jhendr...@openjdk.org> wrote:

>> This follow-up change finishes the earlier changes to 
>> `ImageStorage.loadAll()` and adds support for loading specific scale 
>> requested in the input.
>> 
>> `loadAll()` will now first check if the input path ends with a scaling level 
>> specified, and if that is the case it will attempt creating a Stream. If 
>> requested resource does not exist it will throw an Exception, skipping the 
>> rest of the load process. If the resource does _not_ have a scaled name in 
>> its path, it will continue loading as normal - looking for all scale levels, 
>> trying to load the main resource and falling back to trying to load "@1x" 
>> variant.
>> 
>> Added tests to check the new `ImageTools.hasScaledName()` method + new 
>> behavior.
>
> modules/javafx.graphics/src/main/java/com/sun/javafx/iio/common/ImageTools.java
>  line 166:
> 
>> 164:         return true;
>> 165:     }
>> 166: 
> 
> 1. Is looking for a slash going to be compatible on all platforms?  Where is 
> the path string coming from?
> 2. Catching `NumberFormatException` to "check" if something is a number is 
> bad form
> 3. It will allow `@0x` and `@-1x` etc...
> 4. Consider using a regular expression, it is much more concise and intended 
> for this kind of matching
> 
> Here's a regular expression for this:
> 
>     Pattern SCALED_PATTERN = Pattern.compile(".*@[1-9][0-9]?x(\.[^\.]+)?");
>     
> The above will match any path that ends with `@` followed by a number from 1 
> to 99, followed by an `x`, optionally followed by an extension that does not 
> contain a dot.  No need to check for slashes.

If you want you can even return the scale with a slightly altered pattern:

     private static final Pattern SCALED_PATTERN = 
Pattern.compile(".*@([1-9][0-9]?)x(?:\.[^\.]+)?");
     
Then do:

     Matcher matcher = SCALED_PATTERN.matcher(path);
     
     if (matcher.matches()) {
          return Integer.parseInt(matcher.group(1));  // can't throw 
NumberFormatException, number is validated by pattern
     }
     
     return 0;  // there was no scale

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

PR Review Comment: https://git.openjdk.org/jfx/pull/1809#discussion_r2091898708

Reply via email to