Gwt wrapper

This commit is contained in:
Hannes Janetzek 2013-06-28 04:29:57 +02:00
parent c733c8f7dc
commit 98057d9f73
4 changed files with 207 additions and 21 deletions

View File

@ -1,8 +1,10 @@
package org.oscim.gdx.client; package org.oscim.gdx.client;
import org.oscim.backend.Log;
import org.oscim.backend.canvas.Bitmap; import org.oscim.backend.canvas.Bitmap;
import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.graphics.GL10; import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.Pixmap; import com.badlogic.gdx.graphics.Pixmap;
import com.google.gwt.dom.client.ImageElement; 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; import com.google.gwt.user.client.ui.RootPanel;
public class GwtBitmap implements Bitmap { public class GwtBitmap implements Bitmap {
Pixmap bitmap; Pixmap pixmap;
Image image; Image image;
boolean disposable;
public GwtBitmap(Image data) { public GwtBitmap(Image data) {
ImageElement imageElement = ImageElement.as(data.getElement()); ImageElement imageElement = ImageElement.as(data.getElement());
bitmap = new Pixmap(imageElement); pixmap = new Pixmap(imageElement);
image = data; 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 @Override
public int getWidth() { public int getWidth() {
return bitmap.getWidth(); return pixmap.getWidth();
} }
@Override @Override
public int getHeight() { public int getHeight() {
return bitmap.getHeight(); return pixmap.getHeight();
} }
@Override @Override
public void recycle() { public void recycle() {
bitmap.dispose(); pixmap.dispose();
} }
@Override @Override
@ -46,14 +59,18 @@ public class GwtBitmap implements Bitmap {
@Override @Override
public int uploadToTexture(boolean replace) { public int uploadToTexture(boolean replace) {
Gdx.gl.glTexImage2D(GL10.GL_TEXTURE_2D, 0, bitmap.getGLInternalFormat(), bitmap.getWidth(), Gdx.gl.glTexImage2D(GL10.GL_TEXTURE_2D, 0, pixmap.getGLInternalFormat(), pixmap.getWidth(),
bitmap.getHeight(), 0, pixmap.getHeight(), 0,
bitmap.getGLFormat(), bitmap.getGLType(), bitmap.getPixels()); pixmap.getGLFormat(), pixmap.getGLType(), pixmap.getPixels());
bitmap.dispose();
if (image != null) if (disposable || image != null){
RootPanel.get().remove(image); Log.d("", "dispose pixmap " +getWidth() +"/" + getHeight());
pixmap.dispose();
if (image != null)
RootPanel.get().remove(image);
}
return 1; return 1;
} }

View File

@ -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
}
}

View File

@ -4,17 +4,40 @@ import java.io.InputStream;
import org.oscim.backend.CanvasAdapter; import org.oscim.backend.CanvasAdapter;
import org.oscim.backend.canvas.Bitmap; import org.oscim.backend.canvas.Bitmap;
import org.oscim.backend.canvas.Canvas;
import org.oscim.backend.canvas.Paint; 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 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 @Override
public Bitmap decodeBitmap(InputStream in) { public Bitmap decodeBitmap(InputStream in) {
//ImageData data = new ImageData();
return null; return null;
} }
@Override
public Bitmap loadBitmapAsset(String fileName) {
return new GwtBitmap(fileName);
}
@Override @Override
public int getColor(Color color) { public int getColor(Color color) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
@ -23,8 +46,7 @@ public class GwtCanvasAdapter extends CanvasAdapter {
@Override @Override
public Paint getPaint() { public Paint getPaint() {
// TODO Auto-generated method stub return new GwtPaint();
return null;
} }
@Override @Override
@ -35,14 +57,12 @@ public class GwtCanvasAdapter extends CanvasAdapter {
@Override @Override
public Bitmap getBitmap(int width, int height, int format) { public Bitmap getBitmap(int width, int height, int format) {
// TODO Auto-generated method stub return new GwtBitmap(width, height, format);
return null;
} }
@Override @Override
public Canvas getCanvas() { public org.oscim.backend.canvas.Canvas getCanvas() {
// TODO Auto-generated method stub return new GwtCanvas();
return null;
} }
} }

View File

@ -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;
}
}