[whatwg] CanvasRenderingContext2D.lineTo compatibility problem
Ian Hickson
ian at hixie.ch
Mon Jul 27 16:48:54 PDT 2009
On Sat, 11 Jul 2009, Oliver Hunt wrote:
>
> While investigating a compatibility issue with
> http://www.blahbleh.com/clock.php I found that the spec behaviour on
> CanvasRenderingContext2D.lineTo conflicts with what Gecko implements.
>
> The current spec language is
> "The lineTo(x, y) method must do nothing if the context has no subpaths.
> Otherwise, it must connect the last point in the subpath to the given point
> (x, y) using a straight line, and must then add the given point (x, y) to the
> subpath."
>
> Gecko appears to treat the empty path case as moveTo(x,y). I'm going to do a
> bit more investigation into the behaviour of this and the other path
> manipulation functions to see whether lineTo is "special" or this logic
> effects every function (of course any Gecko devs may be able to answer more
> quickly than i can manually verify). On the *assumption* that my initial
> analysis is correct i propose that the language be updated to something akin
> to:
> The lineTo(x, y) method is equivalent to moveTo(x, y) if the context has no
> subpaths. Otherwise, it must connect the last point in the subpath to the
> given point (x, y) using a straight line, and must then add the given point
> (x, y) to the subpath.
On Sat, 11 Jul 2009, Oliver Hunt wrote:
>
> Okay the behaviour for lineTo, quadraticCurveTo and bezierCurveTo without an
> existing subpath (unsure about arcTo any "sane" response to arcTo with an
> empty path results in one of those edge cases where webkit, gecko, and presto
> all disagree) should probably be changed to (worded better of course :D ):
>
> * lineTo(x, y) is equivalent to moveTo(x, y) if the context has no subpaths.
> * The quadraticCurveTo(cpx, cpy, x, y) method is equivalent to "moveTo(cpx,
> cpy); quadraticCurveTo(cpx, cpy, x, y);" if the context has no subpaths
> * The bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) method is equivalent to
> "moveTo(cp1x, cp1y); bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);" if the
> context has no subpaths
>
> My rationale for this change is that it is a relaxation of existing API
> -- in the specified API these cases would become no-ops that feed into
> subsequent calls, eg. lineTo(..);lineTo(..);lineTo(..) will draw nothing
> as the path never becomes non-empty so none of the calls can ever have
> an effect, whereas this re-specification would result in subsequent
> operations drawing something.
Fixed the spec as proposed (and also for arcTo(), though as you say, the
behaviour there isn't very interoperable).
--
Ian Hickson U+1047E )\._.,--....,'``. fL
http://ln.hixie.ch/ U+263A /, _.. \ _\ ;`._ ,.
Things that are impossible just take longer. `._.-(,_..'--(,_..'`-.;.'
More information about the whatwg
mailing list