javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/api/HTML5GraphicsContext.java
author toni.epple@eppleton.de
Fri, 17 May 2013 13:50:31 +0200
branchcanvas
changeset 1117 848b2cc261e6
parent 1112 024b165f8f21
child 1121 dbc985f7226e
permissions -rw-r--r--
Pulled up more methods to the interface...
     1 /**
     2  * Back 2 Browser Bytecode Translator Copyright (C) 2012 Jaroslav Tulach
     3  * <jaroslav.tulach@apidesign.org>
     4  *
     5  * This program is free software: you can redistribute it and/or modify it under
     6  * the terms of the GNU General Public License as published by the Free Software
     7  * Foundation, version 2 of the License.
     8  *
     9  * This program is distributed in the hope that it will be useful, but WITHOUT
    10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
    11  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
    12  * details.
    13  *
    14  * You should have received a copy of the GNU General Public License along with
    15  * this program. Look for COPYING file in the top folder. If not, see
    16  * http://opensource.org/licenses/GPL-2.0.
    17  */
    18 package org.apidesign.bck2brwsr.htmlpage.api;
    19 
    20 import net.java.html.canvas.GraphicsContext;
    21 import net.java.html.canvas.Image;
    22 import net.java.html.canvas.ImageData;
    23 import net.java.html.canvas.LinearGradient;
    24 import net.java.html.canvas.Pattern;
    25 import net.java.html.canvas.RadialGradient;
    26 import net.java.html.canvas.TextMetrics;
    27 import org.apidesign.bck2brwsr.core.JavaScriptBody;
    28 
    29 /**
    30  *
    31  * @author Anton Epple <toni.epple@eppleton.de>
    32  */
    33 public class HTML5GraphicsContext implements GraphicsContext {
    34 
    35     Object context;
    36 
    37     HTML5GraphicsContext(Object contextImpl) {
    38         this.context = contextImpl;
    39     }
    40 
    41     @JavaScriptBody(args = {"centerx", "centery", "radius", "startangle", "endangle", "ccw"},
    42             body = "this._context().arc(centerx,centery, radius, startangle, endangle,ccw);")
    43     @Override
    44     public native void arc(double centerX,
    45             double centerY,
    46             double startAngle,
    47             double radius,
    48             double endAngle,
    49             boolean ccw);
    50 
    51     @JavaScriptBody(args = {"x1", "y1", "x2", "y2", "r"},
    52             body = "this._context().arcTo(x1,y1,x2,y2,r);")
    53     @Override
    54     public native void arcTo(double x1,
    55             double y1,
    56             double x2,
    57             double y2,
    58             double r);
    59 
    60     @JavaScriptBody(args = {"x", "y"},
    61             body = "return this._context().isPointInPath(x,y);")
    62     @Override
    63     public native boolean isPointInPath(double x, double y);
    64 
    65     @JavaScriptBody(args = {}, body = "this._context().fill();")
    66     @Override
    67     public native void fill();
    68 
    69     @JavaScriptBody(args = {}, body = "this._context().stroke();")
    70     @Override
    71     public native void stroke();
    72 
    73     @JavaScriptBody(args = {}, body = "this._context().beginPath();")
    74     @Override
    75     public native void beginPath();
    76 
    77     @JavaScriptBody(args = {}, body = "this._context().closePath();")
    78     @Override
    79     public native void closePath();
    80 
    81     @JavaScriptBody(args = {}, body = "this._context().clip();")
    82     @Override
    83     public native void clip();
    84 
    85     @JavaScriptBody(args = {"x", "y"}, body = "this._context().moveTo(x,y);")
    86     @Override
    87     public native void moveTo(double x, double y);
    88 
    89     @JavaScriptBody(args = {"x", "y"}, body = "this._context().lineTo(x,y);")
    90     @Override
    91     public native void lineTo(double x, double y);
    92 
    93     @JavaScriptBody(args = {"cpx", "cpy", "x", "y"}, body = "this._context().quadraticCurveTo(cpx,cpy,x,y);")
    94     @Override
    95     public native void quadraticCurveTo(double cpx, double cpy, double x, double y);
    96 
    97     @JavaScriptBody(args = {"cp1x", "cp1y", "cp2x", "cp2y", "x", "y"},
    98             body = "this._context().bezierCurveTo(cp1x,cp1y,cp2x,cp2y,x,y);")
    99     @Override
   100     public native void bezierCurveTo(double cp1x, double cp1y, double cp2x, double cp2y, double x, double y);
   101 
   102     @JavaScriptBody(args = {"x", "y", "width", "height"}, body = "this._context().fillRect(x,y,width,height);")
   103     @Override
   104     public native void fillRect(double x, double y, double width, double height);
   105 
   106     @JavaScriptBody(args = {"x", "y", "width", "height"}, body = "this._context().strokeRect(x,y,width,height);")
   107     @Override
   108     public native void strokeRect(double x, double y, double width, double height);
   109 
   110     @JavaScriptBody(args = {"x", "y", "width", "height"}, body = "this._context().clearRect(x,y,width,height);")
   111     @Override
   112     public native void clearRect(double x, double y, double width, double height);
   113 
   114     @JavaScriptBody(args = {"x", "y", "width", "height"}, body = "this._context().rectect(x,y,width,height);")
   115     @Override
   116     public native void rect(double x, double y, double width, double height);
   117 
   118     @JavaScriptBody(args = {}, body = "this._context().save();")
   119     @Override
   120     public native void save();
   121 
   122     @JavaScriptBody(args = {}, body = "this._context().restore();")
   123     @Override
   124     public native void restore();
   125 
   126     @JavaScriptBody(args = {"angle"}, body = "this._context().rotate(angle);")
   127     @Override
   128     public native void rotate(double angle);
   129 
   130     @JavaScriptBody(args = {"a", "b", "c", "d", "e", "f"}, body = "this._context().transform(a,b,c,d,e,f);")
   131     @Override
   132     public native void transform(double a, double b, double c, double d, double e, double f);
   133 
   134     @JavaScriptBody(args = {"a", "b", "c", "d", "e", "f"}, body = "this._context().setTransform(a,b,c,d,e,f);")
   135     @Override
   136     public native void setTransform(double a, double b, double c, double d, double e, double f);
   137 
   138     @JavaScriptBody(args = {"x", "y"}, body = "this._context().translate(x,y);")
   139     @Override
   140     public native void translate(double x, double y);
   141 
   142     @JavaScriptBody(args = {"x", "y"}, body = "this._context().scale(x,y);")
   143     @Override
   144     public native void scale(double x, double y);
   145 
   146     @Override
   147     public void drawImage(Image image, double x, double y) {
   148         drawImageImpl(context, Element.getElementById((HTML5Image)image), x, y);
   149     }
   150 
   151     @Override
   152     public void drawImage(Image image, double x, double y, double width, double height) {
   153         drawImageImpl(context, Element.getElementById((HTML5Image)image), x, y, width, height);
   154     }
   155 
   156     @Override
   157     public void drawImage(Image image, double sx, double sy, double sWidth, double sHeight, double x, double y, double width, double height) {
   158         drawImageImpl(context, Element.getElementById((HTML5Image)image), sx, sy, sWidth, sHeight, x, y, width, height);
   159     }
   160 
   161     @JavaScriptBody(args = {"ctx", "img", "x", "y", "width", "height"}, body = "ctx.drawImage(img,x,y,width,height);")
   162     private native static void drawImageImpl(Object ctx, Object img, double x, double y, double width, double height);
   163 
   164     @JavaScriptBody(args = {"ctx", "img", "sx", "sy", "swidth", "sheight", "x", "y", "width", "height"}, body = "ctx.drawImage(img,sx,sy,swidth,sheight,x,y,width,height);")
   165     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);
   166 
   167     @JavaScriptBody(args = {"ctx", "img", "x", "y"}, body = "ctx.drawImage(img,x,y);")
   168     private native static void drawImageImpl(Object ctx, Object img, double x, double y);
   169 
   170     @JavaScriptBody(args = {"style"}, body = "this._context().fillStyle=style.valueOf();")
   171     @Override
   172     public native void setFillStyle(String style);
   173 
   174     @JavaScriptBody(args = {}, body = "return this._context().fillStyle;")
   175     @Override
   176     public native String getFillStyle();
   177 
   178     @Override
   179     public void setFillStyle(LinearGradient style) {
   180         setFillStyleImpl(context, ((HTML5LinearGradient)style).object());
   181     }
   182 
   183     @Override
   184     public void setFillStyle(RadialGradient style) {
   185         setFillStyleImpl(context, ((HTML5RadialGradient)style).object());
   186     }
   187 
   188     @Override
   189     public void setFillStyle(Pattern style) {
   190         setFillStyleImpl(context, ((HTML5Pattern)style).object());
   191     }
   192 
   193     @JavaScriptBody(args = {"context", "obj"}, body = "context.fillStyle=obj;")
   194     private native void setFillStyleImpl(Object context, Object obj);
   195 
   196     @JavaScriptBody(args = {"style"}, body = "this._context().strokeStyle=style.valueOf();")
   197     @Override
   198     public native void setStrokeStyle(String style);
   199 
   200     @Override
   201     public void setStrokeStyle(LinearGradient style) {
   202         setStrokeStyleImpl(context, ((HTML5LinearGradient)style).object());
   203     }
   204 
   205     @Override
   206     public void setStrokeStyle(RadialGradient style) {
   207         setStrokeStyleImpl(context, ((HTML5RadialGradient)style).object());
   208     }
   209 
   210     @JavaScriptBody(args = {"style"}, body = "this._context().fillStyle=style;")
   211     @Override
   212     public void setStrokeStyle(Pattern style) {
   213         setStrokeStyleImpl(context, ((HTML5LinearGradient)style).object());
   214     }
   215 
   216     @JavaScriptBody(args = {"context", "obj"}, body = "context.strokeStyle=obj;")
   217     private native void setStrokeStyleImpl(Object context, Object obj);
   218 
   219     @JavaScriptBody(args = {"color"}, body = "this._context().shadowColor=color.valueOf();")
   220     @Override
   221     public native void setShadowColor(String color);
   222 
   223     @JavaScriptBody(args = {"blur"}, body = "this._context().shadowBlur=blur;")
   224     @Override
   225     public native void setShadowBlur(double blur);
   226 
   227     @JavaScriptBody(args = {"x"}, body = "this._context().shadowOffsetX=x;")
   228     @Override
   229     public native void setShadowOffsetX(double x);
   230 
   231     @JavaScriptBody(args = {"y"}, body = "this._context().shadowOffsetY=y;")
   232     @Override
   233     public native void setShadowOffsetY(double y);
   234 
   235     @JavaScriptBody(args = {}, body = "return this._context().strokeStyle;")
   236     @Override
   237     public native String getStrokeStyle();
   238 
   239     @JavaScriptBody(args = {}, body = "return this._context().shadowColor;")
   240     @Override
   241     public native String getShadowColor();
   242 
   243     @JavaScriptBody(args = {}, body = "return this._context().shadowBlur;")
   244     @Override
   245     public native double getShadowBlur();
   246 
   247     @JavaScriptBody(args = {}, body = "return this._context().shadowOffsetX;")
   248     @Override
   249     public native double getShadowOffsetX();
   250 
   251     @JavaScriptBody(args = {}, body = "return this._context().shadowOffsetY;")
   252     @Override
   253     public native double getShadowOffsetY();
   254 
   255     @JavaScriptBody(args = {}, body = "return this._context().lineCap;")
   256     @Override
   257     public native String getLineCap();
   258 
   259     @JavaScriptBody(args = {"style"}, body = "this._context().lineCap=style.valueOf();")
   260     @Override
   261     public native void setLineCap(String style);
   262 
   263     @JavaScriptBody(args = {}, body = "return this._context().lineJoin;")
   264     @Override
   265     public native String getLineJoin();
   266 
   267     @JavaScriptBody(args = {"style"}, body = "this._context().lineJoin=style.valueOf();")
   268     @Override
   269     public native void setLineJoin(String style);
   270 
   271     @JavaScriptBody(args = {}, body = "return this._context().lineWidth;")
   272     @Override
   273     public native double getLineWidth();
   274 
   275     @JavaScriptBody(args = {"width"}, body = "this._context().lineWidth=width;")
   276     @Override
   277     public native void setLineWidth(double width);
   278 
   279     @JavaScriptBody(args = {}, body = "return this._context().miterLimit;")
   280     @Override
   281     public native double getMiterLimit();
   282 
   283     @JavaScriptBody(args = {"limit"}, body = "this._context().miterLimit=limit;")
   284     @Override
   285     public native void setMiterLimit(double limit);
   286 
   287     @JavaScriptBody(args = {}, body = "return this._context().font;")
   288     @Override
   289     public native String getFont();
   290 
   291     @JavaScriptBody(args = {"font"}, body = "this._context().font=font.valueOf();")
   292     @Override
   293     public native void setFont(String font);
   294 
   295     @JavaScriptBody(args = {}, body = "return this._context().textAlign;")
   296     @Override
   297     public native String getTextAlign();
   298 
   299     @JavaScriptBody(args = {"textalign"}, body = "this._context().textAlign=textalign.valueOf();")
   300     @Override
   301     public native void setTextAlign(String textAlign);
   302 
   303     @JavaScriptBody(args = {}, body = "return this._context().textBaseline;")
   304     @Override
   305     public native String getTextBaseline();
   306 
   307     @JavaScriptBody(args = {"textbaseline"}, body = "this._context().textBaseline=textbaseline.valueOf();")
   308     @Override
   309     public native void setTextBaseline(String textbaseline);
   310 
   311     @JavaScriptBody(args = {"text", "x", "y"}, body = "this._context().fillText(text,x,y);")
   312     @Override
   313     public native void fillText(String text, double x, double y);
   314 
   315     @JavaScriptBody(args = {"text", "x", "y", "maxwidth"}, body = "this._context().fillText(text,x,y,maxwidth);")
   316     @Override
   317     public void fillText(String text, double x, double y, double maxWidth) {
   318     }
   319 
   320     @Override
   321     public TextMetrics measureText(String text) {
   322         return new HTML5TextMetrics(measureTextImpl(text));
   323     }
   324 
   325     @JavaScriptBody(args = {"text"},
   326             body = "return this._context().measureText(text);")
   327     private native Object measureTextImpl(String text);
   328 
   329     @JavaScriptBody(args = {"text", "x", "y"}, body = "this._context().strokeText(text,x,y);")
   330     @Override
   331     public native void strokeText(String text, double x, double y);
   332 
   333     @JavaScriptBody(args = {"text", "x", "y", "maxWidth"}, body = "this._context().strokeText(text,x,y,maxWidth);")
   334     @Override
   335     public native void strokeText(String text, double x, double y, double maxWidth);
   336 
   337     @Override
   338     public ImageData createImageData(double x, double y) {
   339         return new HTML5ImageData(createImageDataImpl(x, y));
   340     }
   341 
   342     @JavaScriptBody(args = {"x", "y"},
   343             body = "return this._context().createImageData(x,y);")
   344     private native Object createImageDataImpl(double x, double y);
   345 
   346     @Override
   347     public ImageData createImageData(ImageData imageData) {
   348         return new HTML5ImageData(createImageDataImpl(imageData.getWidth(), imageData.getHeight()));
   349     }
   350 
   351     @Override
   352     public ImageData getImageData(double x, double y, double width, double height) {
   353         return new HTML5ImageData(getImageDataImpl(x, y, width, height));
   354     }
   355 
   356     @JavaScriptBody(args = {"x", "y", "width", "height"},
   357             body = "return this._context().getImageData(x,y,width,height);")
   358     private native Object getImageDataImpl(double x, double y, double width, double height);
   359 
   360     @Override
   361     public void putImageData(ImageData imageData, double x, double y) {
   362         putImageDataImpl(((HTML5ImageData)imageData).object(), x, y);
   363     }
   364 
   365     @JavaScriptBody(args = {"imageData", "x", "y"},
   366             body = "this._context().putImageData(imageData,x,y);")
   367     private native void putImageDataImpl(Object imageData, double x, double y);
   368 
   369     @Override
   370     public void putImageData(ImageData imageData, double x, double y, double dirtyx, double dirtyy, double dirtywidth, double dirtyheight) {
   371         putImageDataImpl(((HTML5ImageData)imageData).object(), x, y, dirtyx, dirtyy, dirtywidth, dirtyheight);
   372     }
   373 
   374     @JavaScriptBody(args = {"imageData", "x", "y", "dirtyx", "dirtyy", "dirtywidth", "dirtyheight"},
   375             body = "this._context().putImageData(imageData,x,y, dirtyx, dirtyy, dirtywidth,dirtyheight);")
   376     private native void putImageDataImpl(Object imageData, double x, double y, double dirtyx, double dirtyy, double dirtywidth, double dirtyheight);
   377 
   378     @JavaScriptBody(args = {"alpha"}, body = "this._context().globalAlpha=alpha;")
   379     @Override
   380     public native void setGlobalAlpha(double alpha);
   381 
   382     @JavaScriptBody(args = {}, body = "return this._context().globalAlpha;")
   383     @Override
   384     public native double getGlobalAlpha();
   385 
   386     @JavaScriptBody(args = {"operation"}, body = "this._context().globalCompositeOperation=operation.valueOf();")
   387     @Override
   388     public native void setGlobalCompositeOperation(String operation);
   389 
   390     @JavaScriptBody(args = {}, body = "return this._context().globalCompositeOperation;")
   391     @Override
   392     public native String getGlobalCompositeOperation();
   393 
   394     @Override
   395     public HTML5LinearGradient createLinearGradient(double x0, double y0, double x1, double y1) {
   396         return new HTML5LinearGradient(createLinearGradientImpl(context, x0, y0, x1, y1));
   397     }
   398 
   399     @JavaScriptBody(args = {"context", "x0", "y0", "x1", "y1"}, body = "return context.createLinearGradient(x0,y0,x1,y1);")
   400     private native Object createLinearGradientImpl(Object context, double x0, double y0, double x1, double y1);
   401 
   402     @Override
   403     public Pattern createPattern(Image image, String repeat) {
   404         return new HTML5Pattern(createPatternImpl(context, image, repeat));
   405     }
   406 
   407     @JavaScriptBody(args = {"context", "image", "repeat"}, body = "return context.createPattern(image, repeat);")
   408     private static native Object createPatternImpl(Object context, Image image, String repeat);
   409 
   410     @Override
   411     public HTML5RadialGradient createRadialGradient(double x0, double y0, double r0, double x1, double y1, double r1) {
   412         return new HTML5RadialGradient(createRadialGradientImpl(context, x0, y0, r0, x1, y1, r1));
   413     }
   414 
   415     @JavaScriptBody(args = {"context", "x0", "y0", "r0", "x1", "y1", "r1"}, body = "return context.createRadialGradient(x0,y0,r0,x1,y1,r1);")
   416     private static native Object createRadialGradientImpl(Object context, double x0, double y0, double r0, double x1, double y1, double r1);
   417 }