This commit is contained in:
Hannes Janetzek
2013-06-24 01:50:37 +02:00
parent 36de337e25
commit 83cd73156a
454 changed files with 30032 additions and 348 deletions

View File

@@ -0,0 +1,85 @@
package org.oscim.awt;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;
import java.nio.IntBuffer;
import javax.imageio.ImageIO;
import org.oscim.backend.canvas.Bitmap;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.utils.BufferUtils;
public class AwtBitmap implements Bitmap {
BufferedImage bitmap;
int width;
int height;
public AwtBitmap(int width, int height, int format) {
bitmap = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
this.width = width;
this.height = height;
}
AwtBitmap(InputStream inputStream) throws IOException {
this.bitmap = ImageIO.read(inputStream);
}
@Override
public int getWidth() {
return width;
}
@Override
public int getHeight() {
return height;
}
@Override
public int[] getPixels() {
// TODO Auto-generated method stub
return null;
}
@Override
public void eraseColor(int transparent) {
// TODO Auto-generated method stub
}
private static IntBuffer tmpBuffer = BufferUtils.newIntBuffer(256 * 256);
private static int[] tmpPixel = new int[256 * 256];
@Override
public int uploadToTexture(boolean replace) {
int[] pixels;
IntBuffer buffer;
if (width == 256 && height == 256){
pixels = tmpPixel;
buffer = tmpBuffer;
buffer.clear();
}else{
pixels = new int[width * height];
buffer = BufferUtils.newIntBuffer(width * height);
}
bitmap.getRGB(0, 0, width, height, pixels, 0, width);
buffer.put(pixels);
buffer.flip();
Gdx.gl20.glTexImage2D(GL20.GL_TEXTURE_2D, 0, GL20.GL_RGBA, width,
height, 0, GL20.GL_RGBA, GL20.GL_UNSIGNED_BYTE, buffer);
return 0;
}
@Override
public void recycle() {
// TODO Auto-generated method stub
}
}

View File

@@ -0,0 +1,63 @@
package org.oscim.awt;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import org.oscim.backend.canvas.Bitmap;
import org.oscim.backend.canvas.Canvas;
import org.oscim.backend.canvas.Paint;
public class AwtCanvas implements Canvas {
Graphics2D canvas;
public AwtCanvas() {
}
@Override
public void setBitmap(Bitmap bitmap) {
if (canvas != null)
canvas.dispose();
AwtBitmap awtBitamp = (AwtBitmap)bitmap;
canvas = awtBitamp.bitmap.createGraphics();
//awtBitamp.bitmap.
//bitmap.eraseColor();
canvas.setComposite(AlphaComposite.getInstance(AlphaComposite.CLEAR, 0));
//canvas.setBackground(new Color(1,1,1,1));
canvas.setColor(Color.BLACK);
//Gdx.app.log("set bitmap ", bitmap + " "+ bitmap.getWidth() + " " +bitmap.getHeight());
canvas.fillRect(0,0,bitmap.getWidth(),bitmap.getHeight());
//canvas.clearRect(0, 0, bitmap.getWidth(),bitmap.getHeight());
canvas.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1.0f));
canvas.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON );
//canvas.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
//canvas.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
//canvas.setRenderingHint(RenderingHints.KEY_KERNING, RenderingHints.VALUE_RENDER_QUALITY);
}
@Override
public void drawText(String string, float x, float y, Paint stroke) {
AwtPaint p = (AwtPaint)stroke;
canvas.setFont(p.font);
canvas.setColor(p.color);
canvas.drawString(string, (int)x, (int)y);
}
@Override
public void drawBitmap(Bitmap bitmap, float x, float y) {
// TODO Auto-generated method stub
throw new UnknownError("not implemented");
}
}

View File

