On Sat, 20 Feb 2021 19:43:01 GMT, John Neffenger 
<github.com+1413266+jgn...@openjdk.org> wrote:

>>> The expected result isn't explicit in the bug report, so just to confirm, 
>>> there should be no button action events received at all when you touch any 
>>> of the buttons only for the purpose of scrolling the entire pane, right?
>> 
>> Could you run Ensemble8 demo on the a Kobo Touch e-reader?
>> 
>> On my Raspberry Pi with Touchscreen I run Ensemble8, slide a main page to 
>> scroll and the program opens the sample where my finger is released. It 
>> prevents me to scroll Ensemble8 main page to bottom. To avoid this I need to 
>> use places without samples to scroll the main page down.
>
>> Could you run Ensemble8 demo on the Kobo Touch e-reader?
> 
> Yes, I see the problem you describe using the Ensemble8 app on my Kobo 
> e-reader. Thanks. And thank you for having the courage to fix this! 😄 
> 
> I also tested the changes in this pull request. I notice an improvement in 
> that there are less "Button is pressed" action events received, but I still 
> see the error. I added calls to `System.err.println` right before any calls 
> to `arm()`, `fire()`, or `disarm()` in each of the mouse event handlers in 
> `ButtonBehavior.java`. I swiped the buttons four times to scroll the pane. 
> The output is shown below. The first three worked. The fourth one failed by 
> firing Button 12 twice.
> 
> The new method is marked with the prefix `***`.
> 
> $ sudo $HOME/opt/jdk-15.0.2+7/bin/java \
>   --module-path=$HOME/lib/armv6hf-sdk/lib --add-modules=javafx.controls \
>   -Dglass.platform=Monocle -Dmonocle.platform=EPD -Dprism.order=sw \
>   -Dmonocle.input.18/0/0/0.minX=0 -Dmonocle.input.18/0/0/0.maxX=800 \
>   -Dmonocle.input.18/0/0/0.minY=0 -Dmonocle.input.18/0/0/0.maxY=600 \
>   ScrollPaneSample
> 
> --> Arming button (mouse pressed) ...
> --> Disarming button (mouse exited) ...
> 
> --> Arming button (mouse pressed) ...
> --> Disarming button (mouse exited) ...
> 
> --> Arming button (mouse pressed) ...
> *** Disarming button (mouse dragged) ...
> 
> --> Arming button (mouse pressed) ...
> --> Firing and disarming button (mouse released) ...
> Button is pressed: 12
> --> Arming button (mouse pressed) ...
> --> Firing and disarming button (mouse released) ...
> Button is pressed: 12
> --> Arming button (mouse pressed) ...
> *** Disarming button (mouse dragged) ...
> 
> The trace below shows a similar test but this time with the system property 
> `monocle.input.traceEvents` set to `true`. (There is also the property 
> `monocle.input.traceEvents.verbose`, but I don't find the extra information 
> helpful.) In this case, the first two swipes worked, and the third one failed.
> 
> $ sudo $HOME/opt/jdk-15.0.2+7/bin/java \
>   --module-path=$HOME/lib/armv6hf-sdk/lib --add-modules=javafx.controls \
>   -Dglass.platform=Monocle -Dmonocle.platform=EPD -Dprism.order=sw \
>   -Dmonocle.input.18/0/0/0.minX=0 -Dmonocle.input.18/0/0/0.maxX=800 \
>   -Dmonocle.input.18/0/0/0.minY=0 -Dmonocle.input.18/0/0/0.maxY=600 \
>   -Dmonocle.input.traceEvents=true ScrollPaneSample
> traceEvent: Set MouseState[x=400,y=300,wheel=0,buttonsPressed=IntSet[]]
> 
> traceEvent: Set TouchState[1,TouchState.Point[id=1,x=238,y=448]]
> traceEvent: Set MouseState[x=238,y=448,wheel=0,buttonsPressed=IntSet[212]]
> traceEvent: Set TouchState[1,TouchState.Point[id=1,x=253,y=110]]
> traceEvent: Set MouseState[x=253,y=110,wheel=0,buttonsPressed=IntSet[212]]
> traceEvent: Set TouchState[0]
> traceEvent: Set MouseState[x=253,y=110,wheel=0,buttonsPressed=IntSet[]]
> --> Arming button (mouse pressed) ...
> --> Disarming button (mouse exited) ...
> 
> traceEvent: Set TouchState[1,TouchState.Point[id=1,x=209,y=450]]
> traceEvent: Set MouseState[x=209,y=450,wheel=0,buttonsPressed=IntSet[212]]
> --> Arming button (mouse pressed) ...
> traceEvent: Set TouchState[1,TouchState.Point[id=1,x=209,y=450]]
> traceEvent: Set TouchState[1,TouchState.Point[id=1,x=229,y=262]]
> traceEvent: Set MouseState[x=229,y=262,wheel=0,buttonsPressed=IntSet[212]]
> *** Disarming button (mouse dragged) ...
> traceEvent: Set TouchState[1,TouchState.Point[id=1,x=235,y=238]]
> traceEvent: Set MouseState[x=235,y=238,wheel=0,buttonsPressed=IntSet[212]]
> traceEvent: Set TouchState[1,TouchState.Point[id=1,x=265,y=109]]
> traceEvent: Set MouseState[x=265,y=109,wheel=0,buttonsPressed=IntSet[212]]
> traceEvent: Set TouchState[0]
> traceEvent: Set MouseState[x=265,y=109,wheel=0,buttonsPressed=IntSet[]]
> 
> traceEvent: Set TouchState[1,TouchState.Point[id=1,x=260,y=403]]
> traceEvent: Set MouseState[x=260,y=403,wheel=0,buttonsPressed=IntSet[212]]
> --> Arming button (mouse pressed) ...
> traceEvent: Set TouchState[1,TouchState.Point[id=1,x=260,y=403]]
> traceEvent: Set TouchState[1,TouchState.Point[id=1,x=260,y=403]]
> traceEvent: Set TouchState[0]
> traceEvent: Set MouseState[x=260,y=403,wheel=0,buttonsPressed=IntSet[]]
> --> Firing and disarming button (mouse released) ...
> Button is pressed: 10
> traceEvent: Set TouchState[1,TouchState.Point[id=1,x=260,y=400]]
> traceEvent: Set MouseState[x=260,y=400,wheel=0,buttonsPressed=IntSet[212]]
> traceEvent: Set TouchState[1,TouchState.Point[id=1,x=260,y=142]]
> traceEvent: Set MouseState[x=260,y=142,wheel=0,buttonsPressed=IntSet[212]]
> traceEvent: Set TouchState[0]
> traceEvent: Set MouseState[x=260,y=142,wheel=0,buttonsPressed=IntSet[]]
> --> Arming button (mouse pressed) ...
> *** Disarming button (mouse dragged) ...
> 
> I find that any movement after touching a button will cause it to fire, even 
> without lifting my finger. I don't think the button action should fire unless 
> I lift my finger off the button from the same location or very near to where 
> I first touched it.
> 
> Can you reproduce the error I'm seeing? Hold your finger on a button. Then 
> roll your finger back and forth while keeping contact. Then release the 
> button. Android does nothing when I do that on a button, and it seems to fire 
> an event only when I release my finger very close to where I first touched 
> it. With Monocle, though, I can fire a hundred action events just by rolling 
> my finger back and forth on the button without ever releasing it.
> 
> It could be the sensitivity of my touch panel. The panel itself is double the 
> resolution of the display, which is why I have to add all those 
> `monocle.input` properties to set the correct 800 × 600 touch points to match 
> the pixel resolution.

There is similar behavior on Android (using Monocle too), when scrolling 
through a list, as that may result in the list item to be "selected". The 
scrolled node receives a button_pressed event as well.
The main difficulty I have is: What is the expected behavior? I would like to 
seen consistent behavior between the GTK and Monocle implementations, but the 
hardest part to me is getting a clear definition on what we would expect (as 
that is then what we can test).

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

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

Reply via email to