| Index: tools/dom/templates/html/impl/impl_CanvasRenderingContext2D.darttemplate
|
| diff --git a/tools/dom/templates/html/impl/impl_CanvasRenderingContext2D.darttemplate b/tools/dom/templates/html/impl/impl_CanvasRenderingContext2D.darttemplate
|
| index 93fc2fa222821e765124cb40166bc1c60a9940c6..8aa13d16e384f2397a945925e7e74127fdab728a 100644
|
| --- a/tools/dom/templates/html/impl/impl_CanvasRenderingContext2D.darttemplate
|
| +++ b/tools/dom/templates/html/impl/impl_CanvasRenderingContext2D.darttemplate
|
| @@ -50,11 +50,93 @@ $!MEMBERS
|
| }
|
|
|
| /**
|
| + * Draws an image from a CanvasImageSource to an area of this canvas.
|
| + *
|
| + * The image will be drawn to an area of this canvas defined by
|
| + * [destRect]. [sourceRect] defines the region of the source image that is
|
| + * drawn.
|
| + * If [sourceRect] is not provided, then
|
| + * the entire rectangular image from [source] will be drawn to this context.
|
| + *
|
| + * If the image is larger than canvas
|
| + * will allow, the image will be clipped to fit the available space.
|
| + *
|
| + * CanvasElement canvas = new CanvasElement(width: 600, height: 600);
|
| + * CanvasRenderingContext2D ctx = canvas.context2d;
|
| + * ImageElement img = document.query('img');
|
| + * img.width = 100;
|
| + * img.height = 100;
|
| + *
|
| + * // Scale the image to 20x20.
|
| + * ctx.drawImageToRect(img, new Rect(50, 50, 20, 20));
|
| + *
|
| + * VideoElement video = document.query('video');
|
| + * video.width = 100;
|
| + * video.height = 100;
|
| + * // Take the middle 20x20 pixels from the video and stretch them.
|
| + * ctx.drawImageToRect(video, new Rect(50, 50, 100, 100),
|
| + * sourceRect: new Rect(40, 40, 20, 20));
|
| + *
|
| + * // Draw the top 100x20 pixels from the otherCanvas.
|
| + * CanvasElement otherCanvas = document.query('canvas');
|
| + * ctx.drawImageToRect(otherCanvas, new Rect(0, 0, 100, 20),
|
| + * sourceRect: new Rect(0, 0, 100, 20));
|
| + *
|
| + * See also:
|
| + *
|
| + * * [CanvasImageSource] for more information on what data is retrieved
|
| + * from [source].
|
| + * * [drawImage](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-drawimage)
|
| + * from the WHATWG.
|
| + */
|
| + @DomName('CanvasRenderingContext2D.drawImage')
|
| + void drawImageToRect(CanvasImageSource source, Rect destRect,
|
| + {Rect sourceRect}) {
|
| +$if DART2JS
|
| + if (sourceRect == null) {
|
| + drawImageScaled(source,
|
| + destRect.left,
|
| + destRect.top,
|
| + destRect.width,
|
| + destRect.height);
|
| + } else {
|
| + drawImageScaledFromSource(source,
|
| + sourceRect.left,
|
| + sourceRect.top,
|
| + sourceRect.width,
|
| + sourceRect.height,
|
| + destRect.left,
|
| + destRect.top,
|
| + destRect.width,
|
| + destRect.height);
|
| + }
|
| +$else
|
| + if (sourceRect == null) {
|
| + $dom_drawImage(source,
|
| + destRect.left,
|
| + destRect.top,
|
| + destRect.width,
|
| + destRect.height);
|
| + } else {
|
| + $dom_drawImage(source,
|
| + sourceRect.left,
|
| + sourceRect.top,
|
| + sourceRect.width,
|
| + sourceRect.height,
|
| + destRect.left,
|
| + destRect.top,
|
| + destRect.width,
|
| + destRect.height);
|
| + }
|
| +$endif
|
| + }
|
| +
|
| + /**
|
| * Draws an image from a CanvasImageSource to this canvas.
|
| *
|
| * The entire image from [source] will be drawn to this context with its top
|
| - * left corner at the point ([destinationX], [destinationY]). If the image is
|
| - * larger than canvas will allow, the image will be cropped to fit the
|
| + * left corner at the point ([destX], [destY]). If the image is
|
| + * larger than canvas will allow, the image will be clipped to fit the
|
| * available space.
|
| *
|
| * CanvasElement canvas = new CanvasElement(width: 600, height: 600);
|
| @@ -69,7 +151,7 @@ $!MEMBERS
|
| * CanvasElement otherCanvas = document.query('canvas');
|
| * otherCanvas.width = 100;
|
| * otherCanvas.height = 100;
|
| - * ctx.drawImage(otherCanvas, 590, 590); // will get cropped
|
| + * ctx.drawImage(otherCanvas, 590, 590); // will get clipped
|
| *
|
| * See also:
|
| *
|
| @@ -79,20 +161,24 @@ $!MEMBERS
|
| * from the WHATWG.
|
| */
|
| @DomName('CanvasRenderingContext2D.drawImage')
|
| - void drawImage(CanvasImageSource source, num destinationX, num destinationY) {
|
| - $dom_drawImage(source, destinationX, destinationY);
|
| +$if DART2JS
|
| + @JSName('drawImage')
|
| + void drawImage(CanvasImageSource source, num destX, num destY) native;
|
| +$else
|
| + void drawImage(CanvasImageSource source, num destX, num destY) {
|
| + $dom_drawImage(source, destX, destY);
|
| }
|
| +$endif
|
|
|
| /**
|
| * Draws an image from a CanvasImageSource to an area of this canvas.
|
| *
|
| - * The image will be drawn to an area of this canvas defined by
|
| - * [destinationRect]. If [sourceRect] is not provided, then
|
| - * the entire rectangular image from [source] will be drawn to this context.
|
| - * If the dimensions of [source] or [sourceRect]
|
| - * differ from [destinationRect], then the image will be scaled to fit.
|
| + * The image will be drawn to this context with its top left corner at the
|
| + * point ([destX], [destY]) and will be scaled to be [destWidth] wide and
|
| + * [destHeight] tall.
|
| + *
|
| * If the image is larger than canvas
|
| - * will allow, the image will be cropped to fit the available space.
|
| + * will allow, the image will be clipped to fit the available space.
|
| *
|
| * CanvasElement canvas = new CanvasElement(width: 600, height: 600);
|
| * CanvasRenderingContext2D ctx = canvas.context2d;
|
| @@ -100,20 +186,49 @@ $!MEMBERS
|
| * img.width = 100;
|
| * img.height = 100;
|
| *
|
| - * // Scale the image to 20x20.
|
| - * ctx.drawImageAtScale(img, new Rect(50, 50, 20, 20));
|
| + * // Scale the image to 300x50 at the point (20, 20)
|
| + * ctx.drawImageScaled(img, 20, 20, 300, 50);
|
| + *
|
| + * See also:
|
| + *
|
| + * * [CanvasImageSource] for more information on what data is retrieved
|
| + * from [source].
|
| + * * [drawImage](http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-drawimage)
|
| + * from the WHATWG.
|
| + */
|
| + @DomName('CanvasRenderingContext2D.drawImage')
|
| +$if DART2JS
|
| + @JSName('drawImage')
|
| + void drawImageScaled(CanvasImageSource source,
|
| + num destX, num destY, num destWidth, num destHeight) native;
|
| +$else
|
| + void drawImageScaled(CanvasImageSource source,
|
| + num destX, num destY, num destWidth, num destHeight) {
|
| + $dom_drawImage(source, destX, destY, destWidth, destHeight);
|
| + }
|
| +$endif
|
| +
|
| + /**
|
| + * Draws an image from a CanvasImageSource to an area of this canvas.
|
| + *
|
| + * The image is a region of [source] that is [sourceWidth] wide and
|
| + * [destHeight] tall with top left corner at ([sourceX], [sourceY]).
|
| + * The image will be drawn to this context with its top left corner at the
|
| + * point ([destX], [destY]) and will be scaled to be [destWidth] wide and
|
| + * [destHeight] tall.
|
| + *
|
| + * If the image is larger than canvas
|
| + * will allow, the image will be clipped to fit the available space.
|
| *
|
| * VideoElement video = document.query('video');
|
| * video.width = 100;
|
| * video.height = 100;
|
| * // Take the middle 20x20 pixels from the video and stretch them.
|
| - * ctx.drawImageAtScale(video, new Rect(50, 50, 100, 100),
|
| - * sourceRect: new Rect(40, 40, 20, 20));
|
| + * ctx.drawImageScaledFromSource(video, 40, 40, 20, 20, 50, 50, 100, 100);
|
| *
|
| - * // Draw the top 100x20 pixels from the otherCanvas.
|
| + * // Draw the top 100x20 pixels from the otherCanvas to this one.
|
| * CanvasElement otherCanvas = document.query('canvas');
|
| - * ctx.drawImageAtScale(otherCanvas, new Rect(0, 0, 100, 20),
|
| - * sourceRect: new Rect(0, 0, 100, 20));
|
| + * ctx.drawImageScaledFromSource(otherCanvas, 0, 0, 100, 20, 0, 0, 100, 20);
|
| *
|
| * See also:
|
| *
|
| @@ -123,26 +238,19 @@ $!MEMBERS
|
| * from the WHATWG.
|
| */
|
| @DomName('CanvasRenderingContext2D.drawImage')
|
| - void drawImageAtScale(CanvasImageSource source, Rect destinationRect,
|
| - {Rect sourceRect}) {
|
| - if (sourceRect == null) {
|
| - $dom_drawImage(source,
|
| - destinationRect.left,
|
| - destinationRect.top,
|
| - destinationRect.width,
|
| - destinationRect.height);
|
| - } else {
|
| - $dom_drawImage(source,
|
| - sourceRect.left,
|
| - sourceRect.top,
|
| - sourceRect.width,
|
| - sourceRect.height,
|
| - destinationRect.left,
|
| - destinationRect.top,
|
| - destinationRect.width,
|
| - destinationRect.height);
|
| - }
|
| +$if DART2JS
|
| + @JSName('drawImage')
|
| + void drawImageScaledFromSource(CanvasImageSource source,
|
| + num sourceX, num sourceY, num sourceWidth, num sourceHeight,
|
| + num destX, num destY, num destWidth, num destHeight) native;
|
| +$else
|
| + void drawImageScaledFromSource(CanvasImageSource source,
|
| + num sourceX, num sourceY, num sourceWidth, num sourceHeight,
|
| + num destX, num destY, num destWidth, num destHeight) {
|
| + $dom_drawImage(source, sourceX, sourceY, sourceWidth, sourceHeight,
|
| + destX, destY, destWidth, destHeight);
|
| }
|
| +$endif
|
|
|
| $if DART2JS
|
| @DomName('CanvasRenderingContext2D.lineDashOffset')
|
| @@ -153,5 +261,9 @@ $if DART2JS
|
| void set lineDashOffset(num value) => JS('void',
|
| 'typeof #.lineDashOffset != "undefined" ? #.lineDashOffset = # : '
|
| '#.webkitLineDashOffset = #', this, this, value, this, value);
|
| +$else
|
| + // TODO(amouravski): Add Dartium native methods for drawImage once we figure
|
| + // out how to not break native bindings.
|
| $endif
|
| }
|
| +
|
|
|