javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/api/GraphicsContext.java
author toni.epple@eppleton.de
Tue, 21 May 2013 16:10:52 +0200
branchcanvas
changeset 1125 a3d504d7e588
parent 1122 javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/api/HTML5GraphicsContext.java@f5f15ac48ea8
permissions -rw-r--r--
Refactored names to unpopular naming scheme, because (a) bck2brwsr Canvas implementation must be named Canvas due to mapping in bck2brwsr and I don't want interface and impl to have the same name. (b) with the "I" prefix at least it's consistent, even if nobody uses that anymore. (c) names are the same as in HTML5 Canvas Javascript API, so it's more familiar...
     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 
    21 import net.java.html.canvas.IGraphicsContext;
    22 import net.java.html.canvas.IImage;
    23 import net.java.html.canvas.IImageData;
    24 import net.java.html.canvas.ILinearGradient;
    25 import net.java.html.canvas.IPattern;
    26 import net.java.html.canvas.IRadialGradient;
    27 import net.java.html.canvas.ITextMetrics;
    28 import org.apidesign.bck2brwsr.core.JavaScriptBody;
    29 
    30 
    31 /**
    32  *
    33  * @author Anton Epple <toni.epple@eppleton.de>
    34  */
    35 public class GraphicsContext implements IGraphicsContext {
    36 
    37     Object context;
    38 
    39     GraphicsContext(Object contextImpl) {
    40         this.context = contextImpl;
    41     }
    42 
    43     @JavaScriptBody(args = {"centerx", "centery", "radius", "startangle", "endangle", "ccw"},
    44             body = "this._context().arc(centerx,centery, radius, startangle, endangle,ccw);")
    45     @Override
    46     public native void arc(double centerX,
    47             double centerY,
    48             double startAngle,
    49             double radius,
    50             double endAngle,
    51             boolean ccw);
    52 
    53     @JavaScriptBody(args = {"x1", "y1", "x2", "y2", "r"},
    54             body = "this._context().arcTo(x1,y1,x2,y2,r);")
    55     @Override
    56     public native void arcTo(double x1,
    57             double y1,
    58             double x2,
    59             double y2,
    60             double r);
    61 
    62     @JavaScriptBody(args = {"x", "y"},
    63             body = "return this._context().isPointInPath(x,y);")
    64     @Override
    65     public native boolean isPointInPath(double x, double y);
    66 
    67     @JavaScriptBody(args = {}, body = "this._context().fill();")
    68     @Override
    69     public native void fill();
    70 
    71     @JavaScriptBody(args = {}, body = "this._context().stroke();")
    72     @Override
    73     public native void stroke();
    74 
    75     @JavaScriptBody(args = {}, body = "this._context().beginPath();")
    76     @Override
    77     public native void beginPath();
    78 
    79     @JavaScriptBody(args = {}, body = "this._context().closePath();")
    80     @Override
    81     public native void closePath();
    82 
    83     @JavaScriptBody(args = {}, body = "this._context().clip();")
    84     @Override
    85     public native void clip();
    86 
    87     @JavaScriptBody(args = {"x", "y"}, body = "this._context().moveTo(x,y);")
    88     @Override
    89     public native void moveTo(double x, double y);
    90 
    91     @JavaScriptBody(args = {"x", "y"}, body = "this._context().lineTo(x,y);")
    92     @Override
    93     public native void lineTo(double x, double y);
    94 
    95     @JavaScriptBody(args = {"cpx", "cpy", "x", "y"}, body = "this._context().quadraticCurveTo(cpx,cpy,x,y);")
    96     @Override
    97     public native void quadraticCurveTo(double cpx, double cpy, double x, double y);
    98 
    99     @JavaScriptBody(args = {"cp1x", "cp1y", "cp2x", "cp2y", "x", "y"},
   100             body = "this._context().bezierCurveTo(cp1x,cp1y,cp2x,cp2y,x,y);")
   101     @Override
   102     public native void bezierCurveTo(double cp1x, double cp1y, double cp2x, double cp2y, double x, double y);
   103 
   104     @JavaScriptBody(args = {"x", "y", "width", "height"}, body = "this._context().fillRect(x,y,width,height);")
   105     @Override
   106     public native void fillRect(double x, double y, double width, double height);
   107 
   108     @JavaScriptBody(args = {"x", "y", "width", "height"}, body = "this._context().strokeRect(x,y,width,height);")
   109     @Override
   110     public native void strokeRect(double x, double y, double width, double height);
   111 
   112     @JavaScriptBody(args = {"x", "y", "width", "height"}, body = "this._context().clearRect(x,y,width,height);")
   113     @Override
   114     public native void clearRect(double x, double y, double width, double height);
   115 
   116     @JavaScriptBody(args = {"x", "y", "width", "height"}, body = "this._context().rectect(x,y,width,height);")
   117     @Override
   118     public native void rect(double x, double y, double width, double height);
   119 
   120     @JavaScriptBody(args = {}, body = "this._context().save();")
   121     @Override
   122     public native void save();
   123 
   124     @JavaScriptBody(args = {}, body = "this._context().restore();")
   125     @Override
   126     public native void restore();
   127 
   128     @JavaScriptBody(args = {"angle"}, body = "this._context().rotate(angle);")
   129     @Override
   130     public native void rotate(double angle);
   131 
   132     @JavaScriptBody(args = {"a", "b", "c", "d", "e", "f"}, body = "this._context().transform(a,b,c,d,e,f);")
   133     @Override
   134     public native void transform(double a, double b, double c, double d, double e, double f);
   135 
   136     @JavaScriptBody(args = {"a", "b", "c", "d", "e", "f"}, body = "this._context().setTransform(a,b,c,d,e,f);")
   137     @Override
   138     public native void setTransform(double a, double b, double c, double d, double e, double f);
   139 
   140     @JavaScriptBody(args = {"x", "y"}, body = "this._context().translate(x,y);")
   141     @Override
   142     public native void translate(double x, double y);
   143 
   144     @JavaScriptBody(args = {"x", "y"}, body = "this._context().scale(x,y);")
   145     @Override
   146     public native void scale(double x, double y);
   147 
   148     @Override
   149     public void drawImage(IImage image, double x, double y) {
   150         drawImageImpl(context, Element.getElementById((Image) image), x, y);
   151     }
   152 
   153     @Override
   154     public void drawImage(IImage image, double x, double y, double width, double height) {
   155         drawImageImpl(context, Element.getElementById((Image) image), x, y, width, height);
   156     }
   157 
   158     @Override
   159     public void drawImage(IImage image, double sx, double sy, double sWidth, double sHeight, double x, double y, double width, double height) {
   160         drawImageImpl(context, Element.getElementById((Image) image), sx, sy, sWidth, sHeight, x, y, width, height);
   161     }
   162 
   163     @JavaScriptBody(args = {"ctx", "img", "x", "y", "width", "height"}, body = "ctx.drawImage(img,x,y,width,height);")
   164     private native static void drawImageImpl(Object ctx, Object img, double x, double y, double width, double height);
   165 
   166     @JavaScriptBody(args = {"ctx", "img", "sx", "sy", "swidth", "sheight", "x", "y", "width", "height"}, body = "ctx.drawImage(img,sx,sy,swidth,sheight,x,y,width,height);")
   167     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);
   168 
   169     @JavaScriptBody(args = {"ctx", "img", "x", "y"}, body = "ctx.drawImage(img,x,y);")
   170     private native static void drawImageImpl(Object ctx, Object img, double x, double y);
   171 
   172     @JavaScriptBody(args = {"style"}, body = "this._context().fillStyle=style.valueOf();")
   173     @Override
   174     public native void setFillStyle(String style);
   175 
   176     @JavaScriptBody(args = {}, body = "return this._context().fillStyle;")
   177     @Override
   178     public native String getFillStyle();
   179 
   180     @Override
   181     public void setFillStyle(ILinearGradient style) {
   182         setFillStyleImpl(context, ((LinearGradient) style).object());
   183     }
   184 
   185     @Override
   186     public void setFillStyle(IRadialGradient style) {
   187         setFillStyleImpl(context, ((RadialGradient) style).object());
   188     }
   189 
   190     @Override
   191     public void setFillStyle(IPattern style) {
   192         setFillStyleImpl(context, ((Pattern) style).object());
   193     }
   194 
   195     @JavaScriptBody(args = {"context", "obj"}, body = "context.fillStyle=obj;")
   196     private native void setFillStyleImpl(Object context, Object obj);
   197 
   198     @JavaScriptBody(args = {"style"}, body = "this._context().strokeStyle=style.valueOf();")
   199     @Override
   200     public native void setStrokeStyle(String style);
   201 
   202     @Override
   203     public void setStrokeStyle(ILinearGradient style) {
   204         setStrokeStyleImpl(context, ((LinearGradient) style).object());
   205     }
   206 
   207     @Override
   208     public void setStrokeStyle(IRadialGradient style) {
   209         setStrokeStyleImpl(context, ((RadialGradient) style).object());
   210     }
   211 
   212     @JavaScriptBody(args = {"style"}, body = "this._context().fillStyle=style;")
   213     @Override
   214     public void setStrokeStyle(IPattern style) {
   215         setStrokeStyleImpl(context, ((LinearGradient) style).object());
   216     }
   217 
   218     @JavaScriptBody(args = {"context", "obj"}, body = "context.strokeStyle=obj;")
   219     private native void setStrokeStyleImpl(Object context, Object obj);
   220 
   221     @JavaScriptBody(args = {"color"}, body = "this._context().shadowColor=color.valueOf();")
   222     @Override
   223     public native void setShadowColor(String color);
   224 
   225     @JavaScriptBody(args = {"blur"}, body = "this._context().shadowBlur=blur;")
   226     @Override
   227     public native void setShadowBlur(double blur);
   228 
   229     @JavaScriptBody(args = {"x"}, body = "this._context().shadowOffsetX=x;")
   230     @Override
   231     public native void setShadowOffsetX(double x);
   232 
   233     @JavaScriptBody(args = {"y"}, body = "this._context().shadowOffsetY=y;")
   234     @Override
   235     public native void setShadowOffsetY(double y);
   236 
   237     @JavaScriptBody(args = {}, body = "return this._context().strokeStyle;")
   238     @Override
   239     public native String getStrokeStyle();
   240 
   241     @JavaScriptBody(args = {}, body = "return this._context().shadowColor;")
   242     @Override
   243     public native String getShadowColor();
   244 
   245     @JavaScriptBody(args = {}, body = "return this._context().shadowBlur;")
   246     @Override
   247     public native double getShadowBlur();
   248 
   249     @JavaScriptBody(args = {}, body = "return this._context().shadowOffsetX;")
   250     @Override
   251     public native double getShadowOffsetX();
   252 
   253     @JavaScriptBody(args = {}, body = "return this._context().shadowOffsetY;")
   254     @Override
   255     public native double getShadowOffsetY();
   256 
   257     @JavaScriptBody(args = {}, body = "return this._context().lineCap;")
   258     @Override
   259     public native String getLineCap();
   260 
   261     @JavaScriptBody(args = {"style"}, body = "this._context().lineCap=style.valueOf();")
   262     @Override
   263     public native void setLineCap(String style);
   264 
   265     @JavaScriptBody(args = {}, body = "return this._context().lineJoin;")
   266     @Override
   267     public native String getLineJoin();
   268 
   269     @JavaScriptBody(args = {"style"}, body = "this._context().lineJoin=style.valueOf();")
   270     @Override
   271     public native void setLineJoin(String style);
   272 
   273     @JavaScriptBody(args = {}, body = "return this._context().lineWidth;")
   274     @Override
   275     public native double getLineWidth();
   276 
   277     @JavaScriptBody(args = {"width"}, body = "this._context().lineWidth=width;")
   278     @Override
   279     public native void setLineWidth(double width);
   280 
   281     @JavaScriptBody(args = {}, body = "return this._context().miterLimit;")
   282     @Override
   283     public native double getMiterLimit();
   284 
   285     @JavaScriptBody(args = {"limit"}, body = "this._context().miterLimit=limit;")
   286     @Override
   287     public native void setMiterLimit(double limit);
   288 
   289     @JavaScriptBody(args = {}, body = "return this._context().font;")
   290     @Override
   291     public native String getFont();
   292 
   293     @JavaScriptBody(args = {"font"}, body = "this._context().font=font.valueOf();")
   294     @Override
   295     public native void setFont(String font);
   296 
   297     @JavaScriptBody(args = {}, body = "return this._context().textAlign;")
   298     @Override
   299     public native String getTextAlign();
   300 
   301     @JavaScriptBody(args = {"textalign"}, body = "this._context().textAlign=textalign.valueOf();")
   302     @Override
   303     public native void setTextAlign(String textAlign);
   304 
   305     @JavaScriptBody(args = {}, body = "return this._context().textBaseline;")
   306     @Override
   307     public native String getTextBaseline();
   308 
   309     @JavaScriptBody(args = {"textbaseline"}, body = "this._context().textBaseline=textbaseline.valueOf();")
   310     @Override
   311     public native void setTextBaseline(String textbaseline);
   312 
   313     @JavaScriptBody(args = {"text", "x", "y"}, body = "this._context().fillText(text,x,y);")
   314     @Override
   315     public native void fillText(String text, double x, double y);
   316 
   317     @JavaScriptBody(args = {"text", "x", "y", "maxwidth"}, body = "this._context().fillText(text,x,y,maxwidth);")
   318     @Override
   319     public void fillText(String text, double x, double y, double maxWidth) {
   320     }
   321 
   322     @Override
   323     public ITextMetrics measureText(String text) {
   324         return new TextMetrics(measureTextImpl(text));
   325     }
   326 
   327     @JavaScriptBody(args = {"text"},
   328             body = "return this._context().measureText(text);")
   329     private native Object measureTextImpl(String text);
   330 
   331     @JavaScriptBody(args = {"text", "x", "y"}, body = "this._context().strokeText(text,x,y);")
   332     @Override
   333     public native void strokeText(String text, double x, double y);
   334 
   335     @JavaScriptBody(args = {"text", "x", "y", "maxWidth"}, body = "this._context().strokeText(text,x,y,maxWidth);")
   336     @Override
   337     public native void strokeText(String text, double x, double y, double maxWidth);
   338 
   339     @Override
   340     public IImageData createImageData(double x, double y) {
   341         return new ImageData(createImageDataImpl(x, y));
   342     }
   343 
   344     @JavaScriptBody(args = {"x", "y"},
   345             body = "return this._context().createImageData(x,y);")
   346     private native Object createImageDataImpl(double x, double y);
   347 
   348     @Override
   349     public IImageData createImageData(IImageData imageData) {
   350         return new ImageData(createImageDataImpl(imageData.getWidth(), imageData.getHeight()));
   351     }
   352 
   353     @Override
   354     public IImageData getImageData(double x, double y, double width, double height) {
   355         return new ImageData(getImageDataImpl(x, y, width, height));
   356     }
   357 
   358     @JavaScriptBody(args = {"x", "y", "width", "height"},
   359             body = "return this._context().getImageData(x,y,width,height);")
   360     private native Object getImageDataImpl(double x, double y, double width, double height);
   361 
   362     @Override
   363     public void putImageData(IImageData imageData, double x, double y) {
   364         putImageDataImpl(((ImageData) imageData).object(), x, y);
   365     }
   366 
   367     @JavaScriptBody(args = {"imageData", "x", "y"},
   368             body = "this._context().putImageData(imageData,x,y);")
   369     private native void putImageDataImpl(Object imageData, double x, double y);
   370 
   371     @Override
   372     public void putImageData(IImageData imageData, double x, double y, double dirtyx, double dirtyy, double dirtywidth, double dirtyheight) {
   373         putImageDataImpl(((ImageData) imageData).object(), x, y, dirtyx, dirtyy, dirtywidth, dirtyheight);
   374     }
   375 
   376     @JavaScriptBody(args = {"imageData", "x", "y", "dirtyx", "dirtyy", "dirtywidth", "dirtyheight"},
   377             body = "this._context().putImageData(imageData,x,y, dirtyx, dirtyy, dirtywidth,dirtyheight);")
   378     private native void putImageDataImpl(Object imageData, double x, double y, double dirtyx, double dirtyy, double dirtywidth, double dirtyheight);
   379 
   380     @JavaScriptBody(args = {"alpha"}, body = "this._context().globalAlpha=alpha;")
   381     @Override
   382     public native void setGlobalAlpha(double alpha);
   383 
   384     @JavaScriptBody(args = {}, body = "return this._context().globalAlpha;")
   385     @Override
   386     public native double getGlobalAlpha();
   387 
   388     @JavaScriptBody(args = {"operation"}, body = "this._context().globalCompositeOperation=operation.valueOf();")
   389     @Override
   390     public native void setGlobalCompositeOperation(String operation);
   391 
   392     @JavaScriptBody(args = {}, body = "return this._context().globalCompositeOperation;")
   393     @Override
   394     public native String getGlobalCompositeOperation();
   395 
   396     @Override
   397     public LinearGradient createLinearGradient(double x0, double y0, double x1, double y1) {
   398         return new LinearGradient(createLinearGradientImpl(context, x0, y0, x1, y1));
   399     }
   400 
   401     @JavaScriptBody(args = {"context", "x0", "y0", "x1", "y1"}, body = "return context.createLinearGradient(x0,y0,x1,y1);")
   402     private native Object createLinearGradientImpl(Object context, double x0, double y0, double x1, double y1);
   403 
   404     @Override
   405     public IPattern createPattern(IImage image, String repeat) {
   406         return new Pattern(createPatternImpl(context, image, repeat));
   407     }
   408 
   409     @JavaScriptBody(args = {"context", "image", "repeat"}, body = "return context.createPattern(image, repeat);")
   410     private static native Object createPatternImpl(Object context, IImage image, String repeat);
   411 
   412     @Override
   413     public RadialGradient createRadialGradient(double x0, double y0, double r0, double x1, double y1, double r1) {
   414         return new RadialGradient(createRadialGradientImpl(context, x0, y0, r0, x1, y1, r1));
   415     }
   416 
   417     @JavaScriptBody(args = {"context", "x0", "y0", "r0", "x1", "y1", "r1"}, body = "return context.createRadialGradient(x0,y0,r0,x1,y1,r1);")
   418     private static native Object createRadialGradientImpl(Object context, double x0, double y0, double r0, double x1, double y1, double r1);
   419 
   420     @JavaScriptBody(args = {"path"}, body = "var b = new Image(); b.src=path; return b;")
   421     @Override
   422     public IImage getImageForPath(String path) {
   423         throw new UnsupportedOperationException("getImageForPath is not yet supported");
   424     }
   425 }