blob: 0be7e00b958986e71434bb429400b695166ffe0b [file] [log] [blame]
/*
* 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;
}-*/;
}