[whatwg] Canvas rectangles

Ian Hickson ian at hixie.ch
Wed Jan 30 18:21:34 PST 2008

On Sun, 1 Jul 2007, Philip Taylor wrote:
> "The clearRect() method ... The fillRect() method ... The strokeRect() 
> method ..." - should say "clearRect(x, y, w, h)" etc, for consistency 
> with all the other function definitions.


> "Shapes are ... subject to ... shadow effects, global alpha, ... and 
> global composition operators" is a bit confusing since clearRect isn't 
> subject to those things. (Actually, clearRect is subject to shadow 
> effects in Safari, and subject to composition operators in Opera, but 
> I'd say those are just bugs.)


> strokeRect: The definition is vague about where line-joins occur, in the 
> normal case and in the "If only one of [width and height] is zero ..." 
> case, since it doesn't really say that it's a closed path.

Fixed as part of the earlier changes to lines and strokes, I think. Is it 
better now?

> There is minor implementation disagreement in the zero-width case 
> (<http://canvex.lazyilluminati.com/misc/rects.html>) - in Safari it is 
> equivalent to drawing a rectangle with infinitesimal width (hence with 
> four line-joins connecting perpendicular edges), whereas in 
> FF/Opera/spec it's equivalent to a line (with two line-joins connecting 
> parallel edges). Also, Safari/FF3 draw stuff in the width=height=0 case, 
> though that's related to the more general line-caps-on-zero-length-lines 
> thing (as in 
> <http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2007-June/011883.html>). 
> I believe it would be nice (for consistency and predictability) if 
> strokeRect worked the same as rect+stroke (and the same as 
> moveTo+lineTo+lineTo+lineTo+closePath+stroke) - that is what everyone 
> except Safari does, but it doesn't seem to be explicit or obvious in the 
> spec.

This is basically now the case, I think, but mostly because of the 
changes we made before for zero-length line segments, and so on.

> Perhaps it would be easier and most precise to define strokeRect in 
> terms of existing methods, like: "The strokeRect(x, y, w, h) method must 
> be equivalent to the following sequence of method calls: beginPath(); 
> rect(x, y, w, h); stroke(); except with the current path after calling 
> the strokeRect method remaining the same as before the call."

The "except" is why I don't really want to do this.

Could you take a look again and let me know if you think the new 
definitions work ok? Don't hesitate to tell me that they're still broken. :-)

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