# HG changeset patch # User Anton Epple # Date 1378571109 -7200 # Node ID 088331d4cb76cbbc2a265dcbc29cb3a9cb11e921 # Parent bbc756ef9a73e7c02226d499e09628ba51e2de17 changes to canvas and graphicsenv to support additional methods fillPolygon and mergeImages diff -r bbc756ef9a73 -r 088331d4cb76 javaquery/canvas/src/main/java/net/java/html/canvas/GraphicsContext.java --- a/javaquery/canvas/src/main/java/net/java/html/canvas/GraphicsContext.java Sat Sep 07 18:10:35 2013 +0200 +++ b/javaquery/canvas/src/main/java/net/java/html/canvas/GraphicsContext.java Sat Sep 07 18:25:09 2013 +0200 @@ -151,6 +151,19 @@ Object nativeImage = graphicsEnvironmentImpl.drawImage(image, sx, sy, sWidth, sHeight, x, y, width, height, image.getCached()); image.cache(nativeImage); } + + public Image merge(Image a, Image b){ + if(a.getCached()==null){ + drawImage(a, 0, 0); + } + if(b.getCached()==null){ + drawImage(b, 0, 0); + } + Object nativeImage = graphicsEnvironmentImpl.mergeImages(a,b,a.getCached(),b.getCached()); + Image merged = Image.create("should add real path here"); + merged.cache(nativeImage); + return merged; + } public void setShadowColor(String color){ graphicsEnvironmentImpl.setShadowColor(color); @@ -322,10 +335,6 @@ return new Style.Color(webColor); } - public Image getImageForPath(String path){ - return new net.java.html.canvas.Image(path); - } - public int getHeight(){ return graphicsEnvironmentImpl.getHeight(); } @@ -341,4 +350,23 @@ public void setWidth(int width){ graphicsEnvironmentImpl.setWidth(width); } + + public void fillCircle(float centerX, float centerY, float radius) { + graphicsEnvironmentImpl.arc(centerX, centerY, radius, 0, Math.PI*2, false); + } + + public void fillPolygon(double[] x_coord, double[] y_coord, int vertexCount) { + if (vertexCount >=1&&x_coord!=null && x_coord.length>=vertexCount && y_coord!=null && y_coord.length>=vertexCount) + graphicsEnvironmentImpl.beginPath(); + graphicsEnvironmentImpl.moveTo(x_coord[0], y_coord[0]); + for (int i = 1; i < vertexCount; i++) { + graphicsEnvironmentImpl.lineTo(x_coord[i], y_coord[i]); + + } + graphicsEnvironmentImpl.closePath(); + graphicsEnvironmentImpl.fill(); + graphicsEnvironmentImpl.stroke(); + + + } } diff -r bbc756ef9a73 -r 088331d4cb76 javaquery/canvas/src/main/java/net/java/html/canvas/Image.java --- a/javaquery/canvas/src/main/java/net/java/html/canvas/Image.java Sat Sep 07 18:10:35 2013 +0200 +++ b/javaquery/canvas/src/main/java/net/java/html/canvas/Image.java Sat Sep 07 18:25:09 2013 +0200 @@ -18,6 +18,8 @@ package net.java.html.canvas; import java.util.Objects; +import java.util.ServiceLoader; +import net.java.html.canvas.spi.GraphicsEnvironment; /** * Image represents an Image Resource defined by a path. @@ -30,13 +32,17 @@ private Object cached; private int cacheHash; - Image(String src) { + public static Image create(String src) { + return new Image(src); + } + + private Image(String src) { this.src = src; } void cache(Object toCache) { + this.cached = toCache; cacheHash = hashCode(); - this.cached = toCache; } private boolean isCached() { @@ -51,10 +57,30 @@ return src; } + public int getWidth() { + ServiceLoader loader = ServiceLoader.load(GraphicsEnvironment.class); + GraphicsEnvironment ge = null; + for (GraphicsEnvironment graphicsEnvironment : loader) { + ge = graphicsEnvironment; + break; + } + return ge.getWidth(this, cached); + } + + public int getHeight() { + ServiceLoader loader = ServiceLoader.load(GraphicsEnvironment.class); + GraphicsEnvironment ge = null; + for (GraphicsEnvironment graphicsEnvironment : loader) { + ge = graphicsEnvironment; + break; + } + return ge.getHeight(this, cached); + } + @Override public int hashCode() { int hash = 7; - hash = 59 * hash + Objects.hashCode(this.src) ^ (cached==null? 1231 : 1237); + hash = 59 * hash + Objects.hashCode(this.src) ^ (cached == null ? 1231 : 1237); return hash; } @@ -70,10 +96,9 @@ if (!Objects.equals(this.src, other.src)) { return false; } - if ((cached==null) != (other.getCached()==null)){ + if ((cached == null) != (other.getCached() == null)) { return false; } return true; } - } diff -r bbc756ef9a73 -r 088331d4cb76 javaquery/canvas/src/main/java/net/java/html/canvas/spi/GraphicsEnvironment.java --- a/javaquery/canvas/src/main/java/net/java/html/canvas/spi/GraphicsEnvironment.java Sat Sep 07 18:10:35 2013 +0200 +++ b/javaquery/canvas/src/main/java/net/java/html/canvas/spi/GraphicsEnvironment.java Sat Sep 07 18:25:09 2013 +0200 @@ -90,7 +90,13 @@ public Object drawImage(Image image, double sx, double sy, double sWidth, double sHeight, double x, double y, double width, double height, Object nativeImage); - + + public int getWidth(Image image, Object nativeImage); + + public int getHeight(Image image, Object nativeImage); + + + /** * When implementing you can return an Object of your choice to enable * caching. Returning null means no caching. When caching is enabled, and @@ -196,4 +202,6 @@ public void setHeight(int height); public void setWidth(int width); + + public Object mergeImages(Image a, Image b, Object cachedA, Object cachedB); }