- From: Ian Hickson <ian@hixie.ch>
- Date: Wed, 29 Apr 2009 00:53:16 +0000 (UTC)
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