Touch Events, Scrolling, and Windows Pen

Danno Ferrin danno.ferrin at
Sun Jun 2 17:59:04 PDT 2013

I created a new bug for the pen support bug, with a tested patch.  I spent
way more time getting the build up than doing the fix, such is native work.

For the pan-select, I attached a fix for list views to the existing bug.
If that approach passes muster I can do the same for tree and table.

On Tue, May 28, 2013 at 10:46 AM, Anthony Petrov
<anthony.petrov at>wrote:

> Sounds good to me.
> Danno, could you please prepare a patch for this bug, test it, and post it
> for review here?
> --
> best regards,
> Anthony
> On 05/28/2013 07:46 PM, Danno Ferrin wrote:
>> For 8.0 that would be the best solution IMHO.
>> On May 28, 2013 8:41 AM, "Pavel Safrata" <pavel.safrata at>
>> wrote:
>>  So it seems to me that in short term (FX8) the pen should produce mouse
>>> events with isSynthesized==false. We can introduce something more
>>> advanced
>>> in the future, but right now it should generally work and the synthesized
>>> flag really seems to be misused here.
>>> Pavel
>>> On 28.5.2013 16:09, Danno Ferrin wrote:
>>>  On Tue, May 28, 2013 at 2:44 AM, Anthony Petrov
>>>> <anthony.petrov at>****wrote:
>>>>   Hi Danno,
>>>>> On 05/27/2013 07:27 PM, Danno Ferrin wrote:
>>>>>   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.
>>>>>>   AFAIK, we haven't tested Glass/FX with a Pen device and I doubt we
>>>>>> even
>>>>> have proper hardware to test it at the moment. So such a patch would
>>>>> certainly be welcome. Please feel free to post it on this mailing list
>>>>> for
>>>>> a review.
>>>>>   I think the QA and dev team should invest a few thousand and buy one
>>>>> or
>>>> two
>>>> each of a Surface Pro, a Samsung Ativ 500T, and maybe an Asus VivoTab
>>>> (but
>>>> only the Asus if you can get the pen with it on the same order).  The
>>>> "triple threat" input devices (mouse/pen/touch) will cover a lot of
>>>> bases.
>>>>   However, we should first decide how we want to process Pen events.
>>>> They
>>>>> are not regular mouse events, nor are they similar to regular touch
>>>>> events
>>>>> (though they have a lot in common with the latter). E.g. suppose you
>>>>> can
>>>>> control your Surface Pro with a finger using its touch screen. These
>>>>> are
>>>>> touch events. Now, you could also connect a USB mouse to this device,
>>>>> and
>>>>> that would have to generate regular mouse events. Additionally, you
>>>>> could
>>>>> connect a graphic tablet such as a Wacom Bamboo for example, and this
>>>>> device would have to generate some special Pen events, right?
>>>>>   As far as I can tell pen evens are just the same as mouse events
>>>>> unless
>>>> you
>>>> use microsofts "Ink" APIs to insert "Ink" into your application.  So
>>>> unless
>>>> JavaFX adds support for digital ink, there is vey little difference. The
>>>> only one that comes to mind is pressure sensitivity, and the minority of
>>>> windows pen screens or pads support pressure sensitivity.
>>>>   Should we introduce a new kind of events for Pen events in FX? Or
>>>> does it
>>>>> make sense to use touch events for this purpose? How would we
>>>>> distinguish
>>>>> between finger- and pen- based input events in the above scenario then?
>>>>>   Behavior is a big difference in pen vs touch.  Tap and drag for touch
>>>> gets interpreted as a scroll pan, while tap and drag for a pen
>>>> gets interpreted as a mouse click and drag, for example selecting text.
>>>> Pen events don't generate touch gestures like the touch screens do.
>>>>   Unless
>>>> you count the "flicks" api in microsoft land which just generates events
>>>> at
>>>> the windows level for stuff like delete, cut, copy, paste, etc.  Much
>>>> like
>>>> the multimedia keyboard.
>>>> A new boolean field could be added isPen could be added on the
>>>> mouseEvent,
>>>> or a new enum property at InputEvent called Input Device, that would
>>>> enumerate if it was mouse, touch, pen, keyboard, or whatever standard
>>>> input
>>>> devies show up in the future.  These enums could then be loaded with all
>>>> sorts of interesting queries in case a user wants to write their app in
>>>> a
>>>> future proof way, such as are drag events principally pan-scrolling, is
>>>> the
>>>> gesture device direct/indirect.  Maybe not an enum, but a separate HCI
>>>> object rather than pushing the random flags into the event system.
>>>>   What other options do we have?
>>>>>   Keeping pen input second class is fine I think, as long as it is
>>>> consistent
>>>> with the differences between touch and mouse in non-ink areas.  If we
>>>> have
>>>> to confuse them with one type or the other, confuse them with mouse
>>>> events
>>>> because they are closer to mouse events then touch events. There are
>>>> more
>>>> important areas for JavaFX to go to before it goes down the digital ink
>>>> path.
>>>>   --
>>>>> best regards,
>>>>> Anthony

More information about the openjfx-dev mailing list