diff --git a/vtm-gdx-html/src/org/oscim/gdx/client/GwtBitmap.java b/vtm-gdx-html/src/org/oscim/gdx/client/GwtBitmap.java
index 021ed748..c4fd57cf 100644
--- a/vtm-gdx-html/src/org/oscim/gdx/client/GwtBitmap.java
+++ b/vtm-gdx-html/src/org/oscim/gdx/client/GwtBitmap.java
@@ -1,8 +1,10 @@
package org.oscim.gdx.client;
+import org.oscim.backend.Log;
import org.oscim.backend.canvas.Bitmap;
import com.badlogic.gdx.Gdx;
+import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.Pixmap;
import com.google.gwt.dom.client.ImageElement;
@@ -10,28 +12,39 @@ import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.RootPanel;
public class GwtBitmap implements Bitmap {
- Pixmap bitmap;
+ Pixmap pixmap;
Image image;
-
+ boolean disposable;
public GwtBitmap(Image data) {
ImageElement imageElement = ImageElement.as(data.getElement());
- bitmap = new Pixmap(imageElement);
+ pixmap = new Pixmap(imageElement);
image = data;
}
+ /** always argb8888 */
+ public GwtBitmap(int width, int height, int format) {
+ pixmap = new Pixmap(width, height, null);
+ }
+
+ public GwtBitmap(String fileName) {
+ FileHandle handle = Gdx.files.internal(fileName);
+ pixmap = new Pixmap(handle);
+ disposable = true;
+ }
+
@Override
public int getWidth() {
- return bitmap.getWidth();
+ return pixmap.getWidth();
}
@Override
public int getHeight() {
- return bitmap.getHeight();
+ return pixmap.getHeight();
}
@Override
public void recycle() {
- bitmap.dispose();
+ pixmap.dispose();
}
@Override
@@ -46,14 +59,18 @@ public class GwtBitmap implements Bitmap {
@Override
public int uploadToTexture(boolean replace) {
- Gdx.gl.glTexImage2D(GL10.GL_TEXTURE_2D, 0, bitmap.getGLInternalFormat(), bitmap.getWidth(),
- bitmap.getHeight(), 0,
- bitmap.getGLFormat(), bitmap.getGLType(), bitmap.getPixels());
+ Gdx.gl.glTexImage2D(GL10.GL_TEXTURE_2D, 0, pixmap.getGLInternalFormat(), pixmap.getWidth(),
+ pixmap.getHeight(), 0,
+ pixmap.getGLFormat(), pixmap.getGLType(), pixmap.getPixels());
- bitmap.dispose();
- if (image != null)
- RootPanel.get().remove(image);
+ if (disposable || image != null){
+ Log.d("", "dispose pixmap " +getWidth() +"/" + getHeight());
+ pixmap.dispose();
+
+ if (image != null)
+ RootPanel.get().remove(image);
+ }
return 1;
}
diff --git a/vtm-gdx-html/src/org/oscim/gdx/client/GwtCanvas.java b/vtm-gdx-html/src/org/oscim/gdx/client/GwtCanvas.java
new file mode 100644
index 00000000..395f6bd3
--- /dev/null
+++ b/vtm-gdx-html/src/org/oscim/gdx/client/GwtCanvas.java
@@ -0,0 +1,49 @@
+package org.oscim.gdx.client;
+
+import org.oscim.backend.Log;
+import org.oscim.backend.canvas.Bitmap;
+import org.oscim.backend.canvas.Paint;
+
+import com.google.gwt.canvas.dom.client.Context2d;
+
+public class GwtCanvas implements org.oscim.backend.canvas.Canvas {
+ GwtBitmap bitmap;
+ public GwtCanvas() {
+ // canvas comes with gdx pixmap
+ }
+
+ @Override
+ public void setBitmap(Bitmap bitmap) {
+ this.bitmap = (GwtBitmap) bitmap;
+ this.bitmap.pixmap.setColor(0);
+ this.bitmap.pixmap.getContext().clearRect(0, 0, this.bitmap.getWidth(), this.bitmap.getHeight());
+ }
+
+ @Override
+ public void drawText(String string, float x, float y, Paint paint) {
+ if (bitmap == null){
+ Log.d("", "no bitmap set on canvas");
+ }
+
+ GwtPaint p = (GwtPaint) paint;
+ Context2d ctx = bitmap.pixmap.getContext();
+ ctx.setFont(p.font);
+
+ if (p.stroke){
+ Log.d("", "stroke " + p.stroke + " " + p.color + " " + p.font + " "+ string);
+ ctx.setStrokeStyle(p.color);
+ ctx.strokeText(string, x, y);
+ } else{
+ Log.d("", "fill " + p.stroke + " " + p.color + " " + p.font + " "+ string);
+ ctx.setFillStyle(p.color);
+ ctx.fillText(string, x, y);
+ }
+ }
+
+ @Override
+ public void drawBitmap(Bitmap bitmap, float x, float y) {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/vtm-gdx-html/src/org/oscim/gdx/client/GwtCanvasAdapter.java b/vtm-gdx-html/src/org/oscim/gdx/client/GwtCanvasAdapter.java
index a7732b72..7913d450 100644
--- a/vtm-gdx-html/src/org/oscim/gdx/client/GwtCanvasAdapter.java
+++ b/vtm-gdx-html/src/org/oscim/gdx/client/GwtCanvasAdapter.java
@@ -4,17 +4,40 @@ import java.io.InputStream;
import org.oscim.backend.CanvasAdapter;
import org.oscim.backend.canvas.Bitmap;
-import org.oscim.backend.canvas.Canvas;
import org.oscim.backend.canvas.Paint;
+import com.google.gwt.canvas.client.Canvas;
+import com.google.gwt.canvas.dom.client.Context2d;
+import com.google.gwt.canvas.dom.client.TextMetrics;
+
public class GwtCanvasAdapter extends CanvasAdapter {
+ public static final GwtCanvasAdapter INSTANCE = new GwtCanvasAdapter();
+ static final Context2d ctx;
+ static {
+ Canvas canvas = Canvas.createIfSupported();
+ canvas.setCoordinateSpaceWidth(1);
+ canvas.setCoordinateSpaceHeight(1);
+ ctx = canvas.getContext2d();
+ }
+
+ static synchronized float getTextWidth(String text, String font) {
+ ctx.setFont(font);
+ TextMetrics tm = ctx.measureText(text);
+ return (float)tm.getWidth();
+ }
+
@Override
public Bitmap decodeBitmap(InputStream in) {
-
+ //ImageData data = new ImageData();
return null;
}
+ @Override
+ public Bitmap loadBitmapAsset(String fileName) {
+ return new GwtBitmap(fileName);
+ }
+
@Override
public int getColor(Color color) {
// TODO Auto-generated method stub
@@ -23,8 +46,7 @@ public class GwtCanvasAdapter extends CanvasAdapter {
@Override
public Paint getPaint() {
- // TODO Auto-generated method stub
- return null;
+ return new GwtPaint();
}
@Override
@@ -35,14 +57,12 @@ public class GwtCanvasAdapter extends CanvasAdapter {
@Override
public Bitmap getBitmap(int width, int height, int format) {
- // TODO Auto-generated method stub
- return null;
+ return new GwtBitmap(width, height, format);
}
@Override
- public Canvas getCanvas() {
- // TODO Auto-generated method stub
- return null;
+ public org.oscim.backend.canvas.Canvas getCanvas() {
+ return new GwtCanvas();
}
}
diff --git a/vtm-gdx-html/src/org/oscim/gdx/client/GwtPaint.java b/vtm-gdx-html/src/org/oscim/gdx/client/GwtPaint.java
new file mode 100644
index 00000000..7e4896e1
--- /dev/null
+++ b/vtm-gdx-html/src/org/oscim/gdx/client/GwtPaint.java
@@ -0,0 +1,100 @@
+package org.oscim.gdx.client;
+
+import org.oscim.backend.canvas.Bitmap;
+import org.oscim.backend.canvas.Paint;
+
+import com.badlogic.gdx.graphics.Pixmap;
+
+public class GwtPaint implements Paint {
+
+ String color;
+ boolean stroke;
+
+ float strokeWidth;
+ float fontSize;
+ Align mAlign;
+
+ String font = "15px sans-serif";
+
+ //private int cap;
+
+ @Override
+ public int getColor() {
+ return 0;
+ }
+
+ @Override
+ public int getTextHeight(String text) {
+ return 0;
+ }
+
+ @Override
+ public int getTextWidth(String text) {
+ return 0;
+ }
+
+ @Override
+ public void setBitmapShader(Bitmap bitmap) {
+ }
+
+ @Override
+ public void setColor(int color) {
+ float a = ((color >>> 24) & 0xff) / 255f;
+ int r = (color >>> 16) & 0xff;
+ int g = (color >>> 8) & 0xff;
+ int b = (color & 0xff) ;
+
+ this.color = Pixmap.make(r, g, b, a);
+ }
+
+ @Override
+ public void setDashPathEffect(float[] strokeDasharray) {
+ }
+
+ @Override
+ public void setStrokeCap(Cap cap) {
+ stroke = true;
+ // TODO
+ }
+
+ @Override
+ public void setStrokeWidth(float width) {
+ stroke = true;
+ strokeWidth = width;
+ }
+
+ @Override
+ public void setStyle(Style style) {
+ }
+
+ @Override
+ public void setTextAlign(Align align) {
+ mAlign = align;
+ }
+
+ @Override
+ public void setTextSize(float size) {
+ fontSize = size;
+ }
+
+ @Override
+ public void setTypeface(FontFamily fontFamily, FontStyle fontStyle) {
+
+ }
+
+ @Override
+ public float measureText(String text) {
+ return GwtCanvasAdapter.getTextWidth(text, font);
+ }
+
+ @Override
+ public float getFontHeight() {
+ return 16;
+ }
+
+ @Override
+ public float getFontDescent() {
+ return 4;
+ }
+
+}