All the things you can style from CSS resolve to properties in the code, so in any case there would be a property in code, it is just a question of whether you also want to be able to set the value from CSS.
> On Nov 13, 2013, at 10:31 PM, Anthony Petrov <anthony.pet...@oracle.com> > wrote: > > I'm not sure if CSS is the best place to tag nodes with this attribute. CSS > is supposed to describe styles (i.e. the way a node is represented on the > screen, "the look"), while extending the capture zone doesn't affect the > visual representation of a node, but instead is related to events handling > (i.e. "the feel") and thus, IMO, should be handled in the code (e.g. as a > property) rather than in CSS. > > -- > best regards, > Anthony > >> On 11/14/2013 01:09 AM, Daniel Blaukopf wrote: >> Hi Seeon, >> >> Summarizing our face to face talk today: >> >> I see that the case described by Pavel is indeed a problem and agree with >> you that not every node needs to be a participant in the competition for >> which grabs touch input. However I’m not keen on the idea of changing >> behavior based on which nodes have listeners on them. CSS seems like the >> place to do this (as I think Pavel suggested earlier). In Pavel’s case, >> either: >> - the upper child node has the CSS tag saying “enable extended capture >> zone” and the lower child doesn’t: then the upper child’s capture zone will >> extend over the lower child >> - or both will have the CSS tag, in which case the upper child’s capture >> zone would be competing with the lower child’s capture zone. As in any other >> competition between capture zones the nearest node should win. The effect >> would be the same as if the regular matching rules were applied on the upper >> child. It would also be the same as if only the lower child had an extended >> capture zone. However, I’d consider this case to be bad UI programming. >> >> We agreed that “in a competition between capture zones, pick the node whose >> border is nearest the touch point” was a reasonable way to resolve things. >> >> Thanks, >> Daniel >> >>> On Nov 13, 2013, at 12:31 PM, Seeon Birger <seeon.bir...@oracle.com> wrote: >>> >>> Hi Pavel, >>> >>> Your example of 'child over child' is an interesting case which raises some >>> design aspects of the desired picking algorithm: >>> 1. Which node to pick when one node has a 'strict containership' over the >>> touch center and the other node only has a fuzzy containership (the >>> position falls in the fuzzy area). >>> 2. Accounting for z-order for extended capture zone area. >>> 3. Accounting for parent-child relationship. >>> >>> Referring to your 'child over child' example: >>> http://i.imgur.com/e92qEJA.jpg >>> >>> The conflict would arise were touch point center position falls in the >>> capture zone area of child2 but also clearly falls in the strict bounds of >>> child1. >>> Generally, when two control nodes compete on same touch event (e.g. child1 >>> & child2 in Daniel's diagram), it seems that we would like to give priority >>> to "strict containership" over "fuzzy containership". >>> But in your case it's probably not the desired behavior. >>> >>> Also note that in the general case there's almost always exists come >>> container/background node that strictly contains the touch point, but it >>> would probably be an ancestor of the child node, so the usual parent-child >>> relationship order will give preference to the child. >>> >>> One way out it is to honor the usual z-order for the extended area of >>> child2, so when a touch center hits the fuzzy area of child2, then child2 >>> would be picked. >>> >>> But is not ideal for Daniel's example: >>> http://i.imgur.com/ELWamYp.png >>> >>> where the 2 nodes don't strictly overlap, but their capture zones do. >>> Preferring one child by z-order (which matches the order of children in the >>> parent) is not natural here. And we might better choose the node which is >>> "closer" >>> To the touch point. >>> >>> So to summarize I suggest this rough picking algorithm: >>> 1. Choose all uppermost nodes which are not transparent to mouse events and >>> contain the touch point center either strictly or by their capture zone. >>> 2. Remove all nodes that is strictly overlapped by another node and is >>> below that node by z-order. >>> 3. Out of those left choose the "closest" node. (the concept of "closet" >>> should employ some calculation which might not be trivial in the general >>> case). >>> 4. Once a node has been picked, we follow the usual node chain list for >>> event processing. >>> >>> Care must be taken so we not break the current model for event processing. >>> For example, if a node is picked by its capture zone, it means that the >>> position does not fall in the boundaries of the node, so existing event >>> handling code that relies on that would break. So I think the capture zone >>> feature should be selectively enabled for certain type of nodes such >>> buttons or other classic controls. >>> >>> Regards, >>> Seeon >>> >>> >>> >>> >>> >>> -----Original Message----- >>> From: Pavel Safrata >>> Sent: Tuesday, November 12, 2013 1:11 PM >>> To: Daniel Blaukopf >>> Cc: OpenJFX >>> Subject: Re: discussion about touch events >>> >>> (Now my answer using external link) >>> >>> Hello Daniel, >>> this is quite similar to my idea described earlier. The major difference is >>> the "fair division of capture zones" among siblings. It's an interesting >>> idea, let's explore it. What pops first is that children can also overlap. >>> So I think it would behave like this (green capture zones >>> omitted): >>> >>> Child in parent vs. Child over child: http://i.imgur.com/e92qEJA.jpg >>> >>> ..wouldn't it? From user's point of view this seems confusing, both cases >>> look the same but behave differently. Note that in the case on the right, >>> the parent may be still the same, developer only adds a fancy background as >>> a new child and suddenly the red child can't be hit that easily. What do >>> you think? Is it an issue? Or would it not behave this way? >>> >>> Regards, >>> Pavel >>> >>>> On 12.11.2013 12:06, Daniel Blaukopf wrote: >>>> (My original message didn't get through to openjfx-dev because I used >>>> inline images. I've replaced those images with external links) >>>> >>>> On Nov 11, 2013, at 11:30 PM, Pavel Safrata <pavel.safr...@oracle.com >>>> <mailto:pavel.safr...@oracle.com>> wrote: >>>> >>>>>> On 11.11.2013 17:49, Tomas Mikula wrote: >>>>>> On Mon, Nov 11, 2013 at 1:28 PM, Philipp Dörfler >>>>>> <phdoerf...@gmail.com <mailto:phdoerf...@gmail.com>> wrote: >>>>>>> I see the need to be aware of the area that is covered by fingers >>>>>>> rather than just considering that area's center point. >>>>>>> I'd guess that this adds a new layer of complexity, though. For >>>>>>> instance: >>>>>>> Say we have a button on some background and both the background and >>>>>>> the button do have an onClick listener attached. If you tap the >>>>>>> button in a way that the touched area's center point is outside of >>>>>>> the buttons boundaries - what event will be fired? Will both the >>>>>>> background and the button receive a click event? Or just either the >>>>>>> background or the button exclusively? Will there be a new event >>>>>>> type which gets fired in case of such area-based taps? >>>>>>> >>>>>>> My suggestion would therefore be to have an additional area tap >>>>>>> event which gives precise information about diameter and center of >>>>>>> the tap. Besides that there should be some kind of "priority" for >>>>>>> choosing which node's onClick will be called. >>>>>> What about picking the one that is closest to the center of the touch? >>>>> >>>>> There is always something directly on the center of the touch >>>>> (possibly the scene background, but it can have event handlers too). >>>>> That's what we pick right now. >>>>> Pavel >>>> >>>> What Seeon, Assaf and I discussed earlier was building some fuzziness >>>> into the node picker so that instead of each node capturing only >>>> events directly on top of it: >>>> >>>> Non-fuzzy picker: http://i.imgur.com/uszql8V.png >>>> >>>> ..nodes at each level of the hierarchy would capture events beyond >>>> their borders as well: >>>> >>>> Fuzzy picker: http://i.imgur.com/ELWamYp.png >>>> >>>> In the above, "Parent" would capture touch events within a certain >>>> radius around it, as would its children "Child 1" and "Child 2". Since >>>> "Child 1" and "Child 2" are peers, they would have a sharp division >>>> between them, a watershed on either side of which events would go to >>>> one child node or the other. This would also apply if the peer nodes >>>> were further apart; they would divide the no-man's land between them. >>>> Of course this no-man's land would be part of "Parent" and could could >>>> be touch-sensitive - but we won't consider "Parent" as an event target >>>> until we have ruled out using one of its children's extended capture >>>> zones. >>>> >>>> The capture radius could either be a styleable property on the nodes, >>>> or could be determined by the X and Y size of a touch point as >>>> reported by the touch screen. We'd still be reporting a touch point, >>>> not a touch area. The touch target would be, as now, a single node. >>>> >>>> This would get us more reliable touch capture at leaf nodes of the >>>> node hierarchy at the expense of it being harder to tap the >>>> background. This is likely to be a good trade-off. >>>> >>>> Daniel >>>> >>>> >>>> >>>>> >>>>>> Tomas >>>>>> >>>>>>> Maybe the draw order / order in the scene graph / z buffer value >>>>>>> might be sufficient to model what would happen in the real, >>>>>>> physical world. >>>>>>> Am 11.11.2013 13:05 schrieb "Assaf Yavnai" <assaf.yav...@oracle.com >>>>>>> <mailto:assaf.yav...@oracle.com>>: >>>>>>> >>>>>>>> The ascii sketch looked fine on my screen before I sent the mail >>>>>>>> :( I hope the idea is clear from the text (now in the reply dialog >>>>>>>> its also look good) >>>>>>>> >>>>>>>> Assaf >>>>>>>>> On 11/11/2013 12:51 PM, 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 >>