When an extended stage is shown with RTL orientation (either using a RTL window 
+ `Scene.nodeOrientation == INHERIT`, or using a LTR window and 
`Scene.nodeOrientation == RIGHT_TO_LEFT`), the default window buttons are 
placed on the wrong side of the window. This bug only manifests on Windows and 
Linux, both of which use `HeaderButtonOverlay` to render the default window 
buttons.

`HeaderButtonOverlay` is not a part of the scene graph, it is shown on top of 
the scene graph as an overlay (like the warning overlay that appears when 
entering full-screen mode). For [CSS-related 
reasons](https://github.com/openjdk/jfx/pull/1605#issuecomment-2967977276), the 
parent of an overlay is the scene root (but the scene root doesn't know that). 
This implementation detail can mess up the calculation of orientation flags and 
mirroring transforms in `Node`, as depending on the `NodeOrientation` of the 
root node, the code may mistakenly mirror (or not mirror) the orientation.

The solution I've come up with is as follows: the overlay node is marked with 
the `Node.INHERIT_ORIENTATION_FROM_SCENE` flag, which causes it to resolve its 
effective orientation against the scene only, and never against the root node. 
With this change, the effective orientation and mirroring transforms are 
computed correctly.

The easiest way to test this fix is with Monkey Tester -> Tools -> Stage Tester.

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

Commit messages:
 - fix node orientation of scene overlay

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

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

Reply via email to