- From: Simon Fraser <smfr@me.com>
- Date: Mon, 11 Feb 2013 18:04:34 -0800
- To: robert@ocallahan.org
- 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>
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:21 UTC