[whatwg] Canvas Zero/NaN/Infinity issues

Ian Hickson ian at hixie.ch
Tue May 15 18:36:38 PDT 2007

On Sat, 20 May 2006, Anne van Kesteren wrote:
> I think http://whatwg.org/specs/web-apps/current-work/#strokerect must 
> have no effect when it has a zero height or width (or both). Currently 
> Safari, Firefox and Opera act that way when they are both zero and 
> Safari acts that way for all cases. Firefox and Opera draw a small line 
> when either is larger than zero but that can easily be changed. It also 
> makes the method more consistent with the other two.
> For those "If either height or width are zero, this method has no 
> effect." should probably be changed to "If either height or width are 
> zero, this method must have no effect."

Fixed, but not that way. Let me know if it's ok.

On Mon, 26 Mar 2007, Philip Taylor wrote:
> What should happen when Infinity or -Infinity or NaN are passed as float 
> arguments? I assume there shouldn't be a type exception since they're 
> perfectly valid floats (under the usual models of floating point 
> arithmetic), though I don't know where/if that's defined. In some cases 
> there is a logical behaviour (e.g. when translating a finite-sized 
> object by infinity, or scaling an object like rect(-10,-10,20,20) by 
> infinity then clipping it to the viewable area), but in most cases there 
> isn't (e.g. rotating by infinity, or doing anything with NaN, when the 
> output depends on those values).
> 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.

Specifically for transform(), setTransform(), scale(), and translate(), 
I've made Infinity cause the canvas to stop drawing instead of raising an 
exception. Everything else, exceptions.

On Wed, 4 Apr 2007, Philip Taylor wrote:
> What if offset is NaN? That is neither less than 0 nor greater than 1.


On Sat, 12 May 2007, Darin Adler wrote:
> > 
> > Changed to unsigned.
> If it's unsigned, it's ambiguous what behavior should be when an attempt 
> is made to set the value to a signed value via JavaScript. Should an 
> INDEX_SIZE_ERR exception be raised? Should the value be ignored?
> I think I ran into this problem with HTMLOptionsCollection length 
> property.

Fixed by adding a general rule to the conformance section.

On Sat, 5 May 2007, Darin Adler wrote:
> A while back I did some work on WebKit's canvas implementation and I 
> noticed a few things in the canvas section of Web Apps that I'd like to 
> see specified so they don't end up different between implementations:
> a) NAN arguments
> For the graphics context functions that take floating point values, I 
> think the specification should say what the expected behavior is for:
>     1) NANs
>     2) non-floating point values
>     3) missing parameters
> b) excess arguments

1, 3, and b now raise exceptions except if otherwise specified. I haven't 
yet defined 2. I'm not sure what it should say.

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