- From: Kang-Hao (Kenny) Lu <kanghaol@oupeng.com>
- Date: Thu, 21 Mar 2013 16:28:33 +0800
- To: W3C Canvas Spec <public-canvas-api@w3.org>
- CC: HTML-related tests <public-html-testsuite@w3.org>, Tietao Wang <tietaow@opera.com>
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 08:29:04 UTC