[whatwg] Canvas - Exception on arc with negative radius

On Fri, 27 Mar 2009, Dirk Schulze wrote:
> 
> why does the spec want an INDEX_SIZE_ERR exception on arc's with a 
> negative radius?

Because it is indicative of a fundamental error. Calculations involving 
radii should never be able to go negative.


> Another example is: 
> http://blahbleh.com/molecools.php?name=1,2%20dimethylcyclopropane
>
> If you turn the molecule a bit, the circles disappear with a
> INDEX_SIZE_ERR exception.

Why is this sometimes calculating negative radii?


> Isn't it better to just ignore the arc and go on with the drawing, like 
> Firefox does? And perhaps the same for arcTo?

There are three places where there are radii: gradients, arc(), and 
arcTo().


On Fri, 27 Mar 2009, Martin Atkins wrote:
> 
> Assuming that we desire a "do what I mean" approach, it seems sane to me 
> for a negative radius to be normalized to a positive radius with the 
> same magnitude.
> 
> It goes from being the distance from the center to the edge to being the 
> distance from the center to the "opposite" edge.
> 
> You might also like to visualize this as drawing the "back" of the 
> circle.

That's one option.


On Sun, 29 Mar 2009, Dirk Schulze wrote:
> 
> A negative value doesn't mean, that you want an arc. They can happen 
> during the automatic calculation process. There is no reason, that a 
> developers takes negative values and wants to see an arc otherwise he 
> could cut of the sign.

Well then why would there be a negative value?


> I'm just speaking of ignoring negative arcs instead of giving an 
> exception to continue further drawings.

It's unclear why this would be better.


On Sun, 29 Mar 2009, Oliver Hunt wrote:
>
> I commented to the list on this issue some time ago (and a number of the 
> APIs were updated base don my comments);  in general developers do not 
> expect graphics libraries to throw exceptions, especially for values 
> that are frequently computed.  We've had numerous cases where webkit has 
> had to relax exception logic in canvas (having tightened it to match 
> spec) where the result has been broken sites and widgets (alas the 
> webkit and mozilla canvas implementations do have some edge case where 
> one throws and the other does not), i believe the most consistent 
> approach will be to fail silently when given invalid, but finite 
> arguments to any given API.  The alternative is that certain APIs will 
> relax (regardless of spec), whereas others will not, leading to a more 
> or less random combination of throw vs. no throw on invalid arguments.

Generally most exceptions in the canvas API have been dropped; the only 
ones remaining are for cases where there really doesn't seem to be a good 
reason why you'd ever pass that value.


When faced with negative radii: Gecko throws an exception for arcTo(), 
ignores the call for arc(), and uses the magnitude of the radii for 
createRadialGradient(); Webkit throws for arcTo() and arc() and does 
something I couldn't understand for createRadialGradient(); and Opera 
throws an exception for all three.

I haven't changed the spec, which says to throw an exception for all 
three, since that's the change that results in the fewest changes to 
browser implementations.

-- 
Ian Hickson               U+1047E                )\._.,--....,'``.    fL
http://ln.hixie.ch/       U+263A                /,   _.. \   _\  ;`._ ,.
Things that are impossible just take longer.   `._.-(,_..'--(,_..'`-.;.'

Received on Tuesday, 28 April 2009 17:53:16 UTC