An axis is not cached in the LinuxTouchTransform class. To reproduce the issue I added `System.out.printf("initTransform: axis: %d, index: %d%n", axis, index);` log to the LinuxTouchTransform.initTransform() method: https://github.com/openjdk/jfx/blob/5112be957be70dd6521e6fb6ee64e669c148729c/modules/javafx.graphics/src/main/java/com/sun/glass/ui/monocle/LinuxTouchTransform.java#L117 run the [JFXButtonExample](https://bugs.openjdk.java.net/secure/attachment/98181/JFXButtonExample.java) sample and tapped the touch screen on a Raspberry Pi with Touchscreen.
The result was initTransform: axis: 47, index: 0 initTransform: axis: 57, index: 0 initTransform: axis: 53, index: 0 initTransform: axis: 54, index: 0 initTransform: axis: 0, index: 0 initTransform: axis: 1, index: 0 initTransform: axis: 53, index: 0 initTransform: axis: 54, index: 0 initTransform: axis: 0, index: 0 initTransform: axis: 1, index: 0 initTransform: axis: 53, index: 0 initTransform: axis: 54, index: 0 initTransform: axis: 0, index: 0 initTransform: axis: 1, index: 0 The initTransform() is called several times for axis 0,1,47,53,54 and index is always set to zero. The straight forward fix is to store the given axis in the axes array: "axes[index] = axis". This is the first commit for the current fix. Using this fix the output with printf from initTransform() method looks like: initTransform: axis: 47, index: 0 initTransform: axis: 57, index: 1 initTransform: axis: 53, index: 2 initTransform: axis: 54, index: 4 initTransform: axis: 1, index: 5 Now all axes are printed only once and the index value is different for each axes. However, the minimum/maximum values are retrieved and cached for ABS_X/Y and ABS_MT_POSITION_X/Y axes after the fist tap on the screen. The second commit improves this moving the ABS_X/Y and ABS_MT_POSITION_X/Y axes initialization into the LinuxTouchTransform constructor. Now the touch logs look like: // LinuxTouchTransform constructor // device: /dev/input/mouse0 initTransform: axis: 0, index: 0 initTransform: axis: 1, index: 1 initTransform: axis: 53, index: 2 initTransform: axis: 54, index: 3 // LinuxTouchTransform constructor // device: /dev/input/event2 initTransform: axis: 0, index: 0 initTransform: axis: 1, index: 1 initTransform: axis: 53, index: 2 initTransform: axis: 54, index: 3 // the first tap initTransform: axis: 57, index: 4 initTransform: axis: 47, index: 5 The ABS_X/Y and ABS_MT_POSITION_X/Y axes and corresponding minimum/maximum values are initialized in the constructor. The other axes which stores only default values in translates and scalars arrays are initialized during touch events. ------------- Commit messages: - Preinitialize ABS_X/Y and ABS_MT_POSITION_X/Y transforms in LinuxTouchTransform class - 8282703: Axis is not cached in the LinuxTouchTransform class Changes: https://git.openjdk.java.net/jfx/pull/747/files Webrev: https://webrevs.openjdk.java.net/?repo=jfx&pr=747&range=00 Issue: https://bugs.openjdk.java.net/browse/JDK-8282703 Stats: 31 lines in 1 file changed: 23 ins; 8 del; 0 mod Patch: https://git.openjdk.java.net/jfx/pull/747.diff Fetch: git fetch https://git.openjdk.java.net/jfx pull/747/head:pull/747 PR: https://git.openjdk.java.net/jfx/pull/747