Started extracting GraphicsContext interface from JavaQuery API. First extracting methods with primitive parameters and return type. canvas
authortoni.epple@eppleton.de
Fri, 17 May 2013 11:00:38 +0200
branchcanvas
changeset 1110ca05c9890031
parent 1109 b17053d0671d
child 1111 8c88d0f187d8
Started extracting GraphicsContext interface from JavaQuery API. First extracting methods with primitive parameters and return type.
javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/api/Canvas.java
javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/api/GraphicsContext.java
javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/api/HTML5GraphicsContext.java
     1.1 --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/api/Canvas.java	Fri May 17 11:00:23 2013 +0200
     1.2 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/api/Canvas.java	Fri May 17 11:00:38 2013 +0200
     1.3 @@ -54,8 +54,8 @@
     1.4              + "return e.getContext('2d');\n")
     1.5      private native static Object getContextImpl(Canvas el);
     1.6  
     1.7 -    public GraphicsContext getContext() {
     1.8 -        return new GraphicsContext(getContextImpl(this));
     1.9 +    public HTML5GraphicsContext getContext() {
    1.10 +        return new HTML5GraphicsContext(getContextImpl(this));
    1.11      }
    1.12  
    1.13      @Override
     2.1 --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/api/GraphicsContext.java	Fri May 17 11:00:23 2013 +0200
     2.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.3 @@ -1,335 +0,0 @@
     2.4 -/**
     2.5 - * Back 2 Browser Bytecode Translator
     2.6 - * Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
     2.7 - *
     2.8 - * This program is free software: you can redistribute it and/or modify
     2.9 - * it under the terms of the GNU General Public License as published by
    2.10 - * the Free Software Foundation, version 2 of the License.
    2.11 - *
    2.12 - * This program is distributed in the hope that it will be useful,
    2.13 - * but WITHOUT ANY WARRANTY; without even the implied warranty of
    2.14 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    2.15 - * GNU General Public License for more details.
    2.16 - *
    2.17 - * You should have received a copy of the GNU General Public License
    2.18 - * along with this program. Look for COPYING file in the top folder.
    2.19 - * If not, see http://opensource.org/licenses/GPL-2.0.
    2.20 - */
    2.21 -package org.apidesign.bck2brwsr.htmlpage.api;
    2.22 -
    2.23 -import org.apidesign.bck2brwsr.core.JavaScriptBody;
    2.24 -
    2.25 -/**
    2.26 - *
    2.27 - * @author Anton Epple <toni.epple@eppleton.de>
    2.28 - */
    2.29 -public class GraphicsContext {
    2.30 -
    2.31 -    Object context;
    2.32 -
    2.33 -    GraphicsContext(Object contextImpl) {
    2.34 -        this.context = contextImpl;
    2.35 -    }
    2.36 -
    2.37 -    @JavaScriptBody(args = {"centerx", "centery", "radius", "startangle", "endangle", "ccw"},
    2.38 -            body = "this._context().arc(centerx,centery, radius, startangle, endangle,ccw);")
    2.39 -    public native void arc(double centerX,
    2.40 -            double centerY,
    2.41 -            double startAngle,
    2.42 -            double radius,
    2.43 -            double endAngle,
    2.44 -            boolean ccw);
    2.45 -
    2.46 -    @JavaScriptBody(args = {"x1", "y1", "x2", "y2", "r"},
    2.47 -            body = "this._context().arcTo(x1,y1,x2,y2,r);")
    2.48 -    public native void arcTo(double x1,
    2.49 -            double y1,
    2.50 -            double x2,
    2.51 -            double y2,
    2.52 -            double r);
    2.53 -
    2.54 -    @JavaScriptBody(args = {"x", "y"},
    2.55 -            body = "return this._context().isPointInPath(x,y);")
    2.56 -    public native boolean isPointInPath(double x, double y);
    2.57 -
    2.58 -    @JavaScriptBody(args = {}, body = "this._context().fill();")
    2.59 -    public native void fill();
    2.60 -
    2.61 -    @JavaScriptBody(args = {}, body = "this._context().stroke();")
    2.62 -    public native void stroke();
    2.63 -
    2.64 -    @JavaScriptBody(args = {}, body = "this._context().beginPath();")
    2.65 -    public native void beginPath();
    2.66 -
    2.67 -    @JavaScriptBody(args = {}, body = "this._context().closePath();")
    2.68 -    public native void closePath();
    2.69 -
    2.70 -    @JavaScriptBody(args = {}, body = "this._context().clip();")
    2.71 -    public native void clip();
    2.72 -
    2.73 -    @JavaScriptBody(args = {"x", "y"}, body = "this._context().moveTo(x,y);")
    2.74 -    public native void moveTo(double x, double y);
    2.75 -
    2.76 -    @JavaScriptBody(args = {"x", "y"}, body = "this._context().lineTo(x,y);")
    2.77 -    public native void lineTo(double x, double y);
    2.78 -
    2.79 -    @JavaScriptBody(args = {"cpx", "cpy", "x", "y"}, body = "this._context().quadraticCurveTo(cpx,cpy,x,y);")
    2.80 -    public native void quadraticCurveTo(double cpx, double cpy, double x, double y);
    2.81 -
    2.82 -    @JavaScriptBody(args = {"cp1x", "cp1y", "cp2x", "cp2y", "x", "y"},
    2.83 -            body = "this._context().bezierCurveTo(cp1x,cp1y,cp2x,cp2y,x,y);")
    2.84 -    public native void bezierCurveTo(double cp1x, double cp1y, double cp2x, double cp2y, double x, double y);
    2.85 -
    2.86 -    @JavaScriptBody(args = {"x", "y", "width", "height"}, body = "this._context().fillRect(x,y,width,height);")
    2.87 -    public native void fillRect(double x, double y, double width, double height);
    2.88 -
    2.89 -    @JavaScriptBody(args = {"x", "y", "width", "height"}, body = "this._context().strokeRect(x,y,width,height);")
    2.90 -    public native void strokeRect(double x, double y, double width, double height);
    2.91 -
    2.92 -    @JavaScriptBody(args = {"x", "y", "width", "height"}, body = "this._context().clearRect(x,y,width,height);")
    2.93 -    public native void clearRect(double x, double y, double width, double height);
    2.94 -
    2.95 -    @JavaScriptBody(args = {"x", "y", "width", "height"}, body = "this._context().rectect(x,y,width,height);")
    2.96 -    public native void rect(double x, double y, double width, double height);
    2.97 -
    2.98 -    @JavaScriptBody(args = {}, body = "this._context().save();")
    2.99 -    public native void save();
   2.100 -
   2.101 -    @JavaScriptBody(args = {}, body = "this._context().restore();")
   2.102 -    public native void restore();
   2.103 -
   2.104 -    @JavaScriptBody(args = {"angle"}, body = "this._context().rotate(angle);")
   2.105 -    public native void rotate(double angle);
   2.106 -
   2.107 -    @JavaScriptBody(args = {"a", "b", "c", "d", "e", "f"}, body = "this._context().transform(a,b,c,d,e,f);")
   2.108 -    public native void transform(double a, double b, double c, double d, double e, double f);
   2.109 -
   2.110 -    @JavaScriptBody(args = {"a", "b", "c", "d", "e", "f"}, body = "this._context().setTransform(a,b,c,d,e,f);")
   2.111 -    public native void setTransform(double a, double b, double c, double d, double e, double f);
   2.112 -
   2.113 -    @JavaScriptBody(args = {"x", "y"}, body = "this._context().translate(x,y);")
   2.114 -    public native void translate(double x, double y);
   2.115 -
   2.116 -    @JavaScriptBody(args = {"x", "y"}, body = "this._context().scale(x,y);")
   2.117 -    public native void scale(double x, double y);
   2.118 -
   2.119 -    public void drawImage(Image image, double x, double y) {
   2.120 -        drawImageImpl(context, Element.getElementById(image), x, y);
   2.121 -    }
   2.122 -
   2.123 -    public void drawImage(Image image, double x, double y, double width, double height) {
   2.124 -        drawImageImpl(context, Element.getElementById(image), x, y, width, height);
   2.125 -    }
   2.126 -
   2.127 -    public void drawImage(Image image, double sx, double sy, double sWidth, double sHeight, double x, double y, double width, double height) {
   2.128 -        drawImageImpl(context, Element.getElementById(image), sx, sy, sWidth, sHeight, x, y, width, height);
   2.129 -    }
   2.130 -
   2.131 -    @JavaScriptBody(args = {"ctx", "img", "x", "y", "width", "height"}, body = "ctx.drawImage(img,x,y,width,height);")
   2.132 -    private native static void drawImageImpl(Object ctx, Object img, double x, double y, double width, double height);
   2.133 -
   2.134 -    @JavaScriptBody(args = {"ctx", "img", "sx", "sy", "swidth", "sheight", "x", "y", "width", "height"}, body = "ctx.drawImage(img,sx,sy,swidth,sheight,x,y,width,height);")
   2.135 -    private native static void drawImageImpl(Object ctx, Object img, double sx, double sy, double sWidth, double sHeight, double x, double y, double width, double height);
   2.136 -
   2.137 -    @JavaScriptBody(args = {"ctx", "img", "x", "y"}, body = "ctx.drawImage(img,x,y);")
   2.138 -    private native static void drawImageImpl(Object ctx, Object img, double x, double y);
   2.139 -
   2.140 -    @JavaScriptBody(args = {"style"}, body = "this._context().fillStyle=style.valueOf();")
   2.141 -    public native void setFillStyle(String style);
   2.142 -
   2.143 -    @JavaScriptBody(args = {}, body = "return this._context().fillStyle;")
   2.144 -    public native String getFillStyle();
   2.145 -
   2.146 -    public void setFillStyle(LinearGradient style) {
   2.147 -        setFillStyleImpl(context, style.object());
   2.148 -    }
   2.149 -
   2.150 -    public void setFillStyle(RadialGradient style) {
   2.151 -        setFillStyleImpl(context, style.object());
   2.152 -    }
   2.153 -
   2.154 -    public void setFillStyle(Pattern style) {
   2.155 -        setFillStyleImpl(context, style.object());
   2.156 -    }
   2.157 -
   2.158 -    @JavaScriptBody(args = {"context","obj"}, body = "context.fillStyle=obj;")
   2.159 -    private native void setFillStyleImpl(Object context, Object obj);
   2.160 -
   2.161 -    @JavaScriptBody(args = {"style"}, body = "this._context().strokeStyle=style.valueOf();")
   2.162 -    public native void setStrokeStyle(String style);
   2.163 -
   2.164 -    public void setStrokeStyle(LinearGradient style) {
   2.165 -        setStrokeStyleImpl(context, style.object());
   2.166 -    }
   2.167 -
   2.168 -    public void setStrokeStyle(RadialGradient style) {
   2.169 -        setStrokeStyleImpl(context, style.object());
   2.170 -    }
   2.171 -
   2.172 -    @JavaScriptBody(args = {"style"}, body = "this._context().fillStyle=style;")
   2.173 -    public void setStrokeStyle(Pattern style) {
   2.174 -        setStrokeStyleImpl(context, style.object());
   2.175 -    }
   2.176 -
   2.177 -    @JavaScriptBody(args = {"context","obj"}, body = "context.strokeStyle=obj;")
   2.178 -    private native void setStrokeStyleImpl(Object context, Object obj);
   2.179 -
   2.180 -    @JavaScriptBody(args = {"color"}, body = "this._context().shadowColor=color.valueOf();")
   2.181 -    public native void setShadowColor(String color);
   2.182 -
   2.183 -    @JavaScriptBody(args = {"blur"}, body = "this._context().shadowBlur=blur;")
   2.184 -    public native void setShadowBlur(double blur);
   2.185 -    
   2.186 -    @JavaScriptBody(args = {"x"}, body = "this._context().shadowOffsetX=x;")
   2.187 -    public native void setShadowOffsetX(double x);
   2.188 -
   2.189 -    @JavaScriptBody(args = {"y"}, body = "this._context().shadowOffsetY=y;")
   2.190 -    public native void setShadowOffsetY(double y);
   2.191 -
   2.192 -    @JavaScriptBody(args = {}, body = "return this._context().strokeStyle;")
   2.193 -    public native String getStrokeStyle();
   2.194 -
   2.195 -    @JavaScriptBody(args = {}, body = "return this._context().shadowColor;")
   2.196 -    public native String getShadowColor();
   2.197 -
   2.198 -    @JavaScriptBody(args = {}, body = "return this._context().shadowBlur;")
   2.199 -    public native double getShadowBlur();
   2.200 -
   2.201 -    @JavaScriptBody(args = {}, body = "return this._context().shadowOffsetX;")
   2.202 -    public native double getShadowOffsetX();
   2.203 -
   2.204 -    @JavaScriptBody(args = {}, body = "return this._context().shadowOffsetY;")
   2.205 -    public native double getShadowOffsetY();
   2.206 -
   2.207 -    @JavaScriptBody(args = {}, body = "return this._context().lineCap;")
   2.208 -    public native String getLineCap();
   2.209 -
   2.210 -    @JavaScriptBody(args = {"style"}, body = "this._context().lineCap=style.valueOf();")
   2.211 -    public native void setLineCap(String style);
   2.212 -
   2.213 -    @JavaScriptBody(args = {}, body = "return this._context().lineJoin;")
   2.214 -    public native String getLineJoin();
   2.215 -
   2.216 -    @JavaScriptBody(args = {"style"}, body = "this._context().lineJoin=style.valueOf();")
   2.217 -    public native void setLineJoin(String style) ;
   2.218 -
   2.219 -    @JavaScriptBody(args = {}, body = "return this._context().lineWidth;")
   2.220 -    public native double getLineWidth();
   2.221 -
   2.222 -    @JavaScriptBody(args = {"width"}, body = "this._context().lineWidth=width;")
   2.223 -    public native void setLineWidth(double width);
   2.224 -
   2.225 -    @JavaScriptBody(args = {}, body = "return this._context().miterLimit;")
   2.226 -    public native double getMiterLimit();
   2.227 -
   2.228 -    @JavaScriptBody(args = {"limit"}, body = "this._context().miterLimit=limit;")
   2.229 -    public native void setMiterLimit(double limit);
   2.230 -
   2.231 -    @JavaScriptBody(args = {}, body = "return this._context().font;")
   2.232 -    public native String getFont();
   2.233 -
   2.234 -    @JavaScriptBody(args = {"font"}, body = "this._context().font=font.valueOf();")
   2.235 -    public native void setFont(String font);
   2.236 -
   2.237 -    @JavaScriptBody(args = {}, body = "return this._context().textAlign;")
   2.238 -    public native String getTextAlign();
   2.239 -
   2.240 -    @JavaScriptBody(args = {"textalign"}, body = "this._context().textAlign=textalign.valueOf();")
   2.241 -    public native void setTextAlign(String textAlign);
   2.242 -
   2.243 -    @JavaScriptBody(args = {}, body = "return this._context().textBaseline;")
   2.244 -    public native String getTextBaseline();
   2.245 -
   2.246 -    @JavaScriptBody(args = {"textbaseline"}, body = "this._context().textBaseline=textbaseline.valueOf();")
   2.247 -    public native void setTextBaseline(String textbaseline);
   2.248 -
   2.249 -    @JavaScriptBody(args = {"text", "x", "y"}, body = "this._context().fillText(text,x,y);")
   2.250 -    public native void fillText(String text, double x, double y);
   2.251 -
   2.252 -    @JavaScriptBody(args = {"text", "x", "y", "maxwidth"}, body = "this._context().fillText(text,x,y,maxwidth);")
   2.253 -    public void fillText(String text, double x, double y, double maxWidth) {
   2.254 -    }
   2.255 -
   2.256 -    public TextMetrics measureText(String text) {
   2.257 -        return new TextMetrics(measureTextImpl(text));
   2.258 -    }
   2.259 -
   2.260 -    @JavaScriptBody(args = {"text"},
   2.261 -            body = "return this._context().measureText(text);")
   2.262 -    private native Object measureTextImpl(String text);
   2.263 -
   2.264 -    @JavaScriptBody(args = {"text", "x", "y"}, body = "this._context().strokeText(text,x,y);")
   2.265 -    public native void strokeText(String text, double x, double y);
   2.266 -
   2.267 -    @JavaScriptBody(args = {"text", "x", "y", "maxWidth"}, body = "this._context().strokeText(text,x,y,maxWidth);")
   2.268 -    public native void strokeText(String text, double x, double y, double maxWidth) ;
   2.269 -
   2.270 -    public ImageData createImageData(double x, double y) {
   2.271 -        return new ImageData(createImageDataImpl(x, y));
   2.272 -    }
   2.273 -
   2.274 -    @JavaScriptBody(args = {"x", "y"},
   2.275 -            body = "return this._context().createImageData(x,y);")
   2.276 -    private native Object createImageDataImpl(double x, double y);
   2.277 -
   2.278 -    public ImageData createImageData(ImageData imageData) {
   2.279 -        return new ImageData(createImageDataImpl(imageData.getWidth(), imageData.getHeight()));
   2.280 -    }
   2.281 -
   2.282 -    public ImageData getImageData(double x, double y, double width, double height) {
   2.283 -        return new ImageData(getImageDataImpl(x, y, width, height));
   2.284 -    }
   2.285 -
   2.286 -    @JavaScriptBody(args = {"x", "y", "width", "height"},
   2.287 -            body = "return this._context().getImageData(x,y,width,height);")
   2.288 -    private native Object getImageDataImpl(double x, double y, double width, double height);
   2.289 -
   2.290 -    public void putImageData(ImageData imageData, double x, double y) {
   2.291 -        putImageDataImpl(imageData.object(), x, y);
   2.292 -    }
   2.293 -
   2.294 -    @JavaScriptBody(args = {"imageData", "x", "y"},
   2.295 -            body = "this._context().putImageData(imageData,x,y);")
   2.296 -    private native void putImageDataImpl(Object imageData, double x, double y);
   2.297 -
   2.298 -    public void putImageData(ImageData imageData, double x, double y, double dirtyx, double dirtyy, double dirtywidth, double dirtyheight) {
   2.299 -        putImageDataImpl(imageData.object(), x, y, dirtyx, dirtyy, dirtywidth, dirtyheight);
   2.300 -    }
   2.301 -
   2.302 -    @JavaScriptBody(args = {"imageData", "x", "y", "dirtyx", "dirtyy", "dirtywidth", "dirtyheight"},
   2.303 -            body = "this._context().putImageData(imageData,x,y, dirtyx, dirtyy, dirtywidth,dirtyheight);")
   2.304 -    private native void putImageDataImpl(Object imageData, double x, double y, double dirtyx, double dirtyy, double dirtywidth, double dirtyheight);
   2.305 -
   2.306 -    @JavaScriptBody(args = {"alpha"}, body = "this._context().globalAlpha=alpha;")
   2.307 -    public native void setGlobalAlpha(double alpha) ;
   2.308 -
   2.309 -    @JavaScriptBody(args = {}, body = "return this._context().globalAlpha;")
   2.310 -    public native double getGlobalAlpha();
   2.311 -
   2.312 -    @JavaScriptBody(args = {"operation"}, body = "this._context().globalCompositeOperation=operation.valueOf();")
   2.313 -    public native void setGlobalCompositeOperation(String operation);
   2.314 -
   2.315 -    @JavaScriptBody(args = {}, body = "return this._context().globalCompositeOperation;")
   2.316 -    public native String getGlobalCompositeOperation();
   2.317 -
   2.318 -    public LinearGradient createLinearGradient(double x0, double y0, double x1, double y1) {
   2.319 -        return new LinearGradient(createLinearGradientImpl(context, x0, y0, x1, y1));
   2.320 -    }
   2.321 -
   2.322 -    @JavaScriptBody(args = {"context", "x0", "y0", "x1", "y1"}, body = "return context.createLinearGradient(x0,y0,x1,y1);")
   2.323 -    private  native Object createLinearGradientImpl(Object context, double x0, double y0, double x1, double y1);
   2.324 -
   2.325 -    public Pattern createPattern(Image image, String repeat) {
   2.326 -        return new Pattern(createPatternImpl(context, image, repeat));
   2.327 -    }
   2.328 -
   2.329 -    @JavaScriptBody(args = {"context", "image", "repeat"}, body = "return context.createPattern(image, repeat);")
   2.330 -    private static native Object createPatternImpl(Object context, Image image, String repeat);
   2.331 -
   2.332 -    public RadialGradient createRadialGradient(double x0, double y0, double r0, double x1, double y1, double r1) {
   2.333 -        return new RadialGradient(createRadialGradientImpl(context, x0, y0, r0, x1, y1, r1));
   2.334 -    }
   2.335 -
   2.336 -    @JavaScriptBody(args = {"context", "x0", "y0", "r0", "x1", "y1", "r1"}, body = "return context.createRadialGradient(x0,y0,r0,x1,y1,r1);")
   2.337 -    private static native Object createRadialGradientImpl(Object context, double x0, double y0, double r0, double x1, double y1, double r1);
   2.338 -}
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/api/HTML5GraphicsContext.java	Fri May 17 11:00:38 2013 +0200
     3.3 @@ -0,0 +1,393 @@
     3.4 +/**
     3.5 + * Back 2 Browser Bytecode Translator
     3.6 + * Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
     3.7 + *
     3.8 + * This program is free software: you can redistribute it and/or modify
     3.9 + * it under the terms of the GNU General Public License as published by
    3.10 + * the Free Software Foundation, version 2 of the License.
    3.11 + *
    3.12 + * This program is distributed in the hope that it will be useful,
    3.13 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
    3.14 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    3.15 + * GNU General Public License for more details.
    3.16 + *
    3.17 + * You should have received a copy of the GNU General Public License
    3.18 + * along with this program. Look for COPYING file in the top folder.
    3.19 + * If not, see http://opensource.org/licenses/GPL-2.0.
    3.20 + */
    3.21 +package org.apidesign.bck2brwsr.htmlpage.api;
    3.22 +
    3.23 +import net.java.html.canvas.GraphicsContext;
    3.24 +import org.apidesign.bck2brwsr.core.JavaScriptBody;
    3.25 +
    3.26 +/**
    3.27 + *
    3.28 + * @author Anton Epple <toni.epple@eppleton.de>
    3.29 + */
    3.30 +public class HTML5GraphicsContext implements GraphicsContext {
    3.31 +
    3.32 +    Object context;
    3.33 +
    3.34 +    HTML5GraphicsContext(Object contextImpl) {
    3.35 +        this.context = contextImpl;
    3.36 +    }
    3.37 +
    3.38 +    @JavaScriptBody(args = {"centerx", "centery", "radius", "startangle", "endangle", "ccw"},
    3.39 +            body = "this._context().arc(centerx,centery, radius, startangle, endangle,ccw);")
    3.40 +    @Override
    3.41 +    public native void arc(double centerX,
    3.42 +            double centerY,
    3.43 +            double startAngle,
    3.44 +            double radius,
    3.45 +            double endAngle,
    3.46 +            boolean ccw);
    3.47 +
    3.48 +    @JavaScriptBody(args = {"x1", "y1", "x2", "y2", "r"},
    3.49 +            body = "this._context().arcTo(x1,y1,x2,y2,r);")
    3.50 +    @Override
    3.51 +    public native void arcTo(double x1,
    3.52 +            double y1,
    3.53 +            double x2,
    3.54 +            double y2,
    3.55 +            double r);
    3.56 +
    3.57 +    @JavaScriptBody(args = {"x", "y"},
    3.58 +            body = "return this._context().isPointInPath(x,y);")
    3.59 +    @Override
    3.60 +    public native boolean isPointInPath(double x, double y);
    3.61 +
    3.62 +    @JavaScriptBody(args = {}, body = "this._context().fill();")
    3.63 +    @Override
    3.64 +    public native void fill();
    3.65 +
    3.66 +    @JavaScriptBody(args = {}, body = "this._context().stroke();")
    3.67 +    @Override
    3.68 +    public native void stroke();
    3.69 +
    3.70 +    @JavaScriptBody(args = {}, body = "this._context().beginPath();")
    3.71 +    @Override
    3.72 +    public native void beginPath();
    3.73 +
    3.74 +    @JavaScriptBody(args = {}, body = "this._context().closePath();")
    3.75 +    @Override
    3.76 +    public native void closePath();
    3.77 +
    3.78 +    @JavaScriptBody(args = {}, body = "this._context().clip();")
    3.79 +    @Override
    3.80 +    public native void clip();
    3.81 +
    3.82 +    @JavaScriptBody(args = {"x", "y"}, body = "this._context().moveTo(x,y);")
    3.83 +    @Override
    3.84 +    public native void moveTo(double x, double y);
    3.85 +
    3.86 +    @JavaScriptBody(args = {"x", "y"}, body = "this._context().lineTo(x,y);")
    3.87 +    @Override
    3.88 +    public native void lineTo(double x, double y);
    3.89 +
    3.90 +    @JavaScriptBody(args = {"cpx", "cpy", "x", "y"}, body = "this._context().quadraticCurveTo(cpx,cpy,x,y);")
    3.91 +    @Override
    3.92 +    public native void quadraticCurveTo(double cpx, double cpy, double x, double y);
    3.93 +
    3.94 +    @JavaScriptBody(args = {"cp1x", "cp1y", "cp2x", "cp2y", "x", "y"},
    3.95 +            body = "this._context().bezierCurveTo(cp1x,cp1y,cp2x,cp2y,x,y);")
    3.96 +    @Override
    3.97 +    public native void bezierCurveTo(double cp1x, double cp1y, double cp2x, double cp2y, double x, double y);
    3.98 +
    3.99 +    @JavaScriptBody(args = {"x", "y", "width", "height"}, body = "this._context().fillRect(x,y,width,height);")
   3.100 +    @Override
   3.101 +    public native void fillRect(double x, double y, double width, double height);
   3.102 +
   3.103 +    @JavaScriptBody(args = {"x", "y", "width", "height"}, body = "this._context().strokeRect(x,y,width,height);")
   3.104 +    @Override
   3.105 +    public native void strokeRect(double x, double y, double width, double height);
   3.106 +
   3.107 +    @JavaScriptBody(args = {"x", "y", "width", "height"}, body = "this._context().clearRect(x,y,width,height);")
   3.108 +    @Override
   3.109 +    public native void clearRect(double x, double y, double width, double height);
   3.110 +
   3.111 +    @JavaScriptBody(args = {"x", "y", "width", "height"}, body = "this._context().rectect(x,y,width,height);")
   3.112 +    @Override
   3.113 +    public native void rect(double x, double y, double width, double height);
   3.114 +
   3.115 +    @JavaScriptBody(args = {}, body = "this._context().save();")
   3.116 +    @Override
   3.117 +    public native void save();
   3.118 +
   3.119 +    @JavaScriptBody(args = {}, body = "this._context().restore();")
   3.120 +    @Override
   3.121 +    public native void restore();
   3.122 +
   3.123 +    @JavaScriptBody(args = {"angle"}, body = "this._context().rotate(angle);")
   3.124 +    @Override
   3.125 +    public native void rotate(double angle);
   3.126 +
   3.127 +    @JavaScriptBody(args = {"a", "b", "c", "d", "e", "f"}, body = "this._context().transform(a,b,c,d,e,f);")
   3.128 +    @Override
   3.129 +    public native void transform(double a, double b, double c, double d, double e, double f);
   3.130 +
   3.131 +    @JavaScriptBody(args = {"a", "b", "c", "d", "e", "f"}, body = "this._context().setTransform(a,b,c,d,e,f);")
   3.132 +    @Override
   3.133 +    public native void setTransform(double a, double b, double c, double d, double e, double f);
   3.134 +
   3.135 +    @JavaScriptBody(args = {"x", "y"}, body = "this._context().translate(x,y);")
   3.136 +    @Override
   3.137 +    public native void translate(double x, double y);
   3.138 +
   3.139 +    @JavaScriptBody(args = {"x", "y"}, body = "this._context().scale(x,y);")
   3.140 +    @Override
   3.141 +    public native void scale(double x, double y);
   3.142 +
   3.143 +    public void drawImage(Image image, double x, double y) {
   3.144 +        drawImageImpl(context, Element.getElementById(image), x, y);
   3.145 +    }
   3.146 +
   3.147 +    public void drawImage(Image image, double x, double y, double width, double height) {
   3.148 +        drawImageImpl(context, Element.getElementById(image), x, y, width, height);
   3.149 +    }
   3.150 +
   3.151 +    public void drawImage(Image image, double sx, double sy, double sWidth, double sHeight, double x, double y, double width, double height) {
   3.152 +        drawImageImpl(context, Element.getElementById(image), sx, sy, sWidth, sHeight, x, y, width, height);
   3.153 +    }
   3.154 +
   3.155 +    @JavaScriptBody(args = {"ctx", "img", "x", "y", "width", "height"}, body = "ctx.drawImage(img,x,y,width,height);")
   3.156 +    private native static void drawImageImpl(Object ctx, Object img, double x, double y, double width, double height);
   3.157 +
   3.158 +    @JavaScriptBody(args = {"ctx", "img", "sx", "sy", "swidth", "sheight", "x", "y", "width", "height"}, body = "ctx.drawImage(img,sx,sy,swidth,sheight,x,y,width,height);")
   3.159 +    private native static void drawImageImpl(Object ctx, Object img, double sx, double sy, double sWidth, double sHeight, double x, double y, double width, double height);
   3.160 +
   3.161 +    @JavaScriptBody(args = {"ctx", "img", "x", "y"}, body = "ctx.drawImage(img,x,y);")
   3.162 +    private native static void drawImageImpl(Object ctx, Object img, double x, double y);
   3.163 +
   3.164 +    @JavaScriptBody(args = {"style"}, body = "this._context().fillStyle=style.valueOf();")
   3.165 +    @Override
   3.166 +    public native void setFillStyle(String style);
   3.167 +
   3.168 +    @JavaScriptBody(args = {}, body = "return this._context().fillStyle;")
   3.169 +    @Override
   3.170 +    public native String getFillStyle();
   3.171 +
   3.172 +    public void setFillStyle(LinearGradient style) {
   3.173 +        setFillStyleImpl(context, style.object());
   3.174 +    }
   3.175 +
   3.176 +    public void setFillStyle(RadialGradient style) {
   3.177 +        setFillStyleImpl(context, style.object());
   3.178 +    }
   3.179 +
   3.180 +    public void setFillStyle(Pattern style) {
   3.181 +        setFillStyleImpl(context, style.object());
   3.182 +    }
   3.183 +
   3.184 +    @JavaScriptBody(args = {"context","obj"}, body = "context.fillStyle=obj;")
   3.185 +    private native void setFillStyleImpl(Object context, Object obj);
   3.186 +
   3.187 +    @JavaScriptBody(args = {"style"}, body = "this._context().strokeStyle=style.valueOf();")
   3.188 +    @Override
   3.189 +    public native void setStrokeStyle(String style);
   3.190 +
   3.191 +    public void setStrokeStyle(LinearGradient style) {
   3.192 +        setStrokeStyleImpl(context, style.object());
   3.193 +    }
   3.194 +
   3.195 +    public void setStrokeStyle(RadialGradient style) {
   3.196 +        setStrokeStyleImpl(context, style.object());
   3.197 +    }
   3.198 +
   3.199 +    @JavaScriptBody(args = {"style"}, body = "this._context().fillStyle=style;")
   3.200 +    public void setStrokeStyle(Pattern style) {
   3.201 +        setStrokeStyleImpl(context, style.object());
   3.202 +    }
   3.203 +
   3.204 +    @JavaScriptBody(args = {"context","obj"}, body = "context.strokeStyle=obj;")
   3.205 +    private native void setStrokeStyleImpl(Object context, Object obj);
   3.206 +
   3.207 +    @JavaScriptBody(args = {"color"}, body = "this._context().shadowColor=color.valueOf();")
   3.208 +    @Override
   3.209 +    public native void setShadowColor(String color);
   3.210 +
   3.211 +    @JavaScriptBody(args = {"blur"}, body = "this._context().shadowBlur=blur;")
   3.212 +    @Override
   3.213 +    public native void setShadowBlur(double blur);
   3.214 +    
   3.215 +    @JavaScriptBody(args = {"x"}, body = "this._context().shadowOffsetX=x;")
   3.216 +    @Override
   3.217 +    public native void setShadowOffsetX(double x);
   3.218 +
   3.219 +    @JavaScriptBody(args = {"y"}, body = "this._context().shadowOffsetY=y;")
   3.220 +    @Override
   3.221 +    public native void setShadowOffsetY(double y);
   3.222 +
   3.223 +    @JavaScriptBody(args = {}, body = "return this._context().strokeStyle;")
   3.224 +    @Override
   3.225 +    public native String getStrokeStyle();
   3.226 +
   3.227 +    @JavaScriptBody(args = {}, body = "return this._context().shadowColor;")
   3.228 +    @Override
   3.229 +    public native String getShadowColor();
   3.230 +
   3.231 +    @JavaScriptBody(args = {}, body = "return this._context().shadowBlur;")
   3.232 +    @Override
   3.233 +    public native double getShadowBlur();
   3.234 +
   3.235 +    @JavaScriptBody(args = {}, body = "return this._context().shadowOffsetX;")
   3.236 +    @Override
   3.237 +    public native double getShadowOffsetX();
   3.238 +
   3.239 +    @JavaScriptBody(args = {}, body = "return this._context().shadowOffsetY;")
   3.240 +    @Override
   3.241 +    public native double getShadowOffsetY();
   3.242 +
   3.243 +    @JavaScriptBody(args = {}, body = "return this._context().lineCap;")
   3.244 +    @Override
   3.245 +    public native String getLineCap();
   3.246 +
   3.247 +    @JavaScriptBody(args = {"style"}, body = "this._context().lineCap=style.valueOf();")
   3.248 +    @Override
   3.249 +    public native void setLineCap(String style);
   3.250 +
   3.251 +    @JavaScriptBody(args = {}, body = "return this._context().lineJoin;")
   3.252 +    @Override
   3.253 +    public native String getLineJoin();
   3.254 +
   3.255 +    @JavaScriptBody(args = {"style"}, body = "this._context().lineJoin=style.valueOf();")
   3.256 +    @Override
   3.257 +    public native void setLineJoin(String style);
   3.258 +
   3.259 +    @JavaScriptBody(args = {}, body = "return this._context().lineWidth;")
   3.260 +    @Override
   3.261 +    public native double getLineWidth();
   3.262 +
   3.263 +    @JavaScriptBody(args = {"width"}, body = "this._context().lineWidth=width;")
   3.264 +    @Override
   3.265 +    public native void setLineWidth(double width);
   3.266 +
   3.267 +    @JavaScriptBody(args = {}, body = "return this._context().miterLimit;")
   3.268 +    @Override
   3.269 +    public native double getMiterLimit();
   3.270 +
   3.271 +    @JavaScriptBody(args = {"limit"}, body = "this._context().miterLimit=limit;")
   3.272 +    @Override
   3.273 +    public native void setMiterLimit(double limit);
   3.274 +
   3.275 +    @JavaScriptBody(args = {}, body = "return this._context().font;")
   3.276 +    @Override
   3.277 +    public native String getFont();
   3.278 +
   3.279 +    @JavaScriptBody(args = {"font"}, body = "this._context().font=font.valueOf();")
   3.280 +    @Override
   3.281 +    public native void setFont(String font);
   3.282 +
   3.283 +    @JavaScriptBody(args = {}, body = "return this._context().textAlign;")
   3.284 +    @Override
   3.285 +    public native String getTextAlign();
   3.286 +
   3.287 +    @JavaScriptBody(args = {"textalign"}, body = "this._context().textAlign=textalign.valueOf();")
   3.288 +    @Override
   3.289 +    public native void setTextAlign(String textAlign);
   3.290 +
   3.291 +    @JavaScriptBody(args = {}, body = "return this._context().textBaseline;")
   3.292 +    @Override
   3.293 +    public native String getTextBaseline();
   3.294 +
   3.295 +    @JavaScriptBody(args = {"textbaseline"}, body = "this._context().textBaseline=textbaseline.valueOf();")
   3.296 +    @Override
   3.297 +    public native void setTextBaseline(String textbaseline);
   3.298 +
   3.299 +    @JavaScriptBody(args = {"text", "x", "y"}, body = "this._context().fillText(text,x,y);")
   3.300 +    @Override
   3.301 +    public native void fillText(String text, double x, double y);
   3.302 +
   3.303 +    @JavaScriptBody(args = {"text", "x", "y", "maxwidth"}, body = "this._context().fillText(text,x,y,maxwidth);")
   3.304 +    @Override
   3.305 +    public void fillText(String text, double x, double y, double maxWidth) {
   3.306 +    }
   3.307 +
   3.308 +    public TextMetrics measureText(String text) {
   3.309 +        return new TextMetrics(measureTextImpl(text));
   3.310 +    }
   3.311 +
   3.312 +    @JavaScriptBody(args = {"text"},
   3.313 +            body = "return this._context().measureText(text);")
   3.314 +    private native Object measureTextImpl(String text);
   3.315 +
   3.316 +    @JavaScriptBody(args = {"text", "x", "y"}, body = "this._context().strokeText(text,x,y);")
   3.317 +    @Override
   3.318 +    public native void strokeText(String text, double x, double y);
   3.319 +
   3.320 +    @JavaScriptBody(args = {"text", "x", "y", "maxWidth"}, body = "this._context().strokeText(text,x,y,maxWidth);")
   3.321 +    @Override
   3.322 +    public native void strokeText(String text, double x, double y, double maxWidth);
   3.323 +
   3.324 +    public ImageData createImageData(double x, double y) {
   3.325 +        return new ImageData(createImageDataImpl(x, y));
   3.326 +    }
   3.327 +
   3.328 +    @JavaScriptBody(args = {"x", "y"},
   3.329 +            body = "return this._context().createImageData(x,y);")
   3.330 +    private native Object createImageDataImpl(double x, double y);
   3.331 +
   3.332 +    public ImageData createImageData(ImageData imageData) {
   3.333 +        return new ImageData(createImageDataImpl(imageData.getWidth(), imageData.getHeight()));
   3.334 +    }
   3.335 +
   3.336 +    public ImageData getImageData(double x, double y, double width, double height) {
   3.337 +        return new ImageData(getImageDataImpl(x, y, width, height));
   3.338 +    }
   3.339 +
   3.340 +    @JavaScriptBody(args = {"x", "y", "width", "height"},
   3.341 +            body = "return this._context().getImageData(x,y,width,height);")
   3.342 +    private native Object getImageDataImpl(double x, double y, double width, double height);
   3.343 +
   3.344 +    public void putImageData(ImageData imageData, double x, double y) {
   3.345 +        putImageDataImpl(imageData.object(), x, y);
   3.346 +    }
   3.347 +
   3.348 +    @JavaScriptBody(args = {"imageData", "x", "y"},
   3.349 +            body = "this._context().putImageData(imageData,x,y);")
   3.350 +    private native void putImageDataImpl(Object imageData, double x, double y);
   3.351 +
   3.352 +    public void putImageData(ImageData imageData, double x, double y, double dirtyx, double dirtyy, double dirtywidth, double dirtyheight) {
   3.353 +        putImageDataImpl(imageData.object(), x, y, dirtyx, dirtyy, dirtywidth, dirtyheight);
   3.354 +    }
   3.355 +
   3.356 +    @JavaScriptBody(args = {"imageData", "x", "y", "dirtyx", "dirtyy", "dirtywidth", "dirtyheight"},
   3.357 +            body = "this._context().putImageData(imageData,x,y, dirtyx, dirtyy, dirtywidth,dirtyheight);")
   3.358 +    private native void putImageDataImpl(Object imageData, double x, double y, double dirtyx, double dirtyy, double dirtywidth, double dirtyheight);
   3.359 +
   3.360 +    @JavaScriptBody(args = {"alpha"}, body = "this._context().globalAlpha=alpha;")
   3.361 +    @Override
   3.362 +    public native void setGlobalAlpha(double alpha);
   3.363 +
   3.364 +    @JavaScriptBody(args = {}, body = "return this._context().globalAlpha;")
   3.365 +    @Override
   3.366 +    public native double getGlobalAlpha();
   3.367 +
   3.368 +    @JavaScriptBody(args = {"operation"}, body = "this._context().globalCompositeOperation=operation.valueOf();")
   3.369 +    @Override
   3.370 +    public native void setGlobalCompositeOperation(String operation);
   3.371 +
   3.372 +    @JavaScriptBody(args = {}, body = "return this._context().globalCompositeOperation;")
   3.373 +    @Override
   3.374 +    public native String getGlobalCompositeOperation();
   3.375 +
   3.376 +    public LinearGradient createLinearGradient(double x0, double y0, double x1, double y1) {
   3.377 +        return new LinearGradient(createLinearGradientImpl(context, x0, y0, x1, y1));
   3.378 +    }
   3.379 +
   3.380 +    @JavaScriptBody(args = {"context", "x0", "y0", "x1", "y1"}, body = "return context.createLinearGradient(x0,y0,x1,y1);")
   3.381 +    private  native Object createLinearGradientImpl(Object context, double x0, double y0, double x1, double y1);
   3.382 +
   3.383 +    public Pattern createPattern(Image image, String repeat) {
   3.384 +        return new Pattern(createPatternImpl(context, image, repeat));
   3.385 +    }
   3.386 +
   3.387 +    @JavaScriptBody(args = {"context", "image", "repeat"}, body = "return context.createPattern(image, repeat);")
   3.388 +    private static native Object createPatternImpl(Object context, Image image, String repeat);
   3.389 +
   3.390 +    public RadialGradient createRadialGradient(double x0, double y0, double r0, double x1, double y1, double r1) {
   3.391 +        return new RadialGradient(createRadialGradientImpl(context, x0, y0, r0, x1, y1, r1));
   3.392 +    }
   3.393 +
   3.394 +    @JavaScriptBody(args = {"context", "x0", "y0", "r0", "x1", "y1", "r1"}, body = "return context.createRadialGradient(x0,y0,r0,x1,y1,r1);")
   3.395 +    private static native Object createRadialGradientImpl(Object context, double x0, double y0, double r0, double x1, double y1, double r1);
   3.396 +}