[whatwg] Canvas in Workers
Gregg Tavares (社用)
gman at google.com
Mon Dec 3 00:15:31 PST 2012
On Sat, Dec 1, 2012 at 2:44 AM, Ian Hickson <ian at hixie.ch> wrote:
> On Fri, 30 Nov 2012, Gregg Tavares (社ç~T¨) wrote:
> >
> > on ImageBitmap should zero size canvases just work (and create a 0 sized
> > ImageBitmap)?
> >
> > My personal preference is for APIs that just work with zero sizes so I
> > don't have to write lots of special cases for handling zero.
> >
> > For example [1,2,3].slice(0,0) returns []. It doesn't throw.
> > "abc".substring(0,0) returns "" it doesn't throw. fillRect(x, y, 0, 0)
> > doesn't throw. etc...
> >
> > It just makes life a lot easier
>
> The main reason 0-sized canvases have always thrown in drawImage() is that
> I couldn't work out what you would paint, nor why you'd have a zero-sized
> canvas, and throwing seemed like it'd be the best way to help the author
> figure out where the problem was, rather than just ignoring the call and
> having the author scratch their head about why nothing was happening.
>
> If there's cases where you would legitimately end up with zero-sized
> canvases that you'd try to draw from, though, I'm happy to change it.
>
I don't see how zero sized canvases are any different than zero sized
arrays or empty strings. It's not a matter of use case. It's a matter of
not having to write checks everywhere for 0. If I'm writing some app that
takes a user supplied size (say a photo editing app where the user can
select a rectangle and copy and paste), why do I want to have to check for
zero?
var x = Math.min(x1, x2);
var y = Math.min(y1, y2);
var width = Math.abs(x1 - x2);
var height = Math.abs(y1 - y2);
// Do something with rect defined by x,y,width,height
This seems no different from malloc(0) in C or the other cases I've
mentioned (array size 0 and empty string). Lots of programming becomes
easier when size = 0 works. Maybe I'm animating
function draw() {
var scale = Math.sin() * 0.5 + 0.5;
var width = realWidth * scale;
var height = realHeight * scale;
// do something with width, height
}
Why do I want to have to check for zero and special case it?
You could argue that I'd have to check of negative values but that's still
nicer than checking for 0
function draw() {
var scale = Math.sin() * 0.5 + 0.5;
var width = Math.max(0, realWidth * scale);
var height = Math.max(0, realHeight * scale);
// do something with width, height
}
vs
function draw() {
var scale = Math.sin() * 0.5 + 0.5;
var width = realWidth * scale;
var height = realHeight * scale;
if (width <= 0 || height <= 0) {
// skip this step
} else {
// do something with width, height
}
}
I'm just making the case it seems like 0 should always work. That includes
ImageBitmap, Canvas and ImageData
>
> --
> 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