# HG changeset patch # User Anton Epple # Date 1369636230 -7200 # Node ID 0e2c3676d77ab673325d7006f918080475880236 # Parent 5bf850c5b7f109e9c77eebfd55e6f7c2055eb5a1 Readded Image and ImageData to have the complete API again. No need to use Data in API anymore. Added caching to Image. Image are not required to be added to the page anymore, but are created in javaScript instead. diff -r 5bf850c5b7f1 -r 0e2c3676d77a javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/HTML5GraphicsEnvironment.java --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/HTML5GraphicsEnvironment.java Mon May 27 08:30:18 2013 +0200 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/HTML5GraphicsEnvironment.java Mon May 27 08:30:30 2013 +0200 @@ -20,13 +20,16 @@ import java.util.HashMap; import java.util.Set; import net.java.html.canvas.Dimension; +import net.java.html.canvas.Image; import net.java.html.canvas.LinearGradient; import net.java.html.canvas.Pattern; +import net.java.html.canvas.ImageData; import net.java.html.canvas.RadialGradient; import net.java.html.canvas.Style; import net.java.html.canvas.spi.GraphicsEnvironment; import org.apidesign.bck2brwsr.core.JavaScriptBody; import org.apidesign.bck2brwsr.htmlpage.api.Canvas; +import org.apidesign.bck2brwsr.htmlpage.api.Element; /** * @@ -115,7 +118,7 @@ @Override public native void clearRect(double x, double y, double width, double height); - @JavaScriptBody(args = {"x", "y", "width", "height"}, body = "this._context().rectect(x,y,width,height);") + @JavaScriptBody(args = {"x", "y", "width", "height"}, body = "this._context().rect(x,y,width,height);") @Override public native void rect(double x, double y, double width, double height); @@ -147,29 +150,39 @@ @Override public native void scale(double x, double y); -//// @Override -//// public void drawImage(Image image, double x, double y) { -//// drawImageImpl(context, Element.getElementById((Image) image), x, y); -//// } -//// -//// @Override -//// public void drawImage(Image image, double x, double y, double width, double height) { -//// drawImageImpl(context, Element.getElementById((Image) image), x, y, width, height); -//// } -//// -//// @Override -//// public void drawImage(Image image, double sx, double sy, double sWidth, double sHeight, double x, double y, double width, double height) { -//// drawImageImpl(context, Element.getElementById((Image) image), sx, sy, sWidth, sHeight, x, y, width, height); -//// } -// -//// @JavaScriptBody(args = {"ctx", "img", "x", "y", "width", "height"}, body = "ctx.drawImage(img,x,y,width,height);") -//// private native static void drawImageImpl(Object ctx, Object img, double x, double y, double width, double height); -//// -//// @JavaScriptBody(args = {"ctx", "img", "sx", "sy", "swidth", "sheight", "x", "y", "width", "height"}, body = "ctx.drawImage(img,sx,sy,swidth,sheight,x,y,width,height);") -//// 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); -//// -//// @JavaScriptBody(args = {"ctx", "img", "x", "y"}, body = "ctx.drawImage(img,x,y);") -//// private native static void drawImageImpl(Object ctx, Object img, double x, double y); + @Override + public Object drawImage(Image image, double x, double y, Object nativeImage) { + if (nativeImage == null) { + nativeImage = createImage(image.getSrc()); + } + return drawImageImpl(context, nativeImage, x, y); + } + + @Override + public Object drawImage(Image image, double x, double y, double width, double height, Object nativeImage) { + if (nativeImage == null) { + nativeImage = createImage(image.getSrc()); + } + return drawImageImpl(context, nativeImage, x, y, width, height); + } + + @Override + public Object drawImage(Image image, double sx, double sy, double sWidth, double sHeight, double x, double y, double width, double height, Object nativeImage) { + if (nativeImage == null) { + nativeImage = createImage(image.getSrc()); + } + return drawImageImpl(context, nativeImage, sx, sy, sWidth, sHeight, x, y, width, height); + } + + @JavaScriptBody(args = {"ctx", "img", "x", "y", "width", "height"}, body = "ctx.drawImage(img,x,y,width,height); return img;") + private native static Object drawImageImpl(Object ctx, Object img, double x, double y, double width, double height); + + @JavaScriptBody(args = {"ctx", "img", "sx", "sy", "swidth", "sheight", "x", "y", "width", "height"}, body = "ctx.drawImage(img,sx,sy,swidth,sheight,x,y,width,height); return img;") + private native static Object drawImageImpl(Object ctx, Object img, double sx, double sy, double sWidth, double sHeight, double x, double y, double width, double height); + + @JavaScriptBody(args = {"ctx", "img", "x", "y"}, body = "ctx.drawImage(img,x,y); return img;") + private native static Object drawImageImpl(Object ctx, Object img, double x, double y); + public Object setFillStyle(Style style, Object nativeStyle) { if (nativeStyle == null) { nativeStyle = createNativeStyle(style); @@ -225,7 +238,7 @@ @Override public Object setStrokeStyle(Style style, Object nativeStyle) { - if (nativeStyle == null){ + if (nativeStyle == null) { nativeStyle = createNativeStyle(style); } setStrokeStyleImpl(context, nativeStyle); @@ -354,45 +367,46 @@ @Override public native void strokeText(String text, double x, double y, double maxWidth); -//// @Override -//// public ImageData createImageData(double x, double y) { -//// return new ImageDataWrapper(createImageDataImpl(x, y)); -//// } -//// -//// @JavaScriptBody(args = {"x", "y"}, -//// body = "return this._context().createImageData(x,y);") -//// private native Object createImageDataImpl(double x, double y); -//// -//// @Override -//// public ImageData createImageData(ImageData imageData) { -//// return new ImageDataWrapper(createImageDataImpl(imageData.getWidth(), imageData.getHeight())); -//// } -//// -//// @Override -//// public ImageData getImageData(double x, double y, double width, double height) { -//// return new ImageDataWrapper(getImageDataImpl(x, y, width, height)); -//// } -// -// @JavaScriptBody(args = {"x", "y", "width", "height"}, -// body = "return this._context().getImageData(x,y,width,height);") -// private native Object getImageDataImpl(double x, double y, double width, double height); -// -//// @Override -//// public void putImageData(ImageData imageData, double x, double y) { -//// putImageDataImpl(((ImageDataWrapper) imageData).object(), x, y); -//// } -//// -//// @JavaScriptBody(args = {"imageData", "x", "y"}, -//// body = "this._context().putImageData(imageData,x,y);") -//// private native void putImageDataImpl(Object imageData, double x, double y); -//// -//// @Override -//// public void putImageData(ImageData imageData, double x, double y, double dirtyx, double dirtyy, double dirtywidth, double dirtyheight) { -//// putImageDataImpl(((ImageDataWrapper) imageData).object(), x, y, dirtyx, dirtyy, dirtywidth, dirtyheight); -//// } + @Override + public ImageData createPixelMap(double x, double y) { + return new ImageDataWrapper(createPixelMapImpl(x, y)); + } + + @JavaScriptBody(args = {"x", "y"}, + body = "return this._context().createImageData(x,y);") + private native Object createPixelMapImpl(double x, double y); + + @Override + public ImageData createPixelMap(ImageData imageData) { + return new ImageDataWrapper(createPixelMapImpl(imageData.getWidth(), imageData.getHeight())); + } + + @Override + public ImageData getPixelMap(double x, double y, double width, double height) { + return new ImageDataWrapper(getPixelMapImpl(x, y, width, height)); + } + + @JavaScriptBody(args = {"x", "y", "width", "height"}, + body = "return this._context().getImageData(x,y,width,height);") + private native Object getPixelMapImpl(double x, double y, double width, double height); + + @Override + public void putPixelMap(ImageData imageData, double x, double y) { + putPixelMapImpl(((ImageDataWrapper) imageData).object(), x, y); + } + + @JavaScriptBody(args = {"imageData", "x", "y"}, + body = "this._context().putImageData(imageData,x,y);") + private native void putPixelMapImpl(Object imageData, double x, double y); + + @Override + public void putPixelMap(ImageData imageData, double x, double y, double dirtyx, double dirtyy, double dirtywidth, double dirtyheight) { + putPixelMapImpl(((ImageDataWrapper) imageData).object(), x, y, dirtyx, dirtyy, dirtywidth, dirtyheight); + } + @JavaScriptBody(args = {"imageData", "x", "y", "dirtyx", "dirtyy", "dirtywidth", "dirtyheight"}, body = "this._context().putImageData(imageData,x,y, dirtyx, dirtyy, dirtywidth,dirtyheight);") - private native void putImageDataImpl(Object imageData, double x, double y, double dirtyx, double dirtyy, double dirtywidth, double dirtyheight); + private native void putPixelMapImpl(Object imageData, double x, double y, double dirtyx, double dirtyy, double dirtywidth, double dirtyheight); @JavaScriptBody(args = {"alpha"}, body = "this._context().globalAlpha=alpha;") @Override @@ -417,12 +431,13 @@ @JavaScriptBody(args = {"context", "x0", "y0", "x1", "y1"}, body = "return context.createLinearGradient(x0,y0,x1,y1);") private native Object createLinearGradientImpl(Object context, double x0, double y0, double x1, double y1); -// public PatternWrapper createPatternWrapper(Image image, String repeat) { -// return new PatternWrapper(createPatternImpl(context, image, repeat)); -// } -// -// @JavaScriptBody(args = {"context", "image", "repeat"}, body = "return context.createPattern(image, repeat);") -// private static native Object createPatternImpl(Object context, Image image, String repeat); + public PatternWrapper createPatternWrapper(Image image, String repeat) { + return new PatternWrapper(createPatternImpl(context, image, repeat)); + } + + @JavaScriptBody(args = {"context", "image", "repeat"}, body = "return context.createPattern(image, repeat);") + private static native Object createPatternImpl(Object context, Image image, String repeat); + public RadialGradientWrapper createRadialGradientWrapper(double x0, double y0, double r0, double x1, double y1, double r1) { return new RadialGradientWrapper(createRadialGradientImpl(context, x0, y0, r0, x1, y1, r1)); } @@ -430,9 +445,9 @@ @JavaScriptBody(args = {"context", "x0", "y0", "r0", "x1", "y1", "r1"}, body = "return context.createRadialGradient(x0,y0,r0,x1,y1,r1);") private static native Object createRadialGradientImpl(Object context, double x0, double y0, double r0, double x1, double y1, double r1); -//// -//// @JavaScriptBody(args = {"path"}, body = "var b = new Image(); b.src=path; return b;") -//// public native Image getImageForPath(String path); + @JavaScriptBody(args = {"path"}, body = "var b = new Image(); b.src=path; return b;") + public native Image getImageForPath(String path); + @Override public int getHeight() { return canvas.getHeight(); @@ -452,4 +467,7 @@ public void setWidth(int width) { canvas.setWidth(width); } + + @JavaScriptBody(args = {"src"}, body = "var image = new Image(); image.src = src; return image;") + private static native Object createImage(String src); } diff -r 5bf850c5b7f1 -r 0e2c3676d77a javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/ImageDataWrapper.java --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/ImageDataWrapper.java Mon May 27 08:30:18 2013 +0200 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/ImageDataWrapper.java Mon May 27 08:30:30 2013 +0200 @@ -21,13 +21,14 @@ */ package org.apidesign.bck2brwsr.htmlpage; +import net.java.html.canvas.ImageData; import org.apidesign.bck2brwsr.core.JavaScriptBody; /** * * @author Anton Epple */ -public class ImageDataWrapper { +public class ImageDataWrapper implements ImageData{ private Object imageData; private Data data; @@ -64,6 +65,16 @@ return imageData; } + @Override + public int getPixel(double x, double y) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public void setPixel(double x, double y, int value) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + public static class Data { diff -r 5bf850c5b7f1 -r 0e2c3676d77a javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/api/Image.java --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/api/Image.java Mon May 27 08:30:18 2013 +0200 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/api/Image.java Mon May 27 08:30:30 2013 +0200 @@ -17,6 +17,7 @@ */ package org.apidesign.bck2brwsr.htmlpage.api; + /** * * @author Anton Epple