@@ -0,0 +1,89 @@
package org.oscim.awt;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;
import org.oscim.backend.canvas.Bitmap;
import org.oscim.backend.canvas.Canvas;
import org.oscim.backend.CanvasAdapter;
import org.oscim.backend.canvas.Paint;
public class AwtGraphics extends CanvasAdapter {
public static final AwtGraphics INSTANCE = new AwtGraphics();
private AwtGraphics() {
// do nothing
}
@Override
public int getColor(Color color) {
// TODO Auto-generated method stub
return 0;
}
@Override
public Paint getPaint() {
return new AwtPaint();
}
@Override
public int parseColor(String colorString) {
// TODO Auto-generated method stub
return 0;
}
@Override
public Bitmap getBitmap(int width, int height, int format) {
return new AwtBitmap(width, height, format);
}
@Override
public Canvas getCanvas() {
return new AwtCanvas();
}
static final BufferedImage image;
static final Graphics2D canvas;
static {
image = new BufferedImage(64, 64, BufferedImage.TYPE_INT_ARGB);
canvas = image.createGraphics();
canvas.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON );
//canvas.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
//canvas.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
}
static synchronized FontMetrics getFontMetrics(Font font) {
canvas.setFont(font);
// get character measurements
FontMetrics fm = canvas.getFontMetrics();
// int ascent = fm.getMaxAscent();
// int descent = fm.getMaxDescent();
// int advance = fm.charWidth('W'); // width of widest char, more
// reliable than getMaxAdvance();
// int leading = fm.getLeading();
//
return fm;
}
static synchronized float getTextWidth(FontMetrics fm, String text) {
return (float)fm.getStringBounds(text, canvas).getWidth();
}
@Override
public Bitmap decodeBitmap(InputStream inputStream) {
try {
return new AwtBitmap(inputStream);
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}

View File

@@ -0,0 +1,149 @@
package org.oscim.awt;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.font.TextAttribute;
import java.text.AttributedCharacterIterator.Attribute;
import java.util.HashMap;
import java.util.Map;
//import org.oscim.graphics.Align;
import org.oscim.backend.canvas.Bitmap;
//import org.oscim.graphics.Cap;
//import org.oscim.graphics.FontFamily;
//import org.oscim.graphics.FontStyle;
import org.oscim.backend.canvas.Paint;
//import org.oscim.graphics.Style;
public class AwtPaint implements Paint {
static final Font defaultFont;
static {
Map<Attribute, Object> textAttributes = new HashMap<Attribute, Object>();
textAttributes.put(TextAttribute.KERNING, TextAttribute.KERNING_ON);
textAttributes.put(TextAttribute.FAMILY, "SansSerif");
textAttributes.put(TextAttribute.SIZE, 13);
defaultFont = Font.getFont(textAttributes);
}
Font font = defaultFont; //new Font("Default", Font.PLAIN, 13);
FontMetrics fm;
Color color = new Color(0.1f,0.1f,0.1f,1);
@Override
public int getColor() {
// TODO Auto-generated method stub
return 0;
}
@Override
public int getTextHeight(String text) {
// TODO Auto-generated method stub
return 0;
}
@Override
public int getTextWidth(String text) {
// TODO Auto-generated method stub
return 0;
}
@Override
public void setBitmapShader(Bitmap bitmap) {
// TODO Auto-generated method stub
}
@Override
public void setColor(int color) {
this.color = new Color(
((color >> 16) & 0xff)/255f,
((color >> 8) & 0xff)/255f,
((color >> 0) & 0xff)/255f,
((color >> 24) & 0xff)/255f
);
}
@Override
public void setDashPathEffect(float[] strokeDasharray) {
// TODO Auto-generated method stub
}
@Override
public void setStrokeCap(Cap cap) {
// TODO Auto-generated method stub
}
@Override
public void setStrokeWidth(float width) {
//int size = font.getSize();
//font = font.deriveFont(size + width * 4);
// TODO Auto-generated method stub
}
@Override
public void setStyle(Style style) {
// TODO Auto-generated method stub
}
@Override
public void setTextAlign(Align align) {
// TODO Auto-generated method stub
}
@Override
public void setTextSize(float textSize) {
font = font.deriveFont(textSize - 4);
}
@Override
public void setTypeface(FontFamily fontFamily, FontStyle fontStyle) {
// TODO Auto-generated method stub
}
@Override
public float measureText(String text) {
if (fm == null)
fm = AwtGraphics.getFontMetrics(this.font);
float w = AwtGraphics.getTextWidth(fm, text);
//Gdx.app.log("text width:", text + " " + w);
return w;
//return fm.getStringBounds(text, A).getWidth();
//return AwtGraphics.getTextWidth(fm, text);
//return fm.stringWidth(text);
}
@Override
public float getFontHeight() {
if (fm == null)
fm = AwtGraphics.getFontMetrics(this.font);
float height = fm.getHeight();
//Gdx.app.log("text height", " " + height);
return height;
}
@Override
public float getFontDescent() {
if (fm == null)
fm = AwtGraphics.getFontMetrics(this.font);
float desc = fm.getDescent();
//Gdx.app.log("text descent", " " + desc);
return desc;
}
}