This is a very localized fix for the issue described in 
https://bugs.openjdk.org/browse/JDK-8364049 which resulted from comparing 
snapped and non-snapped values.  The issue seems to happen only with fractional 
scale, that is, on Windows at 125%, 150%, 175% etc. scales.

While looking at the `ToolBarSkin` code, I noticed a general pattern related to 
snapping, that might cause similar issues in the tool bar skin and elsewhere.  
Here is an example in `ToolBarSkin::computePrefWidth()` in L411:


        if (toolbar.getOrientation() == Orientation.HORIZONTAL) {
            for (Node node : toolbar.getItems()) {
                if (!node.isManaged()) continue;
                prefWidth += snapSizeX(node.prefWidth(-1)) + getSpacing();
            }
            prefWidth -= getSpacing();
        } else {


the general issue, in my opinion, is that doing `prefWidth += 
snapSizeX(node.prefWidth(-1)) + getSpacing();` results in the `prefWidth` value 
differ from its snapped value.  In other words, whenever computation involves 
snapped values, the result must be snapped as well - and that includes the case 
when all the parts of the computation are snapped.

Another, related, topic is how to properly snap the values in the computation.  
I would say ideally it should be done like this:


snappedResult = snap(snap(value1) .OP. snap(value2) .OP. ... snap (valueN))


It might be possible to skip the snapping of intermediary values, and only snap 
the result, but one must be careful not to accumulate errors.

Getting back to the ToolBarSkin, one can see the issue on LL392, 399, 411, 417, 
425, 436, 530, and so on.

I decided not to fix the snapping for the purpose of making this PR narrow in 
scope with the goal to backport it to jfx25, but I did want to describe the 
issue.

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

Commit messages:
 - snap length

Changes: https://git.openjdk.org/jfx/pull/1856/files
  Webrev: https://webrevs.openjdk.org/?repo=jfx&pr=1856&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8364049
  Stats: 6 lines in 1 file changed: 5 ins; 0 del; 1 mod
  Patch: https://git.openjdk.org/jfx/pull/1856.diff
  Fetch: git fetch https://git.openjdk.org/jfx.git pull/1856/head:pull/1856

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

Reply via email to