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

As an aside -- Seems like most drawImage calls ought to be in try blocks.

I don't know that there's a real guarantee that the image is available 
(even after onload).


On 3/21/2013 12:45 PM, Rik Cabanier wrote:
> 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 <mailto: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 Friday, 22 March 2013 08:18:50 UTC