Touch Events, Scrolling, and Windows Pen
danno.ferrin at shemnon.com
Mon May 27 08:27:39 PDT 2013
One of the things that prompted me to write the TouchyFXy application was
to get a feel of the event flow before I embarked on recommending fixes to
some of the quirks. Here goes.
My first concern is touch scrolling on lists. If you do a touch scroll on
a List you wind up selecting the item you lift your finger off of. And
this is painfully obvious in Ensemble8 on a Surface Pro, you scroll down
the screen and BAM you're in a demo if you're not careful where you start
your scroll. I would propose that at least in the list control, and
possibly all controls, that a click/release/down event not be processed if
the 'synthesized' flag is present This would need to be done in the
control logic rather than pushed down through the whole event chain,
however.. A general audit may be entertaining, but the one annoying me
right now is the select on touch scroll for lists and touch panes.
A general solution may be to allow the user to turn off the capture of
synthesized events, but I would imagine that would need to be explicitly
turned on by the code to maintain backwards compatibility for apps not
written with touch in mind.
My next problem is the pen device on Windows. The only events captured in
JavaFX from a pen are mouse events. To complicate things the "Synthesized"
flag is set. This is a bit disconcerting because to the view of a JFX app
there is no other event for it to be synthesized to. So I would propose
the isPenEvent method in /glass/glass-lib-windows/src/ViewContainer.cpp be
added to check that the 0x80 bit is set by changing the signature
to 0xFF515780 and the mask to 0xFFFFFF80, making a pen event look just like
a mouse event, since it only generates mouse events. (the linked MSDN
article in the code explains the lower 8 bits, and the high bit is a
pen/touch flag, the logic may need to be more complex). To distinguish a
pen tap perhaps we set the direct flag but not the synthesized flag, since
a pen is direct on the screen (usually).
So am I way off base on these? Should I work up a patch for these? Or
must the current behavior be maintained.
More information about the openjfx-dev