Re: [cssom-view][css-ui] elementsFromPoint() and pointer-events:paint-order

On 6/13/13 3:22 PM, "Tab Atkins Jr." <jackalmage@gmail.com> wrote:

>On Thu, Jun 13, 2013 at 3:18 PM, Alan Stearns <stearns@adobe.com> wrote:
>> We've discussed adding an elementsFromPoint() method in the recent past
>> [1] and it's relevant to the topic I brought up in Tokyo last week about
>> event handling in fragment containers.
>>
>> There are several related use-cases:
>>
>> 1. Connecting a fragment container with a user event [2]
>> 2. Finding a not-topmost element under the cursor
>> 3. Avoiding hover-at-a-distance for positioned children
>>
>> I suggest adding an elementsFromPoint() method to cssom-view that
>>returns
>> all the elements under a particular point sorted in paint order (top to
>> bottom). People use various hacks for this today (removing topmost
>> elements or setting pointer-events:none on them to reveal the elements
>> underneath, then restoring the stack) that could be avoided by using
>>this
>> new method.
>>
>> Then I suggest adding a new value to the pointer-events property (in
>> whatever level of css-ui it lands) with a provisional name of
>>paint-order.
>> If the target of a user event has a computed value of 'paint-order' for
>> the pointer-events property, then user events (including CSS hover
>> styling) would bubble through the same stack of elements returned by
>> elementsFromPoint(). This would give us a true hover for positioned
>> elements painted outside their parent's box, and allow fragment
>>containers
>> to respond to user events on their fragment content.
>
>Thanks for bringing this up, Alan.  This is what was provisionally
>decided on at the face-to-face, and it would be great to get more
>implementor feedback on it.
>
>+1, by the way.

On today's teleconference, we resolved to add elementsFromPoint() to
cssom-view and take up the pointer-events change later. Here is some
proposed text for the cssom-view change. Simon or Glenn, could you get
this into the editor's draft?

   Add this line to the IDL in section 6:

NodeList elementsFromPoint(double x, double y);

   And then this definition:

The elementsFromPoint(x, y) method must return the list of all elements
under or intersecting the coordinates x,y in the viewport. The list to be
returned is sorted by paint order, with the first element as the topmost
in the order. If either argument is negative, x is greater than the
viewport width excluding the size of a rendered scroll bar (if any), or y
is greater than the viewport height excluding the size of a rendered
scroll bar (if any), the method must return an empty NodeList. If there is
no element at the given position the method must return a NodeList
containing the root element, if any, or an empty NodeList otherwise. If
there is no viewport associated with the document, the method must return
an empty NodeList.

   And perhaps an implementation note?

The NodeList returned from elementsFromPoint(x, y) should be identical to
a list constructed by iterating over these steps:

1. Call elementFromPoint(x, y) and add any non-null result to the list.
2. If the result not null nor the root element, remove that element and go
to step 1.

Thanks,

Alan

Received on Wednesday, 19 June 2013 21:10:26 UTC