As discussed in the [JBS 
issue](https://bugs.openjdk.java.net/browse/JDK-8199592), when snapping an 
already snapped value (either intentionally or by  mistake), the result should 
be the same, otherwise we'll be jumping unnecessary from a valid pixel to 
another pixel.

This PR provides a fix to `snapSizeXX` methods used in `Region`, which 
ultimately use `Math.ceil`, by subtracting an epsilon value to scaled value 
before ceiling, to ensure snapping a snapped value gives the same value.

A test to verify `snapSizeX` and `snapSizeY` with 1000 random values, and 6 
different UI scales is provided.
For the 1.0, 1.25, 1.5 and 2.0 UI scales, the current approach works fine. Only 
for 1.75 and the random 1.374562997 value fails (the test fails for around 2% 
of the values with 1.75 and around 10% with 1.374562997).
With the proposed fix, it doesn't fail at all.

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

Commit messages:
 - Subtract epsilon to scaled value before ceiling, to ensure snapping a 
snapped value gives the same value. Include test

Changes: https://git.openjdk.java.net/jfx/pull/336/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jfx&pr=336&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8199592
  Stats: 35 lines in 2 files changed: 34 ins; 0 del; 1 mod
  Patch: https://git.openjdk.java.net/jfx/pull/336.diff
  Fetch: git fetch https://git.openjdk.java.net/jfx pull/336/head:pull/336

PR: https://git.openjdk.java.net/jfx/pull/336

Reply via email to