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 |
} |
+ |