Re: [whatwg] Canvas - non-standard globalCompositeOperation

2008-01-30 Thread Ian Hickson
On Thu, 28 Jun 2007, Philip Taylor wrote:

 In addition to the standard values for globalCompositeOperation (and
 ignoring 'darker'), Gecko supports: [...] Webkit supports: [...]

 [...]

 As far as I can imagine, for each non-standard value, the possible
 situations are:
 
 * No content relies on that value.
  = Web browsers should remove support for it: it has no purpose, and
 it may result in authors accidentally using that value and becoming
 confused when their code doesn't work in other browsers which will be
 irritating for everyone and it will evolve into the next situation:
 
 * Web content relies on that value.
  = It should be added to the spec, because it's necessary for
 handling web content.
 
 * Non-web, browser-specific content (extensions, widgets, etc) relies
 on that value, and web content doesn't.
  = It should be disabled except when run in the extension/widget/etc
 context, to avoid the problems as in the first case. That may cause
 minor confusion to the extension/widget/etc authors about why their
 code [which is relying on undocumented features] works differently if
 they run it on the web instead, but that seems insignificant compared
 to having interoperability problems on the web.
 
 * Nobody cares.
  = Nothing happens.
 
 Am I missing any issues here? Would any browser developer think one of 
 the first three situations applies, and be willing to make the necessary 
 changes in that case?

I agree with your conclusions. I've not changed the spec. I recommend that 
test suites test for the lack of support here. If we find content relies 
on these, I can add them to the spec later.

-- 
Ian Hickson   U+1047E)\._.,--,'``.fL
http://ln.hixie.ch/   U+263A/,   _.. \   _\  ;`._ ,.
Things that are impossible just take longer.   `._.-(,_..'--(,_..'`-.;.'


[whatwg] Canvas - non-standard globalCompositeOperation

2007-06-27 Thread Philip Taylor

In addition to the standard values for globalCompositeOperation (and
ignoring 'darker'), Gecko supports:

   clear: The Porter-Duff 'clear' operator, which always sets the
output to rgba(0, 0, 0, 0).

   over: Synonym for 'source-over'. The code says not part of spec,
kept here for compat. (It looks like FF1.5 had a broken
'source-over', and implemented 'over' like a correct 'source-over'.
'source-over' was fixed in FF2.0, and 'over' left unchanged.)

(See 
http://lxr.mozilla.org/mozilla/source/content/canvas/src/nsCanvasRenderingContext2D.cpp#1703.)

WebKit supports:

   clear: Same as above.

   highlight: Synonym for source-over. (See
http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSImage_Class/Reference/Reference.html#//apple_ref/doc/c_ref/NSCompositeHighlight
- NSCompositeHighlight: Deprecated. Mapped to
NSCompositeSourceOver.)

(See 
http://trac.webkit.org/projects/webkit/browser/trunk/WebCore/platform/graphics/GraphicsTypes.cpp#L34.)

Opera is very nice and doesn't do anything wrong.

The spec clearly defines the behaviour here: any attempts to set such
values must be ignored.



'clear' is pretty useless, since it's exactly equivalent to doing
globalAlpha = 0; globalCompositeOperation = 'copy' or (depending on
the transform matrix) clearRect(0, 0, w, h). The spec already omits
the Porter-Duff 'B' operator (which sets the output to be equal to the
destination bitmap, i.e. is equivalent to not drawing anything at
all), so it does not seem reasonable to argue for adding 'clear' just
for completeness. I can't think of any other reasons for it to be
added to the spec, other than for interoperability.



As far as I can imagine, for each non-standard value, the possible
situations are:

* No content relies on that value.
 = Web browsers should remove support for it: it has no purpose, and
it may result in authors accidentally using that value and becoming
confused when their code doesn't work in other browsers which will be
irritating for everyone and it will evolve into the next situation:

* Web content relies on that value.
 = It should be added to the spec, because it's necessary for
handling web content.

* Non-web, browser-specific content (extensions, widgets, etc) relies
on that value, and web content doesn't.
 = It should be disabled except when run in the extension/widget/etc
context, to avoid the problems as in the first case. That may cause
minor confusion to the extension/widget/etc authors about why their
code [which is relying on undocumented features] works differently if
they run it on the web instead, but that seems insignificant compared
to having interoperability problems on the web.

* Nobody cares.
 = Nothing happens.


Am I missing any issues here? Would any browser developer think one of
the first three situations applies, and be willing to make the
necessary changes in that case?

--
Philip Taylor
[EMAIL PROTECTED]