- From: Michael A. Puls II <shadow2531@gmail.com>
- Date: Thu, 10 Dec 2009 10:34:48 -0500
On Wed, 09 Dec 2009 12:08:29 -0500, Ian Hickson <ian at hixie.ch> wrote: > On Fri, 30 Oct 2009, OmegaJunior wrote: >> >> Since Last Call was announced and I just ran into this problem, hereby >> this question: >> >> If an image is drawn on a Canvas element, and subsequently the >> javascript function cloneNode(true) is executed for that element, should >> the clone include a copy of the source canvas image, or should it show >> an empty space? >> >> From my perspective (the web author), I'd prefer to have the canvas >> image included when executing (the deep) cloneNode(true), and excluded >> it when using (the shallow) cloneNode(false). > > The cloneNode() method just clones the node, not the node's state, so the > bitmap isn't copied. You can easily draw one bitmap onto the other, > though, using drawImage(). > > > On Sat, 14 Nov 2009, Michael A. Puls II wrote: >> >> I think it'd be cool if the clone showed the image. But, I'm pretty sure >> cloneNode(true) is just supposed to create a new canvas element with the >> same attributes and childNodes as the original. It's not supposed to >> copy everything that's going on with the element being copied. >> >> There are some exceptions with state for certain elements. Perhaps that >> can happen with canvas too. > > I'd rather keep these exceptions to an absolute minimum. cloneNode() is > part of the DOM Core API, and it would be bad for nodes to clone > differently based on whether it's an HTML-aware UA implementing the DOM > Core API or not. Thanks. I don't know canvas stuff that well. What's the proper way to patch cloneNode to do a full copy? I think something like the following, but maybe you know better. (function() { var oldCloneNode = HTMLCanvasElement.prototype.cloneNode; HTMLCanvasElement.prototype.cloneNode = function(deep) { var copy = oldCloneNode.call(this, deep); var copy_ctx = copy.getContext("2d"); copy_ctx.drawImage(this, 0, 0, this.width, this.height); return copy; }; })(); -- Michael
Received on Thursday, 10 December 2009 07:34:48 UTC