- From: David Levin <levin@google.com>
- Date: Mon, 22 Feb 2010 11:13:35 -0800
I've talked with some other folks on WebKit (Maciej and Oliver) about having a canvas that is available to workers. They suggested some nice modifications to make it an offscreen canvas, which may be used in the Document or in a Worker. Proposal: Introduce an OffscreenCanvas which may be created from a Document or a Worker context. interface OffscreenCanvas { attribute unsigned long width; attribute unsigned long height; DOMString toDataURL (in optional DOMString type, in any... args); object getContext(in DOMString contextId); }; When it is created in the Worker context, OffscreenCanvas.getContext("2d") returns a CanvasWorkerContext2D. In the Document context, it returns a CanvasRenderingContext2D. The base class for both CanvasWorkerContext2D and CanvasRenderingContext2D is CanvasContext2D. CanvasContext2D is just like a CanvasRenderingContext2D except for omitting the font methods and any method which uses HTML elements. It does have some replacement methods for createPattern/drawImage which take an OffscreenCanvas. The canvas object attribute is either a HTMLCanvasElement or an OffscreenCanvas depending on what the canvas context came from. interface CanvasContext2D { readonly attribute object canvas; void save(); void restore(); void scale(in float sx, in float sy); void rotate(in float angle); void translate(in float tx, in float ty); void transform(in float m11, in float m12, in float m21, in float m22, in float dx, in float dy); void setTransform(in float m11, in float m12, in float m21, in float m22, in float dx, in float dy); attribute float globalAlpha; attribute [ConvertNullToNullString] DOMString globalCompositeOperation; CanvasGradient createLinearGradient(in float x0, in float y0, in float x1, in float y1) raises (DOMException); CanvasGradient createRadialGradient(in float x0, in float y0, in float r0, in float x1, in float y1, in float r1) raises (DOMException); CanvasPattern createPattern(in OffscreenCanvas image, in DOMString repetition); attribute float lineWidth; attribute [ConvertNullToNullString] DOMString lineCap; attribute [ConvertNullToNullString] DOMString lineJoin; attribute float miterLimit; attribute float shadowOffsetX; attribute float shadowOffsetY; attribute float shadowBlur; attribute [ConvertNullToNullString] DOMString shadowColor; void clearRect(in float x, in float y, in float width, in float height); void fillRect(in float x, in float y, in float width, in float height); void strokeRect(in float x, in float y, in float w, in float h); void beginPath(); void closePath(); void moveTo(in float x, in float y); void lineTo(in float x, in float y); void quadraticCurveTo(in float cpx, in float cpy, in float x, in float y); void bezierCurveTo(in float cp1x, in float cp1y, in float cp2x, in float cp2y, in float x, in float y); void arcTo(in float x1, in float y1, in float x2, in float y2, in float radius); void rect(in float x, in float y, in float width, in float height); void arc(in float x, in float y, in float radius, in float startAngle, in float endAngle, in boolean anticlockwise); void fill(); void stroke(); void clip(); boolean isPointInPath(in float x, in float y); void drawImage(in OffscreenCanvas image, in float dx, in float dy, in optional float dw, in optional float dh); void drawImage(in OffscreenCanvas image, in float sx, in float sy, in float sw, in float sh, in float dx, in float dy, in float dw, in float dh); // pixel manipulation ImageData createImageData(in float sw, in float sh) raises (DOMException); ImageData getImageData(in float sx, in float sy, in float sw, in float sh) raises(DOMException); void putImageData(in ImageData imagedata, in float dx, in float dy, in optional float dirtyX, in optional float dirtyY, in optional float dirtyWidth, in optional float dirtyHeight]); }; interface CanvasWorkerContext2D : CanvasContext2D { }; interface CanvasRenderingContext2D : CanvasContext2D { CanvasPattern createPattern(in HTMLImageElement image, in DOMString repetition); CanvasPattern createPattern(in HTMLCanvasElement image, in DOMString repetition); CanvasPattern createPattern(in HTMLVideoElement image, in DOMString repetition); // focus management boolean drawFocusRing(in Element element, in float xCaret, in float yCaret, in optional boolean canDrawCustom); // text attribute DOMString font; attribute DOMString textAlign; attribute DOMString textBaseline; void fillText(in DOMString text, in float x, in float y, in optional float maxWidth); void strokeText(in DOMString text, in float x, in float y, in optional float maxWidth); TextMetrics measureText(in DOMString text); // drawing images void drawImage(in HTMLImageElement image, in float dx, in float dy, in optional float dw, in float dh); void drawImage(in HTMLImageElement image, in float sx, in float sy, in float sw, in float sh, in float dx, in float dy, in float dw, in float dh); void drawImage(in HTMLVideoElement image, in float dx, in float dy, in optional float dw, in optional float dh); void drawImage(in HTMLVideoElement image, in float sx, in float sy, in float sw, in float sh, in float dx, in float dy, in float dw, in float dh); void drawImage(in HTMLCanvasElement image, in float dx, in float dy, in optional float dw, in float dh); void drawImage(in HTMLCanvasElement image, in float sx, in float sy, in float sw, in float sh, in float dx, in float dy, in float dw, in float dh); }; Questions and comments are welcome. Note that something similar did come up in December and this proposal avoids doing any text related items in the offscreen canvas which was a concern brought up by Robert O'Callahan at the time ( http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2009-December/024478.html ). Dave -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.whatwg.org/pipermail/whatwg-whatwg.org/attachments/20100222/53b63705/attachment-0001.htm>
Received on Monday, 22 February 2010 11:13:35 UTC