/* * Copyright 2010 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.google.gwt.canvas.dom.client; import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.dom.client.CanvasElement; import com.google.gwt.dom.client.ImageElement; /** * Rendering interface used to draw on a {@link CanvasElement}. * * @see <a href="http://www.w3.org/TR/2dcontext/#canvasrenderingcontext2d">W3C * HTML 5 Specification</a> */ public class Context2d extends JavaScriptObject implements Context { /** * Enum for composite style. * * @see Context2d#setGlobalCompositeOperation(Composite) */ public enum Composite { /** * A (B is ignored). Display the source image instead of the destination * image. */ COPY("copy"), /** * B atop A. Same as source-atop but using the destination image instead of * the source image and vice versa. */ DESTINATION_ATOP("destination-atop"), /** * B in A. Same as source-in but using the destination image instead of the * source image and vice versa. */ DESTINATION_IN("destination-in"), /** * B out A. Same as source-out but using the destination image instead of the * source image and vice versa. */ DESTINATION_OUT("destination-out"), /** * B over A. Same as source-over but using the destination image instead of * the source image and vice versa. */ DESTINATION_OVER("destination-over"), /** * A plus B. Display the sum of the source image and destination image, with * color values approaching 1 as a limit. */ LIGHTER("lighter"), /** * A atop B. Display the source image wherever both images are opaque. Display * the destination image wherever the destination image is opaque but the * source image is transparent. Display transparency elsewhere. */ SOURCE_ATOP("source-atop"), /** * A in B. Display the source image wherever both the source image and * destination image are opaque. Display transparency elsewhere. */ SOURCE_IN("source-in"), /** * A out B. Display the source image wherever the source image is opaque and * the destination image is transparent. Display transparency elsewhere. */ SOURCE_OUT("source-out"), /** * A over B. Display the source image wherever the source image is opaque. * Display the destination image elsewhere. */ SOURCE_OVER("source-over"), /** * A xor B. Exclusive OR of the source image and destination image. */ XOR("xor"); private final String value; private Composite(String value) { this.value = value; } public String getValue() { return value; } } /** * Enum for line-cap style. * * @see Context2d#setLineCap(LineCap) */ public enum LineCap { BUTT("butt"), ROUND("round"), SQUARE("square"); private final String value; private LineCap(String value) { this.value = value; } public String getValue() { return value; } } /** * Enum for line-join style. * * @see Context2d#setLineJoin(LineJoin) */ public enum LineJoin { BEVEL("bevel"), MITER("miter"), ROUND("round"); private final String value; private LineJoin(String value) { this.value = value; } public String getValue() { return value; } } /** * Enum for the repetition values. * * @see Context2d#createPattern(ImageElement, Repetition) * @see Context2d#createPattern(CanvasElement, Repetition) */ public enum Repetition { NO_REPEAT("no-repeat"), REPEAT("repeat"), REPEAT_X("repeat-x"), REPEAT_Y("repeat-y"); private final String value; private Repetition(String value) { this.value = value; } public String getValue() { return value; } } /** * Enum for text align style. * * @see Context2d#setTextAlign(TextAlign) */ public enum TextAlign { CENTER("center"), END("end"), LEFT("left"), RIGHT("right"), START("start"); private final String value; private TextAlign(String value) { this.value = value; } public String getValue() { return value; } } /** * Enum for text baseline style. * * @see Context2d#setTextBaseline(TextBaseline) */ public enum TextBaseline { ALPHABETIC("alphabetic"), BOTTOM("bottom"), HANGING("hanging"), IDEOGRAPHIC("ideographic"), MIDDLE("middle"), TOP("top"); private final String value; private TextBaseline(String value) { this.value = value; } public String getValue() { return value; } } /** * Specifies the context id property used in creating a Context. */ public static final String CONTEXT_ID = "2d"; protected Context2d() { } /** * Draws an arc. If a current subpath exists, a line segment is added from the * current point to the starting point of the arc. If {@code endAngle - * startAngle} is equal to or greater than {@code 2 * Math.Pi}, the arc is the * whole circumference of the circle. * * @param x the x coordinate of the center of the arc * @param y the y coordinate of the center of the arc * @param radius the radius of the arc * @param startAngle the start angle, measured in radians clockwise from the * positive x-axis * @param endAngle the end angle, measured in radians clockwise from the * positive x-axis */ public final native void arc(double x, double y, double radius, double startAngle, double endAngle) /*-{ // We must explicitly use false for the anticlockwise parameter because firefox has a bug where // the last parameter is not actually optional. this.arc(x, y, radius, startAngle, endAngle, false); }-*/; /** * Draws an arc. If a current subpath exists, a line segment is added from the * current point to the starting point of the arc. If {@code anticlockwise} is * false and {@code endAngle - startAngle} is equal to or greater than {@code * 2 * Math.PI}, or if {@code anticlockwise} is {@code true} and {@code * startAngle - endAngle} is equal to or greater than {@code 2 * Math.PI}, * then the arc is the whole circumference of the circle. * * @param x the x coordinate of the center of the arc * @param y the y coordinate of the center of the arc * @param radius the radius of the arc * @param startAngle the start angle, measured in radians clockwise from the * positive x-axis * @param endAngle the end angle, measured in radians clockwise from the * positive x-axis * @param anticlockwise if {@code true}, the arc is drawn in an anticlockwise * direction */ public final native void arc(double x, double y, double radius, double startAngle, double endAngle, boolean anticlockwise) /*-{ this.arc(x, y, radius, startAngle, endAngle, anticlockwise); }-*/; /** * Adds an arc to the current subpath, connecting it to the current point * with a line segment. * * @param x1 the x coordinate of the starting point of the arc * @param y1 the y coordinate of the starting point of the arc * @param x2 the x coordinate of the ending point of the arc * @param y2 the y coordinate of the ending point of the arc * @param radius the radius of a circle containing the arc */ public final native void arcTo(double x1, double y1, double x2, double y2, double radius) /*-{ this.arcTo(x1, y1, x2, y2, radius); }-*/; /** * Begins a new path. */ public final native void beginPath() /*-{ this.beginPath(); }-*/; /** * Draws a cubic B\u00e9zier curve from the current point to the point * (x, y), with control points (cp1x, cp1y) and (cp2x, cp2y). * * @param cp1x the x coordinate of the first control point * @param cp1y the y coordinate of the first control point * @param cp2x the x coordinate of the second control point * @param cp2y the y coordinate of the second control point * @param x the x coordinate of the end point * @param y the y coordinate of the end point */ public final native void bezierCurveTo(double cp1x, double cp1y, double cp2x, double cp2y, double x, double y) /*-{ this.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); }-*/; /** * Clears a rectangle. * * @param x the x coordinate of the rectangle's upper-left corner * @param y the y coordinate of the rectangle's upper-left corner * @param w the width of the rectangle * @param h the height of the rectangle */ public final native void clearRect(double x, double y, double w, double h) /*-{ this.clearRect(x, y, w, h); }-*/; /** * Creates a new clipping region from the current path. */ public final native void clip() /*-{ this.clip(); }-*/; /** * Closes the current path. */ public final native void closePath() /*-{ this.closePath(); }-*/; /** * Creates an image data object of the same size as the given object. * * @param imagedata an {@link ImageData} object * @return a new {@link ImageData} object */ public final native ImageData createImageData(ImageData imagedata) /*-{ return this.createImageData(imagedata); }-*/; /** * Creates an image data object of the given size. * * @param w the width of the image * @param h the height of the image * @return an {@link ImageData} object */ public final native ImageData createImageData(int w, int h) /*-{ return this.createImageData(w, h); }-*/; /** * Creates a linear gradient. * * @param x0 the x coordinate of the starting point of the gradient * @param y0 the y coordinate of the starting point of the gradient * @param x1 the x coordinate of the ending point of the gradient * @param y1 the y coordinate of the ending point of the gradient * @return a {@link CanvasGradient} object */ public final native CanvasGradient createLinearGradient(double x0, double y0, double x1, double y1) /*-{ return this.createLinearGradient(x0, y0, x1, y1); }-*/; /** * Creates a pattern from another canvas. * * @param image an {@link CanvasElement} object * @param repetition a {@link Repetition} object * @return a {@link CanvasPattern} object */ public final CanvasPattern createPattern(CanvasElement image, Repetition repetition) { return createPattern(image, repetition.getValue()); } /** * Creates a pattern from another canvas. * * @param image an {@link CanvasElement} object * @param repetition the repetition type as a String * @return a {@link CanvasPattern} object */ public final native CanvasPattern createPattern(CanvasElement image, String repetition) /*-{ return this.createPattern(image, repetition); }-*/; /** * Creates a pattern from an image. * * @param image an {@link ImageElement} object * @param repetition a {@link Repetition} object * @return a {@link CanvasPattern} object */ public final CanvasPattern createPattern(ImageElement image, Repetition repetition) { return createPattern(image, repetition.getValue()); } /** * Creates a pattern from an image. * * @param image an {@link ImageElement} object * @param repetition the repetition type as a String * @return a {@link CanvasPattern} object */ public final native CanvasPattern createPattern(ImageElement image, String repetition) /*-{ return this.createPattern(image, repetition); }-*/; /** * Creates a radial gradient. * * @param x0 the x coordinate of the center of the start circle of the gradient * @param y0 the y coordinate of the center of the start circle of the gradient * @param r0 the radius of the start circle of the gradient * @param x1 the x coordinate of the center of the end circle of the gradient * @param y1 the y coordinate of the center of the end circle of the gradient * @param r1 the radius of the end circle of the gradient * @return a {@link CanvasGradient} object */ public final native CanvasGradient createRadialGradient(double x0, double y0, double r0, double x1, double y1, double r1) /*-{ return this.createRadialGradient(x0, y0, r0, x1, y1, r1); }-*/; /** * Draws an image. * * @param image an {@link CanvasElement} object * @param dx the x coordinate of the upper-left corner of the destination rectangle * @param dy the y coordinate of the upper-left corner of the destination rectangle */ public final native void drawImage(CanvasElement image, double dx, double dy) /*-{ this.drawImage(image, dx, dy); }-*/; /** * Draws a scaled image. * * @param image an {@link CanvasElement} object * @param dx the x coordinate of the upper-left corner of the destination rectangle * @param dy the y coordinate of the upper-left corner of the destination rectangle * @param dw the width of the destination rectangle * @param dh the height of the destination rectangle */ public final native void drawImage(CanvasElement image, double dx, double dy, double dw, double dh) /*-{ this.drawImage(image, dx, dy, dw, dh); }-*/; /** * Draws a scaled subset of an image. * * @param image an {@link CanvasElement} object * @param sx the x coordinate of the upper-left corner of the source rectangle * @param sy the y coordinate of the upper-left corner of the source rectangle * @param sw the width of the source rectangle * @param sh the width of the source rectangle * @param dx the x coordinate of the upper-left corner of the destination rectangle * @param dy the y coordinate of the upper-left corner of the destination rectangle * @param dw the width of the destination rectangle * @param dh the height of the destination rectangle */ public final native void drawImage(CanvasElement image, double sx, double sy, double sw, double sh, double dx, double dy, double dw, double dh) /*-{ this.drawImage(image, sx, sy, sw, sh, dx, dy, dw, dh); }-*/; /** * Draws an image. * * @param image an {@link ImageElement} object * @param dx the x coordinate of the upper-left corner of the destination rectangle * @param dy the y coordinate of the upper-left corner of the destination rectangle */ public final native void drawImage(ImageElement image, double dx, double dy) /*-{ this.drawImage(image, dx, dy); }-*/; /** * Draws a scaled image. * * @param image an {@link ImageElement} object * @param dx the x coordinate of the upper-left corner of the destination rectangle * @param dy the y coordinate of the upper-left corner of the destination rectangle * @param dw the width of the destination rectangle * @param dh the height of the destination rectangle */ public final native void drawImage(ImageElement image, double dx, double dy, double dw, double dh) /*-{ this.drawImage(image, dx, dy, dw, dh); }-*/; /** * Draws a scaled subset of an image. * * @param image an {@link ImageElement} object * @param sx the x coordinate of the upper-left corner of the source rectangle * @param sy the y coordinate of the upper-left corner of the source rectangle * @param sw the width of the source rectangle * @param sh the width of the source rectangle * @param dx the x coordinate of the upper-left corner of the destination rectangle * @param dy the y coordinate of the upper-left corner of the destination rectangle * @param dw the width of the destination rectangle * @param dh the height of the destination rectangle */ public final native void drawImage(ImageElement image, double sx, double sy, double sw, double sh, double dx, double dy, double dw, double dh) /*-{ this.drawImage(image, sx, sy, sw, sh, dx, dy, dw, dh); }-*/; /** * Fills the current path. */ public final native void fill() /*-{ this.fill(); }-*/; /** * Fills a rectangle. * * @param x the x coordinate of the rectangle's upper-left corner * @param y the y coordinate of the rectangle's upper-left corner * @param w the width of the rectangle * @param h the height of the rectangle */ public final native void fillRect(double x, double y, double w, double h) /*-{ this.fillRect(x, y, w, h); }-*/; /** * Draws filled text. * * @param text the text as a String * @param x the x coordinate of the text position * @param y the y coordinate of the text position */ public final native void fillText(String text, double x, double y) /*-{ // FF3.0 does not implement this method. if (this.fillText) { this.fillText(text, x, y); } }-*/; /** * Draws filled text squeezed into the given max width. * * @param text the text as a String * @param x the x coordinate of the text position * @param y the y coordinate of the text position * @param maxWidth the maximum width for the text */ public final native void fillText(String text, double x, double y, double maxWidth) /*-{ this.fillText(text, x, y, maxWidth); }-*/; /** * Gets this context's canvas. * * @return a {@link CanvasElement} object */ public final native CanvasElement getCanvas() /*-{ return this.canvas; }-*/; /** * Returns the context's fillStyle. In dev mode, the returned object will * be wrapped in a JavaScript array. * * @return a {@link FillStrokeStyle} object * @see #setFillStyle(FillStrokeStyle) * @see #setFillStyle(String) * @see CssColor */ public final FillStrokeStyle getFillStyle() { if (GWT.isScript()) { return getFillStyleWeb(); } else { return getFillStyleDev(); } } /** * Gets this context's font. * * @return the font name as a String * @see #setFont(String) */ public final native String getFont() /*-{ return this.font; }-*/; /** * Gets the global alpha value. * * @return the global alpha value as a double * @see #setGlobalAlpha(double) */ public final native double getGlobalAlpha() /*-{ return this.globalAlpha; }-*/; /** * Gets the global composite operation. * * @return the global composite operation as a String * @see #setGlobalCompositeOperation(Composite) * @see #setGlobalCompositeOperation(String) */ public final native String getGlobalCompositeOperation() /*-{ return this.globalCompositeOperation; }-*/; /** * Returns an image data object for the screen area denoted by * sx, sy, sw and sh. * * @param sx the x coordinate of the upper-left corner of the desired area * @param sy the y coordinate of the upper-left corner of the desired area * @param sw the width of the desired area * @param sh the height of the desired area * @return an {@link ImageData} object containing screen pixel data */ public final native ImageData getImageData(double sx, double sy, double sw, double sh) /*-{ return this.getImageData(sx, sy, sw, sh); }-*/; /** * Gets the current line-cap style. * * @return the line cap style as a String * @see #setLineCap(LineCap) * @see #setLineCap(String) */ public final native String getLineCap() /*-{ return this.lineCap; }-*/; /** * Gets the current line-join style. * * @return the line join style as a String * @see #setLineJoin(LineJoin) * @see #setLineJoin(String) */ public final native String getLineJoin() /*-{ return this.lineJoin; }-*/; /** * Gets the current line-width. * * @return the line width as a double * @see #setLineWidth(double) */ public final native double getLineWidth() /*-{ return this.lineWidth; }-*/; /** * Gets the current miter-limit. * * @return the miter limit as a double * @see #setMiterLimit(double) */ public final native double getMiterLimit() /*-{ return this.miterLimit; }-*/; /** * Gets the current shadow-blur. * * @return the shadow blur amount as a double * @see #setShadowBlur(double) */ public final native double getShadowBlur() /*-{ return this.shadowBlur; }-*/; /** * Gets the current shadow color. * * @return the shadow color as a String * @see #setShadowColor(String) */ public final native String getShadowColor() /*-{ return this.shadowColor; }-*/; /** * Gets the current x-shadow-offset. * * @return the shadow x offset as a double * @see #setShadowOffsetX(double) * @see #getShadowOffsetY() */ public final native double getShadowOffsetX() /*-{ return this.shadowOffsetX; }-*/; /** * Gets the current y-shadow-offset. * * @return the shadow y offset as a double * @see #setShadowOffsetY(double) * @see #getShadowOffsetX() */ public final native double getShadowOffsetY() /*-{ return this.shadowOffsetY; }-*/; /** * Returns the context's strokeStyle. In dev mode, the returned object will * be wrapped in a JavaScript array. * * @return the stroke style as a {@link FillStrokeStyle} object * @see #setStrokeStyle(FillStrokeStyle) * @see #setStrokeStyle(String) * @see CssColor */ public final FillStrokeStyle getStrokeStyle() { if (GWT.isScript()) { return getStrokeStyleWeb(); } else { return getStrokeStyleDev(); } } /** * Gets the current text align. * * @return the text align as a String * @see #setTextAlign(TextAlign) * @see #setTextAlign(String) */ public final native String getTextAlign() /*-{ return this.textAlign; }-*/; /** * Gets the current text baseline. * * @return the text baseline as a String * @see #setTextBaseline(TextBaseline) * @see #setTextBaseline(String) */ public final native String getTextBaseline() /*-{ return this.textBaseline; }-*/; /** * Returns true if the given point is in the current path. * * @param x the x coordinate of the point to test. * @param y the y coordinate of the point to test. * @return {@code true} if the given point is in the current path. */ public final native boolean isPointInPath(double x, double y) /*-{ return this.isPointInPath(x, y); }-*/; /** * Adds a line from the current point to the point (x, y) to the current * path. * * @param x the x coordinate of the line endpoint * @param y the y coordinate of the line endpoint */ public final native void lineTo(double x, double y) /*-{ this.lineTo(x, y); }-*/; /** * Returns the metrics for the given text. * * @param text the text to measure, as a String * @return a {@link TextMetrics} object */ public final native TextMetrics measureText(String text) /*-{ return this.measureText(text); }-*/; /** * Terminates the current path and sets the current path position to the point * (x, y). * * @param x the x coordinate of the new position * @param y the y coordinate of the new position */ public final native void moveTo(double x, double y) /*-{ this.moveTo(x, y); }-*/; /** * Draws the given image data at the given screen position. * * @param imagedata an {@link ImageData} instance to be written to the screen * @param x the x coordinate of the upper-left corner at which to draw * @param y the y coordinate of the upper-left corner at which to draw */ public final native void putImageData(ImageData imagedata, double x, double y) /*-{ return this.putImageData(imagedata, x, y); }-*/; /** * Draws a quadratic B\u00e9zier curve from the current point to the point * (x, y), with control point (cpx, cpy). * * @param cpx the x coordinate of the control point * @param cpy the y coordinate of the control point * @param x the x coordinate of the end point * @param y the y coordinate of the end point */ public final native void quadraticCurveTo(double cpx, double cpy, double x, double y) /*-{ this.quadraticCurveTo(cpx, cpy, x, y); }-*/; /** * Creates a new rectangular path. * * @param x the x coordinate of the rectangle's upper-left corner * @param y the y coordinate of the rectangle's upper-left corner * @param w the width of the rectangle * @param h the height of the rectangle */ public final native void rect(double x, double y, double w, double h) /*-{ this.rect(x, y, w, h); }-*/; /** * Restores the context's state. */ public final native void restore() /*-{ this.restore(); }-*/; /** * Applies rotation to the current transform. * * @param angle the clockwise rotation angle, in radians */ public final native void rotate(double angle) /*-{ this.rotate(angle); }-*/; /** * Saves the context's state. */ public final native void save() /*-{ this.save(); }-*/; /** * Applies scale to the current transform. * * @param x the scale factor along the x-axis * @param y the scale factor along the y-axis */ public final native void scale(double x, double y) /*-{ this.scale(x, y); }-*/; /** * Sets the context's fillStyle. * * @param fillStyle the fill style to set. * @see #getFillStyle() * @see CssColor */ public final void setFillStyle(FillStrokeStyle fillStyle) { if (GWT.isScript()) { setFillStyleWeb(fillStyle); } else { setFillStyleDev(fillStyle); } } /** * Convenience method to set the context's fillStyle to a {@link CssColor}, * specified in String form. * * @param fillStyleColor the color as a String * @see #getFillStyle() */ public final void setFillStyle(String fillStyleColor) { setFillStyle(CssColor.make(fillStyleColor)); } /** * Sets the font. * * @param f the font name as a String * @see #getFont() */ public final native void setFont(String f) /*-{ this.font = f; }-*/; /** * Sets the global alpha value. * * @param alpha the global alpha value as a double * @see #getGlobalAlpha() */ public final native void setGlobalAlpha(double alpha) /*-{ this.globalAlpha = alpha; }-*/; /** * Sets the global composite operation. * * @param composite a {@link Composite} value * @see #getGlobalCompositeOperation() */ public final void setGlobalCompositeOperation(Composite composite) { setGlobalCompositeOperation(composite.getValue()); } /** * Sets the global composite operation. * * @param globalCompositeOperation the operation as a String * @see #getGlobalCompositeOperation() */ public final native void setGlobalCompositeOperation(String globalCompositeOperation) /*-{ this.globalCompositeOperation = globalCompositeOperation; }-*/; /** * Sets the line-cap style. * * @param lineCap the line cap style as a {@link LineCap} value * @see #getLineCap() */ public final void setLineCap(LineCap lineCap) { setLineCap(lineCap.getValue()); } /** * Sets the line-cap style. * * @param lineCap the line cap style as a String * @see #getLineCap() */ public final native void setLineCap(String lineCap) /*-{ this.lineCap = lineCap; }-*/; /** * Sets the line-join style. * * @param lineJoin the line join style as a {@link LineJoin} value * @see #getLineJoin() */ public final void setLineJoin(LineJoin lineJoin) { setLineJoin(lineJoin.getValue()); } /** * Sets the line-join style. * * @param lineJoin the ling join style as a String * @see #getLineJoin() */ public final native void setLineJoin(String lineJoin) /*-{ this.lineJoin = lineJoin; }-*/; /** * Sets the line-width. * * @param lineWidth the line width as a double * @see #getMiterLimit() * @see #getLineWidth() */ public final native void setLineWidth(double lineWidth) /*-{ this.lineWidth = lineWidth; }-*/; /** * Sets the miter-limit. * * @param miterLimit the miter limit as a double * @see #getMiterLimit() */ public final native void setMiterLimit(double miterLimit) /*-{ this.miterLimit = miterLimit; }-*/; /** * Sets the shadow-blur. * * @param shadowBlur the amount of blur as a double * @see #getShadowBlur() */ public final native void setShadowBlur(double shadowBlur) /*-{ this.shadowBlur = shadowBlur; }-*/; /** * Sets the shadow-color. * * @param shadowColor the shadow color as a String * @see #getShadowColor() */ public final native void setShadowColor(String shadowColor) /*-{ this.shadowColor = shadowColor; }-*/; /** * Sets the x-shadow-offset. * * @param shadowOffsetX the x shadow offset * @see #getShadowOffsetX() * @see #getShadowOffsetY() */ public final native void setShadowOffsetX(double shadowOffsetX) /*-{ this.shadowOffsetX = shadowOffsetX; }-*/; /** * Sets the y-shadow-offset. * * @param shadowOffsetY the y shadow offset * @see #getShadowOffsetX() * @see #getShadowOffsetY() */ public final native void setShadowOffsetY(double shadowOffsetY) /*-{ this.shadowOffsetY = shadowOffsetY; }-*/; /** * Sets the context's stroke style. * * @param strokeStyle the stroke style to set * @see #getStrokeStyle() * @see CssColor */ public final void setStrokeStyle(FillStrokeStyle strokeStyle) { if (GWT.isScript()) { setStrokeStyleWeb(strokeStyle); } else { setStrokeStyleDev(strokeStyle); } } /** * Convenience method to set the context's strokeStyle to a {@link CssColor}. * * @param strokeStyleColor the stroke color as a String * @see #getStrokeStyle() */ public final void setStrokeStyle(String strokeStyleColor) { setStrokeStyle(CssColor.make(strokeStyleColor)); } /** * Sets the text alignment. * * @param align the alignment setting as a String * @see #getTextAlign() */ public final native void setTextAlign(String align) /*-{ this.textAlign = align }-*/; /** * Sets the text alignment. * * @param align the alignment setting as a {@link TextAlign} value * @see #getTextAlign() */ public final void setTextAlign(TextAlign align) { setTextAlign(align.getValue()); } /** * Sets the text baseline. * * @param baseline the baseline setting as a String * @see #getTextBaseline() */ public final native void setTextBaseline(String baseline) /*-{ this.textBaseline = baseline }-*/; /** * Sets the text baseline. * * @param baseline a the baseline setting as a {@link TextBaseline} value * @see #getTextBaseline() */ public final void setTextBaseline(TextBaseline baseline) { setTextBaseline(baseline.getValue()); } /** * Sets the 2D transformation matrix. * * @param m11 the value at position (1, 1) of the matrix * @param m12 the value at position (1, 2) of the matrix * @param m21 the value at position (2, 1) of the matrix * @param m22 the value at position (2, 2) of the matrix * @param dx the x translation value * @param dy the y translation value */ public final native void setTransform(double m11, double m12, double m21, double m22, double dx, double dy) /*-{ this.setTransform(m11, m12, m21, m22, dx, dy); }-*/; /** * Draws the current path with the current stroke style. */ public final native void stroke() /*-{ this.stroke(); }-*/; /** * Draws the outline of a rectangle with the current stroke style. * * @param x the x coordinate of the rectangle's upper-left corner * @param y the y coordinate of the rectangle's upper-left corner * @param w the width of the rectangle * @param h the height of the rectangle */ public final native void strokeRect(double x, double y, double w, double h) /*-{ this.strokeRect(x, y, w, h); }-*/; /** * Draws the text outline. * * @param text the text as a String * @param x the x coordinate of the text position * @param y the y coordinate of the text position */ public final native void strokeText(String text, double x, double y) /*-{ this.strokeText(text, x, y); }-*/; /** * Draws the text outline, squeezing the text into the given max width by * compressing the font. * * @param text the text as a String * @param x the x coordinate of the text position * @param y the y coordinate of the text position * @param maxWidth the maximum width for the text */ public final native void strokeText(String text, double x, double y, double maxWidth) /*-{ this.strokeText(text, x, y, maxWidth); }-*/; /** * Multiplies the current transform by the given matrix. * * @param m11 the value at position (1, 1) of the matrix * @param m12 the value at position (1, 2) of the matrix * @param m21 the value at position (2, 1) of the matrix * @param m22 the value at position (2, 2) of the matrix * @param dx the x translation value * @param dy the y translation value */ public final native void transform(double m11, double m12, double m21, double m22, double dx, double dy) /*-{ this.transform(m11, m12, m21, m22, dx, dy); }-*/; /** * Applies a translation to the current transform. * * @param x the amount of translation along the x-axis * @param y the amount of translation along the y-axis */ public final native void translate(double x, double y) /*-{ this.translate(x, y); }-*/; /** * Returns the fill style when in dev mode. The JSO is wrapped in * an array before being returned. * * @return the fill style. * @see CssColor */ private native FillStrokeStyle getFillStyleDev() /*-{ if (typeof(this.fillStyle) == 'string') { // it's a color return [this.fillStyle]; } else { return this.fillStyle; } }-*/; /** * Returns the fill style when in Production Mode. * * @return the fill style */ private native FillStrokeStyle getFillStyleWeb() /*-{ return this.fillStyle; }-*/; /** * Returns the stroke style when in dev mode. The JSO is wrapped in * an array before being returned. * * @return the stroke style * @see CssColor */ private native FillStrokeStyle getStrokeStyleDev() /*-{ if (typeof(this.strokeStyle) == 'string') { // if it's a color return [this.strokeStyle]; } else { return this.strokeStyle; } }-*/; /** * Returns the stroke style when in Production Mode. * * @return the stroke style */ private native FillStrokeStyle getStrokeStyleWeb() /*-{ return this.strokeStyle; }-*/; /** * Sets the fill style when in dev mode. The incoming JSO is wrapped in * an array. * * @param fillStyle the fill style to set */ private native void setFillStyleDev(FillStrokeStyle fillStyle) /*-{ if (fillStyle[0] && typeof(fillStyle[0]) == 'string') { this.fillStyle = fillStyle[0]; } else { this.fillStyle = fillStyle; } }-*/; /** * Sets the fill style when in Production Mode. * * @param fillStyle the fill style to set */ private native void setFillStyleWeb(FillStrokeStyle fillStyle) /*-{ this.fillStyle = fillStyle; }-*/; /** * Sets the stroke style when in dev mode. The incoming JSO is wrapped in * an array. * * @param strokeStyle the stroke style to set */ private native void setStrokeStyleDev(FillStrokeStyle strokeStyle) /*-{ if (strokeStyle[0] && typeof(strokeStyle[0]) == 'string') { this.strokeStyle = strokeStyle[0]; } else { this.strokeStyle = strokeStyle; } }-*/; /** * Sets the stroke style when in Production Mode. * * @param strokeStyle the strokeStyle to set */ private native void setStrokeStyleWeb(FillStrokeStyle strokeStyle) /*-{ this.strokeStyle = strokeStyle; }-*/; }