- From: Maciej Stachowiak <mjs@apple.com>
- Date: Sun, 8 Apr 2007 00:08:48 -0700
- To: Andrew Fedoniouk <news@terrainformatica.com>
- Cc: David Hyatt <hyatt@apple.com>, Doug Schepers <doug.schepers@vectoreal.com>, public-html@w3.org
On Apr 7, 2007, at 5:40 PM, Andrew Fedoniouk wrote: >> >> <canvas> is a dynamic image that can be generated on the fly via >> JS. There is usefulness to this model, since it allows you to >> build the bitmap once and then treat it like an image from that >> point on. > > If it is just an image then what was/is wrong with existing Image > object > and <img> that are there from the primordial Navigator? The Image object is actually the same as an <img> element. It's just not in the document initially. > <img id="canvas" src="placeholder.gif" /> > > <script> > var img = $("#canvas"); > var gfx = img.graphics( 300,300, "white" ); > gfx.line(...); > </script> > > or so. Or you can do <canvas><img src="placeholder.gif"></canvas>. And then the placeholder only gets loaded in browsers that don't support canvas or when script is off. Anyway, whether or not it would have been better to put a drawing API on <img>, there's not much benefit to changing how this works now. > >> >>> I would expect that any DOM element have getGraphics() method. >>> >> >> I agree with this conceptually (that the 2d-context API would be >> the way to draw in both cases). >> >> However <canvas> still serves a useful purpose for one-time bitmap >> generation. > > I am personally not against client side bitmap generation but > this canvas design and how it was injected in HTML gives an impression > of it as a "foreign matter" or some quick fix of some particular > problem in > some particular application/situation. > >> The kind of custom drawing that would work on arbitrary DOM >> elements would (in my opinion) be a bit different, since you >> would probably process actual paint events and not force the >> retention of a separate bitmap buffer. Forcing a separate buffer >> would not make much sense for containers where you have to paint >> your children as well. > > I don't think that processing actual paint events is really required. > > See: > > We do have the Image object so we can: > 1) Change its constructor to support creation of bitmaps/buffers: > var canvas = new Image(300,300, "orange"); > 2) Add to it getGraphics() method: > var gfx = canvas.getGraphics(...); > 3) By using Image.src method we can attach it as src of the <img> > or <object> or as CSS: background-image to any DOM element. > so any element can get custom image. The <canvas> API proposed in HTML5 includes a call to get a bitmap of the contents as a data: URI which you can then use with an <img> or as a CSS background. So your request is already supported. You can even draw on a <canvas> that is not in the document. > <canvas> is a synonym of <img> element that has no > reasonable backward or no-script compatibility - that > is why it creates such an impression. It has compatibility through fallback content. This actually works better than using <img> with a source image intended as fallback, since you have more choice of what the fallback can be. Instead of an image you could use arbitrary markup, or perhaps an <object> element embedding Flash or Java. > IMO, <img src="noscript.gif"> with scriptable graphics > makes significantly more sense in context of html > then the <canvas>. I don't think it's significantly better, in some ways it is worse. And it is also not worth changing now. Regards, Maciej
Received on Sunday, 8 April 2007 07:09:27 UTC