changes to canvas and graphicsenv to support additional methods fillPolygon and mergeImages
2 * Back 2 Browser Bytecode Translator Copyright (C) 2012 Jaroslav Tulach
3 * <jaroslav.tulach@apidesign.org>
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.
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
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.
18 package net.java.html.canvas;
20 import net.java.html.canvas.Style.Color;
21 import net.java.html.canvas.Style.LinearGradient;
22 import net.java.html.canvas.Style.Pattern;
23 import net.java.html.canvas.Style.RadialGradient;
24 import net.java.html.canvas.spi.GraphicsEnvironment;
27 * A 2D Graphics Context similar to HTML5 or JavaFX GraphicsContext.
28 * Use this to paint on your Canvas.s
31 public final class GraphicsContext {
33 GraphicsEnvironment graphicsEnvironmentImpl;
35 public GraphicsContext(GraphicsEnvironment graphicsEnvironment) {
36 this.graphicsEnvironmentImpl = graphicsEnvironment;
39 public void arc(double centerX,
45 graphicsEnvironmentImpl.arc(centerX, centerY, startAngle, radius, endAngle, ccw);
48 public void arcTo(double x1,
53 graphicsEnvironmentImpl.arcTo(x1, y1, x2, y2, r);
56 public boolean isPointInPath(double x, double y) {
57 return graphicsEnvironmentImpl.isPointInPath(x, y);
61 graphicsEnvironmentImpl.fill();
64 public void stroke() {
65 graphicsEnvironmentImpl.stroke();
68 public void beginPath() {
69 graphicsEnvironmentImpl.beginPath();
72 public void closePath(){
73 graphicsEnvironmentImpl.closePath();
77 graphicsEnvironmentImpl.clip();
80 public void moveTo(double x, double y){
81 graphicsEnvironmentImpl.moveTo(x, y);
84 public void lineTo(double x, double y){
85 graphicsEnvironmentImpl.lineTo(x, y);
88 public void quadraticCurveTo(double cpx, double cpy, double x, double y){
89 graphicsEnvironmentImpl.quadraticCurveTo(cpx, cpy, x, y);
92 public void bezierCurveTo(double cp1x, double cp1y, double cp2x, double cp2y, double x, double y){
93 graphicsEnvironmentImpl.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);
96 public void fillRect(double x, double y, double width, double height){
97 graphicsEnvironmentImpl.fillRect(x, y, width, height);
100 public void strokeRect(double x, double y, double width, double height){
101 graphicsEnvironmentImpl.strokeRect(x, y, width, height);
104 public void clearRect(double x, double y, double width, double height){
105 graphicsEnvironmentImpl.clearRect(x, y, width, height);
108 public void rect(double x, double y, double width, double height){
109 graphicsEnvironmentImpl.rect(x, y, width, height);
113 graphicsEnvironmentImpl.save();
116 public void restore(){
117 graphicsEnvironmentImpl.restore();
120 public void rotate(double angle){
121 graphicsEnvironmentImpl.rotate(angle);
124 public void transform(double a, double b, double c, double d, double e, double f){
125 graphicsEnvironmentImpl.transform(a, b, c, d, e, f);
128 public void setTransform(double a, double b, double c, double d, double e, double f){
129 graphicsEnvironmentImpl.setTransform(a, b, c, d, e, f);
132 public void translate(double x, double y){
133 graphicsEnvironmentImpl.translate(x, y);
136 public void scale(double x, double y){
137 graphicsEnvironmentImpl.scale(x, y);
140 public void drawImage(Image image, double x, double y){
141 Object nativeImage = graphicsEnvironmentImpl.drawImage(image, x, y, image.getCached());
142 image.cache(nativeImage);
145 public void drawImage(Image image, double x, double y, double width, double height){
146 Object nativeImage = graphicsEnvironmentImpl.drawImage(image, x, y, width, height, image.getCached());
147 image.cache(nativeImage);
150 public void drawImage(Image image, double sx, double sy, double sWidth, double sHeight, double x, double y, double width, double height){
151 Object nativeImage = graphicsEnvironmentImpl.drawImage(image, sx, sy, sWidth, sHeight, x, y, width, height, image.getCached());
152 image.cache(nativeImage);
155 public Image merge(Image a, Image b){
156 if(a.getCached()==null){
159 if(b.getCached()==null){
162 Object nativeImage = graphicsEnvironmentImpl.mergeImages(a,b,a.getCached(),b.getCached());
163 Image merged = Image.create("should add real path here");
164 merged.cache(nativeImage);
168 public void setShadowColor(String color){
169 graphicsEnvironmentImpl.setShadowColor(color);
172 public void setShadowBlur(double blur){
173 graphicsEnvironmentImpl.setShadowBlur(blur);
176 public void setShadowOffsetX(double x){
177 graphicsEnvironmentImpl.setShadowOffsetX(x);
180 public void setShadowOffsetY(double y){
181 graphicsEnvironmentImpl.setShadowOffsetY(y);
184 public String getShadowColor(){
185 return graphicsEnvironmentImpl.getShadowColor();
188 public double getShadowBlur(){
189 return graphicsEnvironmentImpl.getShadowBlur();
192 public double getShadowOffsetX(){
193 return graphicsEnvironmentImpl.getShadowOffsetX();
196 public double getShadowOffsetY(){
197 return graphicsEnvironmentImpl.getShadowOffsetY();
200 public String getLineCap(){
201 return graphicsEnvironmentImpl.getLineCap();
204 public void setLineCap(String style){
205 graphicsEnvironmentImpl.setLineCap(style);
208 public String getLineJoin(){
209 return graphicsEnvironmentImpl.getLineJoin();
212 public void setLineJoin(String style){
213 graphicsEnvironmentImpl.setLineJoin(style);
216 public double getLineWidth(){
217 return graphicsEnvironmentImpl.getLineWidth();
220 public void setLineWidth(double width){
221 graphicsEnvironmentImpl.setLineWidth(width);
224 public double getMiterLimit(){
225 return graphicsEnvironmentImpl.getMiterLimit();
228 public void setMiterLimit(double limit){
229 graphicsEnvironmentImpl.setMiterLimit(limit);
232 public void setFillStyle(Style style){
233 Object nativeFillStyle = graphicsEnvironmentImpl.setFillStyle(style, style.getCached());
234 style.cache(nativeFillStyle);
237 public String getFont(){
238 return graphicsEnvironmentImpl.getFont();
241 public void setFont(String font){
242 graphicsEnvironmentImpl.setFont(font);
245 public void setStrokeStyle(Style style){
246 Object nativeStrokeStyle = graphicsEnvironmentImpl.setStrokeStyle(style, style.getCached());
247 style.cache(nativeStrokeStyle);
250 public String getTextAlign(){
251 return graphicsEnvironmentImpl.getTextAlign();
254 public void setTextAlign(String textAlign){
255 graphicsEnvironmentImpl.setTextAlign(textAlign);
258 public String getTextBaseline(){
259 return graphicsEnvironmentImpl.getTextBaseline();
262 public void setTextBaseline(String textbaseline){
263 graphicsEnvironmentImpl.setTextBaseline(textbaseline);
266 public void fillText(String text, double x, double y){
267 graphicsEnvironmentImpl.fillText(text, x, y);
270 public void fillText(String text, double x, double y, double maxWidth){
271 graphicsEnvironmentImpl.fillText(text, x, y, maxWidth);
274 public Dimension measureText(String text){
275 return graphicsEnvironmentImpl.measureText(text);
278 public void strokeText(String text, double x, double y){
279 graphicsEnvironmentImpl.strokeText(text, x, y);
282 public void strokeText(String text, double x, double y, double maxWidth){
283 graphicsEnvironmentImpl.strokeText(text, x, y, maxWidth);
286 public ImageData createPixelMap(double x, double y){
287 return graphicsEnvironmentImpl.createPixelMap(x, y);
290 public ImageData createPixelMap(ImageData pixelMap){
291 return graphicsEnvironmentImpl.createPixelMap(pixelMap);
294 public ImageData getSnapshot(double x, double y, double width, double height){
295 return graphicsEnvironmentImpl.getPixelMap(x, y, width, height);
298 public void drawPixelMap(ImageData pixelMap, double x, double y){
299 graphicsEnvironmentImpl.putPixelMap(pixelMap, x, y);
302 public void drawPixelMap(ImageData pixelMap, double x, double y, double dirtyx, double dirtyy, double dirtywidth, double dirtyheight){
303 graphicsEnvironmentImpl.putPixelMap(pixelMap, x, y, dirtyx, dirtyy, dirtywidth, dirtyheight);
306 public void setGlobalAlpha(double alpha){
307 graphicsEnvironmentImpl.setGlobalAlpha(alpha);
310 public double getGlobalAlpha(){
311 return graphicsEnvironmentImpl.getGlobalAlpha();
314 public void setGlobalCompositeOperation(String operation){
315 graphicsEnvironmentImpl.setGlobalCompositeOperation(operation);
318 public String getGlobalCompositeOperation(){
319 return graphicsEnvironmentImpl.getGlobalCompositeOperation();
322 public LinearGradient createLinearGradient(double x0, double y0, double x1, double y1){
323 return new Style.LinearGradient(x0, y0, x1, y1);
326 public Pattern createPattern(Image image, String repeat){
327 return new Pattern(image, repeat);
330 public RadialGradient createRadialGradient(double x0, double y0, double r0, double x1, double y1, double r1){
331 return new RadialGradient(x0, y0, r0, x1, y1, r1);
334 public Color getWebColor(String webColor){
335 return new Style.Color(webColor);
338 public int getHeight(){
339 return graphicsEnvironmentImpl.getHeight();
342 public int getWidth(){
343 return graphicsEnvironmentImpl.getWidth();
346 public void setHeight(int height){
347 graphicsEnvironmentImpl.setHeight(height);
350 public void setWidth(int width){
351 graphicsEnvironmentImpl.setWidth(width);
354 public void fillCircle(float centerX, float centerY, float radius) {
355 graphicsEnvironmentImpl.arc(centerX, centerY, radius, 0, Math.PI*2, false);
358 public void fillPolygon(double[] x_coord, double[] y_coord, int vertexCount) {
359 if (vertexCount >=1&&x_coord!=null && x_coord.length>=vertexCount && y_coord!=null && y_coord.length>=vertexCount)
360 graphicsEnvironmentImpl.beginPath();
361 graphicsEnvironmentImpl.moveTo(x_coord[0], y_coord[0]);
362 for (int i = 1; i < vertexCount; i++) {
363 graphicsEnvironmentImpl.lineTo(x_coord[i], y_coord[i]);
366 graphicsEnvironmentImpl.closePath();
367 graphicsEnvironmentImpl.fill();
368 graphicsEnvironmentImpl.stroke();