seventh.client.gfx.GdxCanvas.java Source code

Java tutorial

Introduction

Here is the source code for seventh.client.gfx.GdxCanvas.java

Source

/*
 * The Seventh
 * see license.txt 
 */
package seventh.client.gfx;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Stack;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Pixmap.Format;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.GlyphLayout;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator;
import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator.FreeTypeFontParameter;
import com.badlogic.gdx.graphics.glutils.FrameBuffer;
import com.badlogic.gdx.graphics.glutils.ShaderProgram;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType;
import com.badlogic.gdx.math.Matrix4;

/**
 * @author Tony
 *
 */
public class GdxCanvas implements Canvas {

    private SpriteBatch batch;
    private Color color, tmpColor;
    private float compositeAlpha;

    private float fontSize;
    private float defaultFontSize;
    private String currentFontName;
    private String defaultFontName;

    private Map<String, FreeTypeFontGenerator> generators;
    private Map<String, BitmapFont> fonts;
    private BitmapFont font, defaultFont;
    private GlyphLayout bounds;

    private Matrix4 transform;

    private ShapeRenderer shapes;
    private OrthographicCamera camera;

    private boolean isBegun;

    private Stack<ShaderProgram> shaderStack;

    private FrameBuffer fbo;

    /**
     * 
     */
    public GdxCanvas() {
        this.batch = new SpriteBatch();
        this.color = new Color();
        this.tmpColor = new Color();

        this.shaderStack = new Stack<>();

        this.camera = new OrthographicCamera(getWidth(), getHeight());
        this.camera.setToOrtho(true, getWidth(), getHeight());

        this.generators = new HashMap<String, FreeTypeFontGenerator>();
        this.fonts = new HashMap<String, BitmapFont>();
        this.bounds = new GlyphLayout();

        this.transform = new Matrix4();
        //this.batch.setTransformMatrix(transform);

        //Matrix4 projection = new Matrix4();
        //projection.setToOrtho( 0, getWidth(), getHeight(), 0, -1, 1);
        //this.batch.setProjectionMatrix(projection);

        //        this.wHeight = getHeight();
        this.batch.setProjectionMatrix(this.camera.combined);

        this.shapes = new ShapeRenderer();
        //this.shapes.setTransformMatrix(transform);    
        //        this.shapes.setProjectionMatrix(projection);
        //this.shapes.setProjectionMatrix(camera.combined);

        this.fbo = new FrameBuffer(Format.RGBA8888, getWidth(), getHeight(), false);
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#getCamera()
     */
    @Override
    public OrthographicCamera getCamera() {
        return this.camera;
    }

    /*
     * (non-Javadoc)
     * @see seventh.client.gfx.Canvas#setShader(com.badlogic.gdx.graphics.glutils.ShaderProgram)
     */
    @Override
    public void setShader(ShaderProgram shader) {
        this.batch.setShader(shader);
    }

    /*
     * (non-Javadoc)
     * @see seventh.client.gfx.Canvas#pushShader(com.badlogic.gdx.graphics.glutils.ShaderProgram)
     */
    @Override
    public void pushShader(ShaderProgram shader) {
        this.shaderStack.add(shader);
        this.batch.setShader(shader);
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#popShader()
     */
    @Override
    public void popShader() {
        if (!this.shaderStack.isEmpty()) {
            this.shaderStack.pop();
        }

        if (this.shaderStack.isEmpty()) {
            this.batch.setShader(null);
        } else {
            this.batch.setShader(this.shaderStack.peek());
        }

    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#enableAntialiasing(boolean)
     */
    @Override
    public void enableAntialiasing(boolean b) {
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#isAntialiasingEnabled()
     */
    @Override
    public boolean isAntialiasingEnabled() {
        return false;
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#bindFrameBuffer(int)
     */
    @Override
    public void bindFrameBuffer(int id) {
        fbo.getColorBufferTexture().bind(id);
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#getFrameBuffer()
     */
    @Override
    public Texture getFrameBuffer() {
        return fbo.getColorBufferTexture();
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#fboBegin()
     */
    @Override
    public void fboBegin() {
        fbo.begin();
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#fboEnd()
     */
    @Override
    public void fboEnd() {
        fbo.end();
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#beginSprite()
     */
    @Override
    public void begin() {
        this.batch.begin();
        this.isBegun = true;
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#endSprite()
     */
    @Override
    public void end() {
        this.batch.end();
        this.isBegun = false;
    }

    /*
     * (non-Javadoc)
     * @see seventh.client.gfx.Canvas#flush()
     */
    @Override
    public void flush() {
        this.batch.flush();
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#setProjectionMatrix(com.badlogic.gdx.math.Matrix4)
     */
    @Override
    public void setProjectionMatrix(Matrix4 mat) {
        this.batch.setProjectionMatrix(mat);
        this.shapes.setProjectionMatrix(mat);
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#setTransform(com.badlogic.gdx.math.Matrix4)
     */
    @Override
    public void setTransform(Matrix4 mat) {
        this.batch.setTransformMatrix(mat);
        this.shapes.setTransformMatrix(mat);
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#setTransform()
     */
    @Override
    public void setDefaultTransforms() {
        this.batch.setProjectionMatrix(this.camera.combined);
        this.batch.setTransformMatrix(this.transform);

        this.shapes.setProjectionMatrix(this.camera.combined);
        this.shapes.setTransformMatrix(this.transform);
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#preRender()
     */
    @Override
    public void preRender() {
        this.camera.update();

        setDefaultTransforms();
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#postRender()
     */
    @Override
    public void postRender() {
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#setColor(int, java.lang.Integer)
     */
    @Override
    public void setColor(int color, Integer alpha) {

        if (alpha != null) {
            //color = (color << 8) | alpha;
            color = (alpha << 24) | color;
        }
        _setColor(color);
    }

    private void _setColor(Integer color) {
        setColor(this.color, color);

    }

    private void setColor(Color c, Integer color) {
        if (color != null) {
            int alpha = color >>> 24;
            color = (color << 8) | alpha;

            c.set(color);
        }
    }

    private Color setTempColor(Integer color) {
        if (color != null) {
            int alpha = color >>> 24;
            color = (color << 8) | alpha;

            tmpColor.set(color);
            return tmpColor;
        }
        return this.color;
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#setClearColor(java.lang.Integer)
     */
    @Override
    public void setClearColor(Integer color) {
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#getColor()
     */
    @Override
    public int getColor() {
        int c = Color.rgba8888(color);
        return (c >>> 8) | (c << 24);
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#loadFont(java.lang.String)
     */
    @Override
    public void loadFont(String filename, String alias) throws IOException {
        FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal(filename));
        this.generators.put(alias, generator);
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#setFont(java.lang.String, int)
     */
    @Override
    public void setFont(String alias, int size) {
        this.font = getFont(alias, size);
        this.fontSize = size;
        this.currentFontName = alias;
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#setDefaultFont(java.lang.String, int)
     */
    @Override
    public void setDefaultFont(String alias, int size) {
        this.defaultFont = getFont(alias, size);
        this.defaultFontSize = size;
        this.defaultFontName = alias;
    }

    /**
     * Retrieve the desired font and size (may load the font
     * if not cached).
     * 
     * @param alias
     * @param size
     * @return the font
     */
    private BitmapFont getFont(String alias, int size) {
        BitmapFont font = null;

        String mask = alias + ":" + size;
        if (this.fonts.containsKey(mask)) {
            font = this.fonts.get(mask);
        } else if (this.generators.containsKey(alias)) {
            FreeTypeFontParameter params = new FreeTypeFontParameter();
            params.size = size;
            params.characters = FreeTypeFontGenerator.DEFAULT_CHARS;
            params.flip = true;

            font = this.generators.get(alias).generateFont(params);
            this.fonts.put(mask, font);
        }

        return font;
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#setDefaultFont()
     */
    @Override
    public void setDefaultFont() {
        this.font = defaultFont;
        this.fontSize = this.defaultFontSize;
        this.currentFontName = this.defaultFontName;
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#getGlythData(java.lang.String, int)
     */
    @Override
    public GlythData getGlythData(String alias, int size) {
        BitmapFont font = getFont(alias, size);
        return new GlythData(font, bounds);
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#getGlythData()
     */
    @Override
    public GlythData getGlythData() {
        return new GlythData(font, bounds);
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#getWidth(java.lang.String)
     */
    @Override
    public int getWidth(String str) {
        return GlythData.getWidth(font, bounds, str);
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#getHeight(java.lang.String)
     */
    @Override
    public int getHeight(String str) {
        return GlythData.getHeight(font, bounds, str);
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#boldFont()
     */
    @Override
    public void boldFont() {
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#italicFont()
     */
    @Override
    public void italicFont() {
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#plainFont()
     */
    @Override
    public void plainFont() {
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#resizeFont(float)
     */
    @Override
    public void resizeFont(float size) {
        if (font != null) {
            /* get the scale increase */
            //            if(this.fontSize != 0 && this.fontSize != size) {
            //                float delta = size - this.fontSize;
            //                float scale = delta / this.fontSize;
            //                this.fontSize = size;
            //                font.scale(1.0f + scale);
            //            }
            if (this.fontSize != 0 && this.fontSize != size) {
                setFont(currentFontName, (int) size);
            }

        }
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#setClip(int, int, int, int)
     */
    @Override
    public void setClip(int x, int y, int width, int height) {
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#setCompositeAlpha(float)
     */
    @Override
    public void setCompositeAlpha(float a) {
        this.compositeAlpha = a;
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#getCompositeAlpha()
     */
    @Override
    public float getCompositeAlpha() {
        return this.compositeAlpha;
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#getWidth()
     */
    @Override
    public int getWidth() {
        return Gdx.graphics.getWidth();
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#getHeight()
     */
    @Override
    public int getHeight() {
        return Gdx.graphics.getHeight();
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#toRadians(double)
     */
    @Override
    public double toRadians(double degrees) {
        return Math.toRadians(degrees);
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#toDegrees(double)
     */
    @Override
    public double toDegrees(double radians) {
        return Math.toDegrees(radians);
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#drawLine(int, int, int, int, java.lang.Integer)
     */
    @Override
    public void drawLine(int x1, int y1, int x2, int y2, Integer color) {
        Color c = setTempColor(color);
        Gdx.gl.glEnable(GL20.GL_BLEND);
        Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
        this.shapes.setColor(c);

        this.shapes.begin(ShapeType.Line);
        this.shapes.line(x1, y1, x2, y2);
        this.shapes.end();
        Gdx.gl.glDisable(GL20.GL_BLEND);
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#drawLine(float, float, float, float, java.lang.Integer)
     */
    @Override
    public void drawLine(float x1, float y1, float x2, float y2, Integer color) {
        Color c = setTempColor(color);
        Gdx.gl.glEnable(GL20.GL_BLEND);
        Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
        this.shapes.setColor(c);

        this.shapes.begin(ShapeType.Line);
        this.shapes.line(x1, y1, x2, y2);
        this.shapes.end();
        Gdx.gl.glDisable(GL20.GL_BLEND);
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#drawRect(int, int, int, int, java.lang.Integer)
     */
    @Override
    public void drawRect(int x, int y, int width, int height, Integer color) {
        Color c = setTempColor(color);
        Gdx.gl.glEnable(GL20.GL_BLEND);
        Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
        this.shapes.setColor(c);

        this.shapes.begin(ShapeType.Line);
        this.shapes.rect(x, y, width, height);
        this.shapes.end();
        Gdx.gl.glDisable(GL20.GL_BLEND);
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#drawRect(float, float, float, float, java.lang.Integer)
     */
    @Override
    public void drawRect(float x, float y, float width, float height, Integer color) {
        Color c = setTempColor(color);
        Gdx.gl.glEnable(GL20.GL_BLEND);
        Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
        this.shapes.setColor(c);

        this.shapes.begin(ShapeType.Line);
        this.shapes.rect(x, y, width, height);
        this.shapes.end();
        Gdx.gl.glDisable(GL20.GL_BLEND);
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#fillRect(int, int, int, int, java.lang.Integer)
     */
    @Override
    public void fillRect(int x, int y, int width, int height, Integer color) {
        Color c = setTempColor(color);
        Gdx.gl.glEnable(GL20.GL_BLEND);
        Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);

        this.shapes.begin(ShapeType.Filled);
        this.shapes.setColor(c);
        this.shapes.rect(x, y, width, height);
        this.shapes.end();
        Gdx.gl.glDisable(GL20.GL_BLEND);

    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#fillRect(float, float, float, float, java.lang.Integer)
     */
    @Override
    public void fillRect(float x, float y, float width, float height, Integer color) {
        Color c = setTempColor(color);
        Gdx.gl.glEnable(GL20.GL_BLEND);
        Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);

        this.shapes.begin(ShapeType.Filled);
        this.shapes.setColor(c);
        this.shapes.rect(x, y, width, height);
        this.shapes.end();
        Gdx.gl.glDisable(GL20.GL_BLEND);
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#drawCircle(float, int, int, java.lang.Integer)
     */
    @Override
    public void drawCircle(float radius, int x, int y, Integer color) {
        Color c = setTempColor(color);
        Gdx.gl.glEnable(GL20.GL_BLEND);
        Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
        this.shapes.setColor(c);

        this.shapes.begin(ShapeType.Line);
        this.shapes.circle(x + radius, y + radius, radius);
        this.shapes.end();
        Gdx.gl.glDisable(GL20.GL_BLEND);
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#drawCircle(float, float, float, java.lang.Integer)
     */
    @Override
    public void drawCircle(float radius, float x, float y, Integer color) {
        Color c = setTempColor(color);
        Gdx.gl.glEnable(GL20.GL_BLEND);
        Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
        this.shapes.setColor(c);

        this.shapes.begin(ShapeType.Line);
        this.shapes.circle(x + radius, y + radius, radius);
        this.shapes.end();
        Gdx.gl.glDisable(GL20.GL_BLEND);
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#fillCircle(float, int, int, java.lang.Integer)
     */
    @Override
    public void fillCircle(float radius, int x, int y, Integer color) {
        Color c = setTempColor(color);
        Gdx.gl.glEnable(GL20.GL_BLEND);
        Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
        this.shapes.setColor(c);

        this.shapes.begin(ShapeType.Filled);
        this.shapes.circle(x + radius, y + radius, radius);
        this.shapes.end();
        Gdx.gl.glDisable(GL20.GL_BLEND);
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#fillCircle(float, float, float, java.lang.Integer)
     */
    @Override
    public void fillCircle(float radius, float x, float y, Integer color) {
        Color c = setTempColor(color);
        Gdx.gl.glEnable(GL20.GL_BLEND);
        Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
        this.shapes.setColor(c);

        this.shapes.begin(ShapeType.Filled);
        this.shapes.circle(x + radius, y + radius, radius);
        this.shapes.end();
        Gdx.gl.glDisable(GL20.GL_BLEND);
    }

    @Override
    public void fillArc(float x, float y, float radius, float start, float degrees, Integer color) {
        Color c = setTempColor(color);
        Gdx.gl.glEnable(GL20.GL_BLEND);
        Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
        this.shapes.setColor(c);

        this.shapes.begin(ShapeType.Filled);
        this.shapes.arc(x, y, radius, start, degrees);
        this.shapes.end();
        Gdx.gl.glDisable(GL20.GL_BLEND);

    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#drawString(java.lang.String, int, int, java.lang.Integer)
     */
    @Override
    public void drawString(String text, int x, int y, Integer color) {
        if (font != null) {
            Color c = setTempColor(color);

            if (!isBegun)
                batch.begin();
            font.setColor(c);
            font.draw(batch, text, x, y - font.getCapHeight());

            if (!isBegun)
                batch.end();
        }
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#drawString(java.lang.String, float, float, java.lang.Integer)
     */
    @Override
    public void drawString(String text, float x, float y, Integer color) {
        if (font != null) {
            Color c = setTempColor(color);

            if (!isBegun)
                batch.begin();
            font.setColor(c);
            font.draw(batch, text, x, y - font.getCapHeight());

            if (!isBegun)
                batch.end();
        }
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#drawImage(com.badlogic.gdx.graphics.g2d.TextureRegion, int, int, java.lang.Integer)
     */
    @Override
    public void drawImage(TextureRegion image, int x, int y, Integer color) {

        Color c = Color.WHITE;
        if (color != null)
            c = setTempColor(color);

        if (!isBegun)
            batch.begin();
        batch.setColor(c);
        batch.draw(image, x, y);
        if (!isBegun)
            batch.end();
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#drawImage(com.badlogic.gdx.graphics.g2d.TextureRegion, float, float, java.lang.Integer)
     */
    @Override
    public void drawImage(TextureRegion image, float x, float y, Integer color) {
        Color c = Color.WHITE;
        if (color != null)
            c = setTempColor(color);

        if (!isBegun)
            batch.begin();
        batch.setColor(c);
        batch.draw(image, x, y);
        if (!isBegun)
            batch.end();
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#drawScaledImage(com.badlogic.gdx.graphics.g2d.TextureRegion, int, int, int, int, java.lang.Integer)
     */
    @Override
    public void drawScaledImage(TextureRegion image, int x, int y, int width, int height, Integer color) {
        Color c = setTempColor(color);

        if (!isBegun)
            batch.begin();
        batch.setColor(c);
        batch.draw(image, x, y, width, height);
        if (!isBegun)
            batch.end();
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#drawScaledImage(com.badlogic.gdx.graphics.g2d.TextureRegion, float, float, int, int, java.lang.Integer)
     */
    @Override
    public void drawScaledImage(TextureRegion image, float x, float y, int width, int height, Integer color) {
        Color c = setTempColor(color);

        if (!isBegun)
            batch.begin();
        batch.setColor(c);
        batch.draw(image, x, y, width, height);
        if (!isBegun)
            batch.end();
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#drawSubImage(com.badlogic.gdx.graphics.g2d.TextureRegion, int, int, int, int, int, int, java.lang.Integer)
     */
    @Override
    public void drawSubImage(TextureRegion image, int x, int y, int imageX, int imageY, int width, int height,
            Integer color) {
        throw new IllegalStateException("Method not supported!");
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#drawSubImage(com.badlogic.gdx.graphics.g2d.TextureRegion, float, float, int, int, int, int, java.lang.Integer)
     */
    @Override
    public void drawSubImage(TextureRegion image, float x, float y, int imageX, int imageY, int width, int height,
            Integer color) {
        throw new IllegalStateException("Method not supported!");
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#drawRawSprite(com.badlogic.gdx.graphics.g2d.Sprite)
     */
    @Override
    public void drawRawSprite(Sprite sprite) {
        if (!isBegun)
            batch.begin();
        sprite.draw(batch);
        if (!isBegun)
            batch.end();
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#drawSprite(com.badlogic.gdx.graphics.g2d.Sprite)
     */
    @Override
    public void drawSprite(Sprite sprite) {
        if (!isBegun)
            batch.begin();
        sprite.setColor(1, 1, 1, this.compositeAlpha);
        sprite.draw(batch);
        if (!isBegun)
            batch.end();
    }

    @Override
    public void drawSprite(Sprite sprite, int x, int y, Integer color) {
        if (!isBegun)
            batch.begin();
        if (color != null) {
            Color c = setTempColor(color);
            sprite.setColor(c);
        } else
            sprite.setColor(1, 1, 1, this.compositeAlpha);
        sprite.setPosition(x, y);
        sprite.draw(batch);
        if (!isBegun)
            batch.end();
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#drawSprite(com.badlogic.gdx.graphics.g2d.Sprite, float, float, java.lang.Integer)
     */
    @Override
    public void drawSprite(Sprite sprite, float x, float y, Integer color) {
        if (!isBegun)
            batch.begin();
        if (color != null) {
            Color c = setTempColor(color);
            sprite.setColor(c);
        } else
            sprite.setColor(1, 1, 1, this.compositeAlpha);
        sprite.setPosition(x, y);
        sprite.draw(batch);
        if (!isBegun)
            batch.end();
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#rotate(double, java.lang.Integer, java.lang.Integer)
     */
    @Override
    public void rotate(double degree, Integer x, Integer y) {
        //this.transform.rotate( x, y, 0, (float)degree);
        this.shapes.rotate((float) x, (float) y, 0.0f, (float) degree);
        //        camera.rotate( (float)Math.toRadians(degree), x, y, 0);
        //        camera.rotate( (float)degree, x, y, 0);
        //batch.getTransformMatrix().rotate( x, y, 0, (float)Math.toRadians(degree));
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#rotate(double, float, float)
     */
    @Override
    public void rotate(double degree, float x, float y) {
        this.shapes.rotate(x, y, 0.0f, (float) degree);
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#translate(int, int)
     */
    @Override
    public void translate(int x, int y) {
        this.transform.translate(x, y, 0);
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#moveTo(double, double)
     */
    @Override
    public void moveTo(double x, double y) {
        this.transform.translate((float) x, (float) y, 0);
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#scale(double, double)
     */
    @Override
    public void scale(double sx, double sy) {
        this.transform.scale((float) sx, (float) sy, 1.0f);

    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#shear(double, double)
     */
    @Override
    public void shear(double sx, double sy) {
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#clearTransform()
     */
    @Override
    public void clearTransform() {
        //this.transform.idt();    
        this.shapes.identity();
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#pushZoom(double)
     */
    @Override
    public void pushZoom(double zoom) {
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#popZoom()
     */
    @Override
    public void popZoom() {
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#enableBlending()
     */
    @Override
    public void enableBlending() {
        this.batch.enableBlending();
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#disableBlending()
     */
    @Override
    public void disableBlending() {
        this.batch.disableBlending();
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#setBlendFunction(int, int)
     */
    @Override
    public void setBlendFunction(int srcFunc, int dstFunc) {
        this.batch.setBlendFunction(srcFunc, dstFunc);
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#getSrcBlendFunction()
     */
    @Override
    public int getSrcBlendFunction() {
        return this.batch.getBlendSrcFunc();
    }

    /* (non-Javadoc)
     * @see seventh.client.gfx.Canvas#getDstBlendFunction()
     */
    @Override
    public int getDstBlendFunction() {
        return this.batch.getBlendDstFunc();
    }
}