# HG changeset patch # User Anton Epple # Date 1369373866 -7200 # Node ID 94bd7330ff5804b3f1cfbdc54a4efe9e5472bf00 # Parent 964e42c9448d20c3fb84c04c4a63530a423e0a5f Added Dimension class to fix problem with TextMetrics diff -r 964e42c9448d -r 94bd7330ff58 javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/HTML5GraphicsEnvironment.java --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/HTML5GraphicsEnvironment.java Fri May 24 07:36:58 2013 +0200 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/HTML5GraphicsEnvironment.java Fri May 24 07:37:46 2013 +0200 @@ -17,19 +17,16 @@ */ package org.apidesign.bck2brwsr.htmlpage; -import java.awt.Dimension; import java.util.HashMap; import java.util.Set; -import net.java.html.canvas.GraphicsEnvironment; -import net.java.html.canvas.ImageData; +import net.java.html.canvas.Dimension; import net.java.html.canvas.LinearGradient; import net.java.html.canvas.Pattern; 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; -import org.apidesign.bck2brwsr.htmlpage.api.Image; /** * @@ -149,29 +146,29 @@ @Override public native void scale(double x, double y); - @Override - public void drawImage(ImageData image, double x, double y) { - drawImageImpl(context, Element.getElementById((Image) image), x, y); - } - - @Override - public void drawImage(ImageData image, double x, double y, double width, double height) { - drawImageImpl(context, Element.getElementById((Image) image), x, y, width, height); - } - - @Override - public void drawImage(ImageData 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 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); @JavaScriptBody(args = {"style"}, body = "this._context().fillStyle=style.valueOf();") @Override @@ -215,8 +212,9 @@ addColorStopImpl(style, double1, stops.get(double1)); } return gradient; - } else if (style instanceof Pattern) { - return createPatternWrapper(((Pattern) style).getImageData(), ((Pattern) style).getRepeat()); + } + else if (style instanceof Pattern) { +// return createPatternWrapper(((Pattern) style).getImage(), ((Pattern) style).getRepeat()); } return null; } @@ -334,6 +332,7 @@ public native void setTextBaseline(String textbaseline); @JavaScriptBody(args = {"text", "x", "y"}, body = "this._context().fillText(text,x,y);") +// @JavaScriptBody(args = {"text", "x", "y"}, body = "console.log(text);") @Override public native void fillText(String text, double x, double y); @@ -344,8 +343,8 @@ @Override public Dimension measureText(String text) { - TextMetrics textMetrics = new TextMetrics(measureTextImpl(text)); - return new Dimension((int) textMetrics.getWidth(), (int) textMetrics.getHeight()); + measureTextImpl(text); + return new Dimension(1,1); } @JavaScriptBody(args = {"text"}, @@ -360,42 +359,42 @@ @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)); -// } +//// @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"}, -// body = "return this._context().createImageData(x,y);") -// private native Object createImageDataImpl(double x, double y); +// @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 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 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); +//// } @JavaScriptBody(args = {"imageData", "x", "y", "dirtyx", "dirtyy", "dirtywidth", "dirtyheight"}, body = "this._context().putImageData(imageData,x,y, dirtyx, dirtyy, dirtywidth,dirtyheight);") @@ -424,12 +423,12 @@ @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(ImageData 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, ImageData 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)); @@ -438,9 +437,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); diff -r 964e42c9448d -r 94bd7330ff58 javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/api/Canvas.java --- a/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/api/Canvas.java Fri May 24 07:36:58 2013 +0200 +++ b/javaquery/api/src/main/java/org/apidesign/bck2brwsr/htmlpage/api/Canvas.java Fri May 24 07:37:46 2013 +0200 @@ -17,9 +17,9 @@ */ package org.apidesign.bck2brwsr.htmlpage.api; -import org.apidesign.bck2brwsr.htmlpage.HTML5GraphicsEnvironment; import net.java.html.canvas.GraphicsContext; import org.apidesign.bck2brwsr.core.JavaScriptBody; +import org.apidesign.bck2brwsr.htmlpage.HTML5GraphicsEnvironment; import static org.apidesign.bck2brwsr.htmlpage.api.Element.getAttribute; /** @@ -30,7 +30,6 @@ public Canvas(String id) { super(id); - System.out.println("created Canvas"); } public void setHeight(int height) { @@ -58,7 +57,7 @@ private native static Object getContextImpl(Canvas el); public GraphicsContext getContext() { - System.err.println("called getContext"); +// System.err.println("called getContext"); return new GraphicsContext(new HTML5GraphicsEnvironment(getContextImpl(this), this)); } diff -r 964e42c9448d -r 94bd7330ff58 javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/ProcessPageTest.java --- a/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/ProcessPageTest.java Fri May 24 07:36:58 2013 +0200 +++ b/javaquery/api/src/test/java/org/apidesign/bck2brwsr/htmlpage/ProcessPageTest.java Fri May 24 07:37:46 2013 +0200 @@ -17,11 +17,8 @@ */ package org.apidesign.bck2brwsr.htmlpage; -import java.io.File; -import java.io.FileReader; import java.io.IOException; import java.io.InputStream; -import java.io.PrintWriter; import java.util.Set; import javax.script.Invocable; import javax.script.ScriptEngine; @@ -34,7 +31,7 @@ public class ProcessPageTest { - @Test public void findsThreeIds() throws IOException { + @Test public void findsFourIds() throws IOException { InputStream is = ProcessPageTest.class.getResourceAsStream("TestPage.html"); assertNotNull(is, "Sample HTML page found"); ProcessPage res = ProcessPage.readPage(is); @@ -88,95 +85,95 @@ assertEquals(ret, "You want this window to be named something", "We expect that the JavaCode performs all the wiring"); } -// @Test public void clickWithArgumentCalled() throws Exception { -// StringBuilder sb = new StringBuilder(); -// sb.append( -// "var window = new Object();\n" -// + "var doc = new Object();\n" -// + "doc.button = new Object();\n" -// + "doc.title = new Object();\n" -// + "doc.title.innerHTML = 'nothing';\n" -// + "doc.text = new Object();\n" -// + "doc.text.value = 'something';\n" -// + "doc.canvas = new Object();\n" -// + "doc.getElementById = function(id) {\n" -// + " switch(id) {\n" -// + " case 'pg.button': return doc.button;\n" -// + " case 'pg.title': return doc.title;\n" -// + " case 'pg.text': return doc.text;\n" -// + " case 'pg.canvas': return doc.canvas;\n" -// + " }\n" -// + " throw id;\n" -// + " }\n" -// + "\n" -// + "function clickAndCheck() {\n" -// + " doc.title.onclick();\n" -// + " return doc.title.innerHTML.toString();\n" -// + "};\n" -// + "\n" -// + "window.document = doc;\n" -// ); -// Invocable i = compileClass(sb, -// "org/apidesign/bck2brwsr/htmlpage/PageController" -// ); -// -// Object ret = null; -// try { -// ret = i.invokeFunction("clickAndCheck"); -// } catch (ScriptException ex) { -// fail("Execution failed in " + sb, ex); -// } catch (NoSuchMethodException ex) { -// fail("Cannot find method in " + sb, ex); -// } -// assertEquals(ret, "pg.title", "Title has been passed to the method argument"); -// } + @Test public void clickWithArgumentCalled() throws Exception { + StringBuilder sb = new StringBuilder(); + sb.append( + "var window = new Object();\n" + + "var doc = new Object();\n" + + "doc.button = new Object();\n" + + "doc.title = new Object();\n" + + "doc.title.innerHTML = 'nothing';\n" + + "doc.text = new Object();\n" + + "doc.text.value = 'something';\n" + + "doc.canvas = new Object();\n" + + "doc.getElementById = function(id) {\n" + + " switch(id) {\n" + + " case 'pg.button': return doc.button;\n" + + " case 'pg.title': return doc.title;\n" + + " case 'pg.text': return doc.text;\n" + + " case 'pg.canvas': return doc.canvas;\n" + + " }\n" + + " throw id;\n" + + " }\n" + + "\n" + + "function clickAndCheck() {\n" + + " doc.title.onclick();\n" + + " return doc.title.innerHTML.toString();\n" + + "};\n" + + "\n" + + "window.document = doc;\n" + ); + Invocable i = compileClass(sb, + "org/apidesign/bck2brwsr/htmlpage/PageController" + ); -// @Test public void clickWithArgumentAndParameterCalled() throws Exception { -// StringBuilder sb = new StringBuilder(); -// sb.append( -// "var window = new Object();\n" -// + "var doc = new Object();\n" -// + "var eventObject = new Object();\n" -// + "eventObject.layerX = 100;\n" -// + "doc.button = new Object();\n" -// + "doc.title = new Object();\n" -// + "doc.title.innerHTML = 'nothing';\n" -// + "doc.text = new Object();\n" -// + "doc.text.value = 'something';\n" -// + "doc.canvas = new Object();\n" -// + "doc.canvas.width = 200;\n" -// + "doc.getElementById = function(id) {\n" -// + " switch(id) {\n" -// + " case 'pg.button': return doc.button;\n" -// + " case 'pg.title': return doc.title;\n" -// + " case 'pg.text': return doc.text;\n" -// + " case 'pg.canvas': return doc.canvas;\n" -// + " }\n" -// + " throw id;\n" -// + " }\n" -// + "\n" -// + "function clickAndCheck() {\n" -// + " doc.canvas.onclick(eventObject);\n" -// + " return doc.canvas.width.toString();\n" -// + "};\n" -// + "\n" -// + "window.document = doc;\n" -// ); -// Invocable i = compileClass(sb, -// "org/apidesign/bck2brwsr/htmlpage/PageController" -// ); -// -// Object ret = null; -// try { -// ret = i.invokeFunction("clickAndCheck"); -// } catch (ScriptException ex) { -// fail("Execution failed in " + sb, ex); -// } catch (NoSuchMethodException ex) { -// fail("Cannot find method in " + sb, ex); -// } -// assertEquals(ret, "100", "layerX has been passed to the method argument"); -// } -// + Object ret = null; + try { + ret = i.invokeFunction("clickAndCheck"); + } catch (ScriptException ex) { + fail("Execution failed in " + sb, ex); + } catch (NoSuchMethodException ex) { + fail("Cannot find method in " + sb, ex); + } + assertEquals(ret, "pg.title", "Title has been passed to the method argument"); + } + + @Test public void clickWithArgumentAndParameterCalled() throws Exception { + StringBuilder sb = new StringBuilder(); + sb.append( + "var window = new Object();\n" + + "var doc = new Object();\n" + + "var eventObject = new Object();\n" + + "eventObject.layerX = 100;\n" + + "doc.button = new Object();\n" + + "doc.title = new Object();\n" + + "doc.title.innerHTML = 'nothing';\n" + + "doc.text = new Object();\n" + + "doc.text.value = 'something';\n" + + "doc.canvas = new Object();\n" + + "doc.canvas.width = 200;\n" + + "doc.getElementById = function(id) {\n" + + " switch(id) {\n" + + " case 'pg.button': return doc.button;\n" + + " case 'pg.title': return doc.title;\n" + + " case 'pg.text': return doc.text;\n" + + " case 'pg.canvas': return doc.canvas;\n" + + " }\n" + + " throw id;\n" + + " }\n" + + "\n" + + "function clickAndCheck() {\n" + + " doc.canvas.onclick(eventObject);\n" + + " return doc.canvas.width.toString();\n" + + "};\n" + + "\n" + + "window.document = doc;\n" + ); + Invocable i = compileClass(sb, + "org/apidesign/bck2brwsr/htmlpage/PageController" + ); + + Object ret = null; + try { + ret = i.invokeFunction("clickAndCheck"); + } catch (ScriptException ex) { + fail("Execution failed in " + sb, ex); + } catch (NoSuchMethodException ex) { + fail("Cannot find method in " + sb, ex); + } + assertEquals(ret, "100", "layerX has been passed to the method argument"); + } + static Invocable compileClass(StringBuilder sb, String... names) throws ScriptException, IOException { if (sb == null) { @@ -195,11 +192,6 @@ assertTrue(js instanceof Invocable, "It is invocable object: " + res); return (Invocable) js; } catch (ScriptException ex) { -// System.err.println("ex "+ex+ " col "+ex.getColumnNumber()); -// PrintWriter out = new PrintWriter("filename.txt"); -// out.println(sb.toString()); -// out.flush(); -// out.close(); fail("Could not compile:\n" , ex); return null; }