split up
This commit is contained in:
85
vtm-gdx-desktop/src/org/oscim/awt/AwtBitmap.java
Normal file
85
vtm-gdx-desktop/src/org/oscim/awt/AwtBitmap.java
Normal 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
|
||||
|
||||
}
|
||||
}
|
||||
63
vtm-gdx-desktop/src/org/oscim/awt/AwtCanvas.java
Normal file
63
vtm-gdx-desktop/src/org/oscim/awt/AwtCanvas.java
Normal 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");
|
||||
}
|
||||
}
|
||||
89
vtm-gdx-desktop/src/org/oscim/awt/AwtGraphics.java
Normal file
89
vtm-gdx-desktop/src/org/oscim/awt/AwtGraphics.java
Normal 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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
149
vtm-gdx-desktop/src/org/oscim/awt/AwtPaint.java
Normal file
149
vtm-gdx-desktop/src/org/oscim/awt/AwtPaint.java
Normal 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;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user