- From: Ian Hickson <ian@hixie.ch>
- Date: Wed, 8 Dec 2010 00:35:03 +0000 (UTC)
On Wed, 8 Sep 2010, Boris Zbarsky wrote: > > Consider this testcase: > > <!doctype html> > <html> > <body> > <canvas id="c" width="200" height="200"></canvas> > <script> > try { > var c = document.getElementById("c"), > t = c.getContext("2d"); > t.moveTo(100, 100); > t.lineTo(NaN, NaN); > t.lineTo(50, 25); > t.stroke(); > } catch (e) {alert(e); } > </script> > </body> > </html> > > Behavior in the spec seems to be undefined (in particular, no mention is > made as to what the canvas API functions are supposed to do if > non-finite values are passed in). [...] On Tue, 7 Sep 2010, Sam Weinig wrote: > > In 4.8.11.1 the spec does state: > > "Except where otherwise specified, for the 2D context interface, any > method call with a numeric argument whose value is infinite or a NaN > value must be ignored." Right. This was intentional; if I recall correctly it was based on the idea that "3D" code rendering to a 2D canvas would often find itself dealing with asymptotic behaviour and that it was better to silently ignore such edge cases than to bail entirely as used to happen. There's actually a comment to that effect in the spec source: <p>Except where otherwise specified, for the 2D context interface, any method call with a numeric argument whose value is infinite or a NaN value must be ignored.</p> <!-- Philip Taylor wrote: > My experience with some 3d canvas code is that infinities come up in > naturally harmless places, e.g. having a function that scales by x then > translates by 1/x and wanting it to work when x=0 (which ought to draw > nothing, since anything it draws is zero pixels wide), and it's a bit > annoying to track down and fix those issues, so I'd probably like it if > they were harmless in canvas methods. Opera appears to silently not draw > anything if the transformation matrix is not finite, but Firefox throws > exceptions when passing in non-finite arguments. --> I don't personally have a strong opinion on this, and will likely just update the spec to match what the majority of implementations do in due course, if that changes. Currently it seems to be a bit of a mixed bag. -- Ian Hickson U+1047E )\._.,--....,'``. fL http://ln.hixie.ch/ U+263A /, _.. \ _\ ;`._ ,. Things that are impossible just take longer. `._.-(,_..'--(,_..'`-.;.'
Received on Tuesday, 7 December 2010 16:35:03 UTC