- From: Matt Brubeck <mbrubeck@mozilla.com>
- Date: Thu, 05 Jun 2014 11:01:54 -0700
- To: Rick Byers <rbyers@google.com>
- CC: "public-touchevents@w3.org" <public-touchevents@w3.org>
- Message-ID: <5390B092.1070004@mozilla.com>
On 06/05/2014 10:12 AM, Rick Byers wrote: > On Thu, Jun 5, 2014 at 12:33 PM, Matt Brubeck <mbrubeck@mozilla.com > <mailto:mbrubeck@mozilla.com>> wrote: > > On 06/05/2014 09:13 AM, Rick Byers wrote: > > Secondly, using X and Y for the radius is somewhat limiting. > X11 and Android instead use an ellipse model of touch contact > with touchMajor, touchMinor and touchRotationAngle. I've just > learned that the Nexus 10 does a really good job of supporting > this (you can see it by enabling "show touch locations" in > developer options). I'm not aware of any device that returns > touch width/height so in practice chrome always reports > radiusX==radiusY. So I'd prefer we change this to > radiusMajor, radiusMinor and rotationAngle properties. OSes > like Windows 8 that report contact geometry in terms of > width/height can still be properly supported - rotationAngle > would just always be 0, but the inverse is not true. > > Earlier versions of the v2 spec had a "rotationAngle" property > that worked like this: > > https://dvcs.w3.org/hg/webevents/raw-file/c8eccbb92b31/touchevents.html#widl-Touch-rotationAngle > > It was removed (by accident?) when the document was changed from > Touch Events v2 to Touch Events v1 Extensions. > > > Yeah I think we removed it because we weren't aware of any > implementations that used it for anything reasonable (eg. Chrome > hard-coded it to 0), so didn't want to encourage use of it by > websites. In particular, the spec didn't explicitly say how radiusX / > radiusY should be interpreted when there is a non-zero rotation angle. > Eg. if X11/Android returns Major=10, Minor=5, Angle=45deg, then > presumably the browser should use some math to calculate the distance > to the ellipse edge along each axis. No, in the old v2 spec that would simply be equivalent to { radiusY: 10/2, radiusX: 5/2, rotationAngle: Math.PI/8 }. To draw the ellipse described by these properties, you start with an ellipse whose axes are parallel to the X and Y axes, with the given lengths, *then* you rotate it. So the math to convert to/from Android's PointerCoords is very simple. I think the Android names are definitely clearer, though.
Received on Thursday, 5 June 2014 18:02:22 UTC