Re: throw or not when sw or sh is zero in drawImage(img, 0, 0, sw, wh, ...) (WHATWG r7589)

The spec was changed at the last minute by the WhatWG and it was actually
done by accident. (Cameron did a global replace for WebIDL.)
The W3C version reversed that change since the change was unintentional and
there were already 2 independent implementations. Ian decided that the new
prose made more sense and just left it in.

As a developer you should try to catch the exception since both Firefox and
IE will throw. This will make your code work everywhere.
If those browser change their behavior, we will update the spec accordingly
(but you will still have to account for old browsers)

Rik

On Thu, Mar 21, 2013 at 1:28 AM, Kang-Hao (Kenny) Lu <kanghaol@oupeng.com>wrote:

> There is a discrepancy between the W3C spec and the WHATWG spec in
> handing this case
>
>   ctx.drawImage(img, 0, 0, sw, wh, ...)
>
> where one of sw and sh is zero. The relevant proses are
>
>   # If one of the sw or sh arguments is zero, the implementation must
>   # throw an IndexSizeError exception.
>
> of W3C and
>
>   # 3. If one of the sw or sh arguments is zero, abort these steps.
>   # Nothing is painted.
>
> of WHATWG. The change happened at WHATWG r7589[1], which unfortunately
> was around the time when the W3C version transitioned to CR. The
> relevant case is 2d.drawImage.zerosource.html, which is again quite
> unfortunately, approved.
>
>
> Our team unfortunately falls into the dilemma as which to follow, and,
> you know, it's very difficult to explain why there's a difference
> between the two specs, the W3C process and such. So... I guess my
> question is why isn't r7589 applied to W3C Canvas Level2 when it's
> applied in HTML5.1[2] and what's the process here? (That is, if the
> changed in at least applied in Level2, we can be more convinced that
> it's the way to go.)
>
>
> == Technical Arguments ==
>
> Not sure if this helps the process but here are the reasons why not
> throwing is better:
>
> 1. It's just the better behavior
>
> It's not at all clear to me why the spec asked UA to throw at the
> beginning. There are many situations where it's very natural to have
> either sw or sh be zero here. For example, a straightforward
> implementation of the background of a side-scrolling game would divide
> the background image into two and one of which, at times, would have a
> sw of zero.
>
> If the error here is to help Web developers spot logical flaws in the
> game then I think it makes more sense to make drawImage throw only when
> sw is zero *but dw is not*.
>
>
> 2. Compatibility
>
> Currently only WebKit implements the WHATWG behavior (not throwing).
> However, it seems very likely that this part of the Web (the WebKit Web
> :( ) is already depending on drawImage not throwing. Google
> "IndexSizeError" gives [3][4][5], and I bet there are much more. Also,
> it is known that getting the Android WebView to change is hard, and
> therefore not throwing seems like the way to converge.
>
>
> Anyway, the baseline is that we shouldn't have a difference between the
> two specs.
>
>
> == Rant ==
>
> Having discrepancy in these two versions of the spec is no fun. Really.
>
>
> [1] http://html5.org/tools/web-apps-tracker?from=7588&to=7589
> [2] http://lists.w3.org/Archives/Public/public-html/2013Jan/0022
> [3] https://github.com/Animatron/player/pull/70
> [4] https://github.com/aduros/flambe/issues/55
> [5] http://groups.google.com/group/melonjs/msg/571b36150fd2760b
>
>
> Cheers,
> Kenny
> --
> Web Specialist, Opera Sphinx Game Force, Oupeng Browser, Beijing
> Try Oupeng: http://www.oupeng.com/
>
>

Received on Thursday, 21 March 2013 19:46:01 UTC