Hi Assaf,
this was discussed during during the multi-touch API design phase. I completely understand what you are saying, yet it has no straightforward/automatic solution you may have imagined. First, we can't pick "whatever falls into the circle" - imagine there are two buttons next to each other, do we want to activate both of them? No, each event has to have a single target. Moreover, everybody can easily comprehend the idea of the imprecise touch on a button, but from FX point of view there is a bunch of nodes (not every application uses just controls) and each of the application's nodes needs to be pickable.

At that time, if I remember correctly, there was a preliminary agreement that the way around this might be giving the control to the user's hands in a form of an API that would for instance make a node pickable on a certain distance from it. So user could tell to a button "enlarge your bounds about 10 pixels in each direction and pick on those bounds", which would then behave as if the button had a transparent border around it (perhaps applying only to touch events / synthesized mouse events). Of course controls could use this API to implement a reasonable default behavior, but user still needs to have the option to create an unobtrusive ImageView-background with an event-greedy ImageView-button on it.

Regards,
Pavel

On 11.11.2013 11:51, Assaf Yavnai wrote:
Hi Guys,

I hope that I'm right about this, but it seems that touch events in glass are translated (and reported) as a single point events (x & y) without an area, like pointer events. AFAIK, the controls response for touch events same as mouse events (using the same pickers) and as a result a button press, for example, will only triggered if the x & y of the touch event is within the control area.

This means that small controls, or even quite large controls (like buttons with text) will often get missed because the 'strict' node picking, although from a UX point of view it is strange as the user clearly pressed on a node (the finger was clearly above it) but nothing happens...

With current implementation its hard to use small features in controls, like scrollbars in lists, and it almost impossible to implement something like 'screen navigator' (the series of small dots in the bottom of a smart phones screen which allow you to jump directly to a 'far away' screen)

To illustrate it consider the bellow low resolution sketch, where the "+" is the actual x,y reported, the ellipse is the finger touch area and the rectangle is the node. With current implementation this type of tap will not trigger the node handlers

                __
              /     \
             /       \
___/ __+_ \___ in this scenario the 'button' will not get pressed
       |    \         /    |
       |___\ ___ / __ |
              \___/

If your smart phone support it, turn on the touch debugging options in settings and see that each point translate to a quite large circle and what ever fall in it, or reasonably close to it, get picked.

I want to start a discussion to understand if my perspective is accurate and to understand what can be done, if any, for the coming release or the next one.

We might use recently opened RT-34136 <https://javafx-jira.kenai.com/browse/RT-34136> for logging this, or open a new JIRA for it

Thanks,
Assaf

Reply via email to