package javax.microedition.lcdui;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.RectF;
import android.graphics.Region;
import android.graphics.Bitmap.Config;
import com.nutiteq.log.Log;
public class Graphics {
public static final int BASELINE = 0x01;
public static final int BOTTOM = 0x02;
public static final int LEFT = 0x04;
public static final int RIGHT = 0x08;
public static final int TOP = 0x10;
public static final int VCENTER = 0x20;
public static final int HCENTER = 0x40;
public static final int DOTTED = 0x01;
public static final int SOLID = 0x02;
private final Canvas canvas;
private Font font;
private final Paint paint;
public Graphics(final Canvas wrapped) {
canvas = wrapped;
font = Font.getDefaultFont();
paint = new Paint(font.getTypefacePaint());
paint.setAntiAlias(true);
}
public void drawImage(final Image image, final int x, final int y, final int anchor) {
int ax;
int ay;
if ((anchor & LEFT) != 0) {
ax = x;
} else if ((anchor & HCENTER) != 0) {
ax = x - image.getWidth() / 2;
} else {
ax = x - image.getWidth();
}
if ((anchor & TOP) != 0) {
ay = y;
} else if ((anchor & VCENTER) != 0) {
ay = y - image.getHeight() / 2;
} else {
ay = y - image.getHeight();
}
//TODO jaanus : check this. not really sure why this sometimes happens
try {
this.canvas.drawBitmap(image.getBitmap(), ax, ay, null);
} catch (final NullPointerException e) {
Log.error("NPE in G");
}
}
public void drawLine(final int x1, final int y1, final int x2, final int y2) {
canvas.drawLine(x1, y1, x2, y2, paint);
}
public void drawRect(final int x, final int y, final int width, final int height) {
paint.setStyle(Paint.Style.STROKE);
canvas.drawRect(x, y, x + width, y + height, paint);
}
public void drawRGB(final int[] rgbData, final int offset, final int scanlength, final int x,
final int y, final int width, final int height, final boolean processAlpha) {
final Bitmap drawn = Bitmap.createBitmap(rgbData, width, height, Config.ARGB_8888);
canvas.drawBitmap(drawn, x, y, null);
}
public void drawString(final String str, final int x, final int y, final int anchor) {
int paintX = x;
int paintY = y;
if ((anchor & TOP) != 0) {
paintY += font.getSize();
} else if ((anchor & BOTTOM) != 0) {
paintY -= font.getDescent();
}
final int stringWidth = font.stringWidth(str);
if ((anchor & RIGHT) != 0) {
paintX -= stringWidth;
} else if ((anchor & HCENTER) != 0) {
paintX -= stringWidth / 2;
}
canvas.drawText(str, paintX, paintY, paint);
}
public void fillRect(final int x, final int y, final int width, final int height) {
paint.setStyle(Paint.Style.FILL);
canvas.drawRect(x, y, x + width, y + height, paint);
}
public void fillTriangle(final int x1, final int y1, final int x2, final int y2, final int x3,
final int y3) {
paint.setStyle(Paint.Style.FILL);
final Path triangle = new Path();
triangle.moveTo(x1, y1);
triangle.lineTo(x2, y2);
triangle.lineTo(x3, y3);
triangle.close();
canvas.drawPath(triangle, paint);
}
public int getClipHeight() {
return canvas.getClipBounds().height();
}
public int getClipWidth() {
return canvas.getClipBounds().width();
}
public int getClipX() {
return canvas.getClipBounds().left;
}
public int getClipY() {
return canvas.getClipBounds().top;
}
public void setClip(final int x, final int y, final int width, final int height) {
canvas.clipRect(x, y, x + width, y + height, Region.Op.REPLACE);
}
public void setColor(final int rgb) {
paint.setColor(rgb);
}
public void setFont(final Font font) {
this.font = font;
paint.setTypeface(font.getTypefacePaint().getTypeface());
paint.setTextSize(font.getSize());
}
public void fillRoundRect(final int x, final int y, final int width, final int height,
final int arcWidth, final int arcHeight) {
paint.setStyle(Paint.Style.FILL);
canvas.drawRoundRect(new RectF(x, y, x + width, y + height), arcWidth, arcHeight, paint);
}
}