W3C home > Mailing lists > Public > public-fx@w3.org > January to March 2013

Re: Transformed Pointer Coordinates?

From: Simon Fraser <smfr@me.com>
Date: Mon, 11 Feb 2013 18:04:34 -0800
Cc: Jacob Rossi <Jacob.Rossi@microsoft.com>, "Tab Atkins Jr." <jackalmage@gmail.com>, Doug Schepers <schepers@w3.org>, "public-pointer-events@w3.org" <public-pointer-events@w3.org>, "public-fx@w3.org" <public-fx@w3.org>, www-style list <www-style@w3.org>
Message-id: <761DA956-B9B2-4148-A443-3D2FD2E60CBF@me.com>
To: robert@ocallahan.org
On Feb 11, 2013, at 4:56 PM, Robert O'Callahan <robert@ocallahan.org> wrote:

> I'd like to make some progress here so we can implement something...
> 
> On Thu, Jan 31, 2013 at 2:04 PM, Jacob Rossi <Jacob.Rossi@microsoft.com> wrote:
> At least in pages I've built, going from one element to another was the more common scenario for me.  So before learning about these webkit APIs, I was expecting something off of Element or Node. For example:
> 
>      toNode.convertPointFromNode(fromNode, pt)  //Converts the Point pt from the coordinate system used by fromNode into the coordinate system of toNode and returns it
> 
> So then you can do:
> 
>     htmlElement.convertPointFromNode(document, pt)  //Same as convertPointFromPageToNode
>     document.convertPointFromNode(htmlElement, pt) //Same as convertPointFromNodeToPage
>     htmlElement1.convertPointFromNode(htmlElement2, pt) //Convert between 2 elements
> 
> Sounds reasonable. So something like this?
> 
> [Constructor(float x, float y)]
> interface DOMPoint {
>   attribute float x;
>   attribute float y;
> }
> 
> partial interface Node {
>   DOMPoint convertPointFromNode(Node from, DOMPoint pt);
> }
> 
> 'pt' is in CSS pixels relative to the top-left of "from"'s first border-box. Returns a point in CSS pixels relative to the top-left of the destination node's first border-box.
> 
> Edge cases:
> 1) If 'from' is a Document, the point is relative to the top-left of the CSS viewport. Likewise if the destination node is a Document.

Can you clarify how that behaves when the document is scrolled? It sounds like it's equivalent to "client" coordinates, and therefore clientX/clientY on events, which is good.

> 2) If 'from' is a text node, use the first box from the list computed by Range.getClientRect. Likewise if the destination node is a text node.
> 3) If 'from' or the destination are an Element, follow the CSSOM spec for getClientRects() to deal with anonymous boxes: http://dev.w3.org/csswg/cssom-view/#widl-Element-getClientRects-ClientRectList. The first box in the list produced by getClientRects is used.
> 4) If 'from' or the destination node are not a Document, text node, or Element, throw INVALID_NODE_TYPE_ERR.
> 5) If 'from' and the destination node have no common ancestor browsing context, throw NOT_FOUND_ERR.
> 6) If the destination point is not uniquely determined (e.g. because the destination node has a singular transform on it), return 0,0.
> 
> Any thoughts?

This sounds good.

Simon
Received on Tuesday, 12 February 2013 02:05:23 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Tuesday, 12 February 2013 02:05:23 GMT