- From: Philip Taylor <philip@zaynar.demon.co.uk>
- Date: Tue, 21 Aug 2007 18:41:17 +0100
- To: Mihai Sucan <mihai.sucan@gmail.com>
- CC: public-html <public-html@w3.org>
Mihai Sucan wrote: > 3. The getContext() method should be defined such that any number of > additional arguments are allowed, just like toDataURL() is defined. This > is forward thinking about initializing various contexts with any settings. I believe that is already covered by "1.3.1. Common conformance requirements for APIs exposed to JavaScript": "Unless other[wise] specified, if a method is passed more arguments than is defined for that method in its IDL definition, the excess arguments must be ignored." > 5. Drawing states should be saveable with IDs, and for easier restoring. > > save(id) > restore(id) > > If id is not provided, then save() works as defined now. The same for > restore(). > > Currently, it's not trivial to save and restore a specific state. I think a more convenient syntax would be: var state = ctx.save(); ctx.restore(state); But how would it interact with normal calls to ctx.restore()? I'm unsure what are the cases where you'd want to do non-stack-based save/restore and would use restore(id) rather than simply defining and calling your own function to set the whole state each time. > I don't believe it can be argued that such changes break (too many) > applications. Today's applications using canvas are experiments. The > entire spec is subject to change, and as such nobody should complain. They're not all experiments - I found http://www.city-data.com/city/Hardy-Iowa.html (using PlotKit on canvas) via <http://canvex.lazyilluminati.com/survey/2007-07-17/analyse.cgi/tag/canvas>. Apparently there's Yahoo Pipes too. I've no idea how many other non-experiments there are, though. > 7. On the basis of save()/restore() state, I think it would be a good > idea (performance-wise, for various applications), to be able to do > something like this: > > saveImage(id) > restoreImage(id) That effect should already be possible, like: CanvasRenderingContext2D.saveImage = function(x, y, w, h) { var canvas = document.createElement('canvas'); canvas.width = w; canvas.height = h; canvas.getContext('2d').drawImage(this.canvas, x, y, w, h, 0, 0, w, h); return canvas; }; CanvasRenderingContext2D.restoreImage = function(canvas, x, y) { this.drawImage(canvas, x, y); }; (untested), which should be sufficiently fast and memory-efficient. > 9. I would propose something different, a different idea. Why not define > an optional method for the 2d context, which allows authors to say > something like importNodeRender()? Here's the "funky" idea: > > importNodeRender(node) > > ... where node is any DOM node, e.g. > document.getElementById('whatever'). The way "captures" the rendered > image of that element, irrespective what it is (maybe it's SVG, Flash, > simple HTML+CSS, whatever). > > importDocument(x, y, w, h) > > This method could allow the author to capture a part of the rendered > document page. x and y positions are taken from the entire document, not > just the visible page, in the current window size. > [...] > Would this be overly complex? Popular UAs already have ways to generate > page thumbs. Mozilla has a non-standard drawWindow method, to draw whole Windows into the canvas (e.g. for thumbnails), which sounds similar to your proposal. It is limited to trusted content (like extensions) for security reasons: // We can't allow web apps to call this until we fix at least the // following potential security issues: // -- rendering cross-domain IFRAMEs and then extracting the results // -- rendering the user's theme and then extracting the results // -- rendering native anonymous content (e.g., file input paths; // scrollbars should be allowed) <http://lxr.mozilla.org/mozilla/source/content/canvas/src/nsCanvasRenderingContext2D.cpp#2305> as well as issues like rendering cross-domain <img>s or rendering <canvas>s that have had cross-domain Images drawn onto them, etc. (I don't know if this means it's overly complex or infeasible-to-secure, or not.) -- Philip Taylor philip@zaynar.demon.co.uk
Received on Tuesday, 21 August 2007 17:41:24 UTC