toni@521: /** toni@521: * Back 2 Browser Bytecode Translator toni@521: * Copyright (C) 2012 Jaroslav Tulach toni@521: * toni@521: * This program is free software: you can redistribute it and/or modify toni@521: * it under the terms of the GNU General Public License as published by toni@521: * the Free Software Foundation, version 2 of the License. toni@521: * toni@521: * This program is distributed in the hope that it will be useful, toni@521: * but WITHOUT ANY WARRANTY; without even the implied warranty of toni@521: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the toni@521: * GNU General Public License for more details. toni@521: * toni@521: * You should have received a copy of the GNU General Public License toni@521: * along with this program. Look for COPYING file in the top folder. toni@521: * If not, see http://opensource.org/licenses/GPL-2.0. toni@521: */ toni@521: package org.apidesign.bck2brwsr.htmlpage.api; toni@521: toni@521: import org.apidesign.bck2brwsr.core.JavaScriptBody; toni@521: toni@521: /** toni@521: * toni@521: * @author Anton Epple toni@521: */ toni@521: public class GraphicsContext { toni@521: toni@521: Object context; toni@521: jaroslav@871: GraphicsContext(Object contextImpl) { toni@521: this.context = contextImpl; toni@521: } toni@521: toni@521: @JavaScriptBody(args = {"centerx", "centery", "radius", "startangle", "endangle", "ccw"}, jaroslav@592: body = "this._context().arc(centerx,centery, radius, startangle, endangle,ccw);") toni@521: public native void arc(double centerX, toni@521: double centerY, toni@521: double startAngle, toni@521: double radius, toni@521: double endAngle, toni@521: boolean ccw); toni@521: toni@521: @JavaScriptBody(args = {"x1", "y1", "x2", "y2", "r"}, jaroslav@592: body = "this._context().arcTo(x1,y1,x2,y2,r);") toni@521: public native void arcTo(double x1, toni@521: double y1, toni@521: double x2, toni@521: double y2, toni@521: double r); toni@521: toni@521: @JavaScriptBody(args = {"x", "y"}, jaroslav@592: body = "return this._context().isPointInPath(x,y);") toni@521: public native boolean isPointInPath(double x, double y); toni@521: jaroslav@592: @JavaScriptBody(args = {}, body = "this._context().fill();") toni@521: public native void fill(); toni@521: jaroslav@592: @JavaScriptBody(args = {}, body = "this._context().stroke();") toni@521: public native void stroke(); toni@521: jaroslav@592: @JavaScriptBody(args = {}, body = "this._context().beginPath();") toni@521: public native void beginPath(); toni@521: jaroslav@592: @JavaScriptBody(args = {}, body = "this._context().closePath();") toni@521: public native void closePath(); toni@521: jaroslav@592: @JavaScriptBody(args = {}, body = "this._context().clip();") toni@521: public native void clip(); toni@521: jaroslav@592: @JavaScriptBody(args = {"x", "y"}, body = "this._context().moveTo(x,y);") toni@521: public native void moveTo(double x, double y); toni@521: jaroslav@592: @JavaScriptBody(args = {"x", "y"}, body = "this._context().lineTo(x,y);") toni@521: public native void lineTo(double x, double y); toni@521: jaroslav@592: @JavaScriptBody(args = {"cpx", "cpy", "x", "y"}, body = "this._context().quadraticCurveTo(cpx,cpy,x,y);") toni@521: public native void quadraticCurveTo(double cpx, double cpy, double x, double y); toni@521: toni@521: @JavaScriptBody(args = {"cp1x", "cp1y", "cp2x", "cp2y", "x", "y"}, jaroslav@592: body = "this._context().bezierCurveTo(cp1x,cp1y,cp2x,cp2y,x,y);") toni@521: public native void bezierCurveTo(double cp1x, double cp1y, double cp2x, double cp2y, double x, double y); toni@521: jaroslav@592: @JavaScriptBody(args = {"x", "y", "width", "height"}, body = "this._context().fillRect(x,y,width,height);") toni@521: public native void fillRect(double x, double y, double width, double height); toni@521: jaroslav@592: @JavaScriptBody(args = {"x", "y", "width", "height"}, body = "this._context().strokeRect(x,y,width,height);") toni@521: public native void strokeRect(double x, double y, double width, double height); toni@521: jaroslav@592: @JavaScriptBody(args = {"x", "y", "width", "height"}, body = "this._context().clearRect(x,y,width,height);") toni@521: public native void clearRect(double x, double y, double width, double height); toni@521: jaroslav@592: @JavaScriptBody(args = {"x", "y", "width", "height"}, body = "this._context().rectect(x,y,width,height);") toni@521: public native void rect(double x, double y, double width, double height); toni@521: jaroslav@592: @JavaScriptBody(args = {}, body = "this._context().save();") toni@521: public native void save(); toni@521: jaroslav@592: @JavaScriptBody(args = {}, body = "this._context().restore();") toni@521: public native void restore(); toni@521: jaroslav@592: @JavaScriptBody(args = {"angle"}, body = "this._context().rotate(angle);") toni@521: public native void rotate(double angle); toni@521: jaroslav@592: @JavaScriptBody(args = {"a", "b", "c", "d", "e", "f"}, body = "this._context().transform(a,b,c,d,e,f);") toni@521: public native void transform(double a, double b, double c, double d, double e, double f); toni@521: jaroslav@592: @JavaScriptBody(args = {"a", "b", "c", "d", "e", "f"}, body = "this._context().setTransform(a,b,c,d,e,f);") toni@521: public native void setTransform(double a, double b, double c, double d, double e, double f); toni@521: jaroslav@592: @JavaScriptBody(args = {"x", "y"}, body = "this._context().translate(x,y);") toni@521: public native void translate(double x, double y); toni@521: jaroslav@592: @JavaScriptBody(args = {"x", "y"}, body = "this._context().scale(x,y);") toni@521: public native void scale(double x, double y); toni@521: jaroslav@871: public void drawImage(Image image, double x, double y) { toni@521: drawImageImpl(context, Element.getElementById(image), x, y); toni@521: } toni@521: jaroslav@871: public void drawImage(Image image, double x, double y, double width, double height) { toni@521: drawImageImpl(context, Element.getElementById(image), x, y, width, height); toni@521: } toni@521: jaroslav@871: public void drawImage(Image image, double sx, double sy, double sWidth, double sHeight, double x, double y, double width, double height) { toni@521: drawImageImpl(context, Element.getElementById(image), sx, sy, sWidth, sHeight, x, y, width, height); toni@521: } toni@521: toni@521: @JavaScriptBody(args = {"ctx", "img", "x", "y", "width", "height"}, body = "ctx.drawImage(img,x,y,width,height);") toni@521: private native static void drawImageImpl(Object ctx, Object img, double x, double y, double width, double height); toni@521: toni@521: @JavaScriptBody(args = {"ctx", "img", "sx", "sy", "swidth", "sheight", "x", "y", "width", "height"}, body = "ctx.drawImage(img,sx,sy,swidth,sheight,x,y,width,height);") toni@521: 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); toni@521: toni@521: @JavaScriptBody(args = {"ctx", "img", "x", "y"}, body = "ctx.drawImage(img,x,y);") toni@521: private native static void drawImageImpl(Object ctx, Object img, double x, double y); toni@521: jaroslav@776: @JavaScriptBody(args = {"style"}, body = "this._context().fillStyle=style.valueOf();") toni@521: public native void setFillStyle(String style); toni@521: jaroslav@592: @JavaScriptBody(args = {}, body = "return this._context().fillStyle;") toni@521: public native String getFillStyle(); toni@521: toni@521: public void setFillStyle(LinearGradient style) { toni@521: setFillStyleImpl(context, style.object()); toni@521: } toni@521: toni@521: public void setFillStyle(RadialGradient style) { toni@521: setFillStyleImpl(context, style.object()); toni@521: } toni@521: toni@521: public void setFillStyle(Pattern style) { toni@521: setFillStyleImpl(context, style.object()); toni@521: } toni@521: toni@521: @JavaScriptBody(args = {"context","obj"}, body = "context.fillStyle=obj;") toni@521: private native void setFillStyleImpl(Object context, Object obj); toni@521: jaroslav@776: @JavaScriptBody(args = {"style"}, body = "this._context().strokeStyle=style.valueOf();") toni@521: public native void setStrokeStyle(String style); toni@521: toni@521: public void setStrokeStyle(LinearGradient style) { toni@521: setStrokeStyleImpl(context, style.object()); toni@521: } toni@521: toni@521: public void setStrokeStyle(RadialGradient style) { toni@521: setStrokeStyleImpl(context, style.object()); toni@521: } toni@521: jaroslav@592: @JavaScriptBody(args = {"style"}, body = "this._context().fillStyle=style;") toni@521: public void setStrokeStyle(Pattern style) { toni@521: setStrokeStyleImpl(context, style.object()); toni@521: } toni@521: toni@521: @JavaScriptBody(args = {"context","obj"}, body = "context.strokeStyle=obj;") toni@521: private native void setStrokeStyleImpl(Object context, Object obj); toni@521: jaroslav@776: @JavaScriptBody(args = {"color"}, body = "this._context().shadowColor=color.valueOf();") toni@521: public native void setShadowColor(String color); toni@521: jaroslav@592: @JavaScriptBody(args = {"blur"}, body = "this._context().shadowBlur=blur;") toni@521: public native void setShadowBlur(double blur); toni@521: jaroslav@592: @JavaScriptBody(args = {"x"}, body = "this._context().shadowOffsetX=x;") toni@521: public native void setShadowOffsetX(double x); toni@521: jaroslav@592: @JavaScriptBody(args = {"y"}, body = "this._context().shadowOffsetY=y;") toni@521: public native void setShadowOffsetY(double y); toni@521: jaroslav@592: @JavaScriptBody(args = {}, body = "return this._context().strokeStyle;") toni@521: public native String getStrokeStyle(); toni@521: jaroslav@592: @JavaScriptBody(args = {}, body = "return this._context().shadowColor;") toni@521: public native String getShadowColor(); toni@521: jaroslav@592: @JavaScriptBody(args = {}, body = "return this._context().shadowBlur;") toni@521: public native double getShadowBlur(); toni@521: jaroslav@592: @JavaScriptBody(args = {}, body = "return this._context().shadowOffsetX;") toni@521: public native double getShadowOffsetX(); toni@521: jaroslav@592: @JavaScriptBody(args = {}, body = "return this._context().shadowOffsetY;") toni@521: public native double getShadowOffsetY(); toni@521: jaroslav@592: @JavaScriptBody(args = {}, body = "return this._context().lineCap;") toni@521: public native String getLineCap(); toni@521: jaroslav@776: @JavaScriptBody(args = {"style"}, body = "this._context().lineCap=style.valueOf();") toni@521: public native void setLineCap(String style); toni@521: jaroslav@592: @JavaScriptBody(args = {}, body = "return this._context().lineJoin;") toni@521: public native String getLineJoin(); toni@521: jaroslav@776: @JavaScriptBody(args = {"style"}, body = "this._context().lineJoin=style.valueOf();") toni@521: public native void setLineJoin(String style) ; toni@521: jaroslav@592: @JavaScriptBody(args = {}, body = "return this._context().lineWidth;") toni@521: public native double getLineWidth(); toni@521: jaroslav@776: @JavaScriptBody(args = {"width"}, body = "this._context().lineWidth=width;") toni@521: public native void setLineWidth(double width); toni@521: jaroslav@592: @JavaScriptBody(args = {}, body = "return this._context().miterLimit;") toni@521: public native double getMiterLimit(); toni@521: jaroslav@592: @JavaScriptBody(args = {"limit"}, body = "this._context().miterLimit=limit;") toni@521: public native void setMiterLimit(double limit); toni@521: jaroslav@592: @JavaScriptBody(args = {}, body = "return this._context().font;") toni@521: public native String getFont(); toni@521: jaroslav@776: @JavaScriptBody(args = {"font"}, body = "this._context().font=font.valueOf();") toni@521: public native void setFont(String font); toni@521: jaroslav@592: @JavaScriptBody(args = {}, body = "return this._context().textAlign;") toni@521: public native String getTextAlign(); toni@521: jaroslav@776: @JavaScriptBody(args = {"textalign"}, body = "this._context().textAlign=textalign.valueOf();") toni@521: public native void setTextAlign(String textAlign); toni@521: jaroslav@592: @JavaScriptBody(args = {}, body = "return this._context().textBaseline;") toni@521: public native String getTextBaseline(); toni@521: jaroslav@776: @JavaScriptBody(args = {"textbaseline"}, body = "this._context().textBaseline=textbaseline.valueOf();") toni@521: public native void setTextBaseline(String textbaseline); toni@521: jaroslav@592: @JavaScriptBody(args = {"text", "x", "y"}, body = "this._context().fillText(text,x,y);") toni@521: public native void fillText(String text, double x, double y); toni@521: jaroslav@592: @JavaScriptBody(args = {"text", "x", "y", "maxwidth"}, body = "this._context().fillText(text,x,y,maxwidth);") toni@521: public void fillText(String text, double x, double y, double maxWidth) { toni@521: } toni@521: toni@521: public TextMetrics measureText(String text) { toni@521: return new TextMetrics(measureTextImpl(text)); toni@521: } toni@521: toni@521: @JavaScriptBody(args = {"text"}, jaroslav@592: body = "return this._context().measureText(text);") toni@521: private native Object measureTextImpl(String text); toni@521: jaroslav@592: @JavaScriptBody(args = {"text", "x", "y"}, body = "this._context().strokeText(text,x,y);") toni@521: public native void strokeText(String text, double x, double y); toni@521: jaroslav@592: @JavaScriptBody(args = {"text", "x", "y", "maxWidth"}, body = "this._context().strokeText(text,x,y,maxWidth);") toni@521: public native void strokeText(String text, double x, double y, double maxWidth) ; toni@521: toni@521: public ImageData createImageData(double x, double y) { toni@521: return new ImageData(createImageDataImpl(x, y)); toni@521: } toni@521: toni@521: @JavaScriptBody(args = {"x", "y"}, jaroslav@592: body = "return this._context().createImageData(x,y);") toni@521: private native Object createImageDataImpl(double x, double y); toni@521: toni@521: public ImageData createImageData(ImageData imageData) { toni@521: return new ImageData(createImageDataImpl(imageData.getWidth(), imageData.getHeight())); toni@521: } toni@521: toni@521: public ImageData getImageData(double x, double y, double width, double height) { toni@521: return new ImageData(getImageDataImpl(x, y, width, height)); toni@521: } toni@521: toni@521: @JavaScriptBody(args = {"x", "y", "width", "height"}, jaroslav@592: body = "return this._context().getImageData(x,y,width,height);") toni@521: private native Object getImageDataImpl(double x, double y, double width, double height); toni@521: toni@521: public void putImageData(ImageData imageData, double x, double y) { toni@521: putImageDataImpl(imageData.object(), x, y); toni@521: } toni@521: toni@521: @JavaScriptBody(args = {"imageData", "x", "y"}, jaroslav@592: body = "this._context().putImageData(imageData,x,y);") toni@521: private native void putImageDataImpl(Object imageData, double x, double y); toni@521: toni@521: public void putImageData(ImageData imageData, double x, double y, double dirtyx, double dirtyy, double dirtywidth, double dirtyheight) { toni@521: putImageDataImpl(imageData.object(), x, y, dirtyx, dirtyy, dirtywidth, dirtyheight); toni@521: } toni@521: toni@521: @JavaScriptBody(args = {"imageData", "x", "y", "dirtyx", "dirtyy", "dirtywidth", "dirtyheight"}, jaroslav@592: body = "this._context().putImageData(imageData,x,y, dirtyx, dirtyy, dirtywidth,dirtyheight);") toni@521: private native void putImageDataImpl(Object imageData, double x, double y, double dirtyx, double dirtyy, double dirtywidth, double dirtyheight); toni@521: jaroslav@592: @JavaScriptBody(args = {"alpha"}, body = "this._context().globalAlpha=alpha;") toni@521: public native void setGlobalAlpha(double alpha) ; toni@521: jaroslav@592: @JavaScriptBody(args = {}, body = "return this._context().globalAlpha;") toni@521: public native double getGlobalAlpha(); toni@521: jaroslav@776: @JavaScriptBody(args = {"operation"}, body = "this._context().globalCompositeOperation=operation.valueOf();") david@731: public native void setGlobalCompositeOperation(String operation); toni@521: jaroslav@592: @JavaScriptBody(args = {}, body = "return this._context().globalCompositeOperation;") david@731: public native String getGlobalCompositeOperation(); toni@521: toni@521: public LinearGradient createLinearGradient(double x0, double y0, double x1, double y1) { toni@521: return new LinearGradient(createLinearGradientImpl(context, x0, y0, x1, y1)); toni@521: } toni@521: toni@521: @JavaScriptBody(args = {"context", "x0", "y0", "x1", "y1"}, body = "return context.createLinearGradient(x0,y0,x1,y1);") toni@521: private native Object createLinearGradientImpl(Object context, double x0, double y0, double x1, double y1); toni@521: jaroslav@871: public Pattern createPattern(Image image, String repeat) { toni@521: return new Pattern(createPatternImpl(context, image, repeat)); toni@521: } toni@521: toni@521: @JavaScriptBody(args = {"context", "image", "repeat"}, body = "return context.createPattern(image, repeat);") jaroslav@871: private static native Object createPatternImpl(Object context, Image image, String repeat); toni@521: toni@521: public RadialGradient createRadialGradient(double x0, double y0, double r0, double x1, double y1, double r1) { toni@521: return new RadialGradient(createRadialGradientImpl(context, x0, y0, r0, x1, y1, r1)); toni@521: } toni@521: toni@521: @JavaScriptBody(args = {"context", "x0", "y0", "r0", "x1", "y1", "r1"}, body = "return context.createRadialGradient(x0,y0,r0,x1,y1,r1);") toni@521: private static native Object createRadialGradientImpl(Object context, double x0, double y0, double r0, double x1, double y1, double r1); toni@521: }