hackthelobby/libcaca/java/org/zoy/caca/Canvas.java

376 lines
10 KiB
Java

/**
* libcaca Java bindings for libcaca
* Copyright (c) 2009 Adrien Grand <jpountz@dinauz.org>
*
* This library is free software. It comes without any warranty, to
* the extent permitted by applicable law. You can redistribute it
* and/or modify it under the terms of the Do What the Fuck You Want
* to Public License, Version 2, as published by Sam Hocevar. See
* http://www.wtfpl.net/ for more details.
*/
package org.zoy.caca;
public class Canvas extends NativeObject {
static {
Caca.load();
}
private static native int getCursorX(long canvasPtr);
private static native int getCursorY(long canvasPtr);
private static native void setCursorXY(long canvasPtr, int x, int y);
public class Cursor {
protected Cursor() {}
public int getX() {
return getCursorX(ptr);
}
public int getY() {
return getCursorY(ptr);
}
public void setXY(int x, int y) {
setCursorXY(ptr, x, y);
}
}
private static native int getHandleX(long canvasPtr);
private static native int getHandleY(long canvasPtr);
private static native void setHandleXY(long canvasPtr, int x, int y);
public class Handle {
protected Handle() {}
public int getX() {
return getHandleX(ptr);
}
public int getY() {
return getHandleY(ptr);
}
public void setXY(int x, int y) {
setHandleXY(ptr, x, y);
}
}
// Is this canvas managed by a display?
private final boolean managed;
private final Cursor cursor;
private final Handle handle;
private static native long createCanvas(int width, int height);
public Canvas(int width, int height) {
this(createCanvas(width, height), false);
}
protected Canvas(long ptr) {
this(ptr, true);
}
private Canvas(long ptr, boolean managed) {
this.cursor = new Cursor();
this.handle = new Handle();
this.ptr = ptr;
this.managed = managed;
}
public Cursor getCursor() {
return cursor;
}
public Handle getHandle() {
return handle;
}
private static native int getCanvasWidth(long canvasPtr);
public int getWidth() {
return getCanvasWidth(ptr);
}
private static native int getCanvasHeight(long canvasPtr);
public int getHeight() {
return getCanvasHeight(ptr);
}
private static native void setCanvasSize(long canvasPtr, int width, int height);
public void setSize(int width, int height) {
setCanvasSize(ptr, width, height);
}
private static native void clearCanvas(long canvasPtr);
public void clear() {
clearCanvas(ptr);
}
private static native int getCanvasChar(long canvasPtr, int x, int y);
public int getChar(int x, int y) {
return getCanvasChar(ptr, x, y);
}
private static native void putCanvasChar(long canvasPtr, int x, int y, int ch);
public void put(int x, int y, int ch) {
putCanvasChar(ptr, x, y, ch);
}
private static native void putCanvasString(long canvasPtr, int x, int y, String s);
public void put(int x, int y, String s) {
putCanvasString(ptr, x, y, s);
}
private static native void blitCanvas(long canvasPtr, int x, int y, long otherCanvasPtr, long maskCanvasPtr);
public void blit(int x, int y, Canvas other, Canvas mask) {
blitCanvas(ptr, x, y, other.ptr, mask.ptr);
}
private static native void setCanvasBoundaries(long canvasPtr, int x, int y, int width, int height);
public void setBoundaries(int x, int y, int width, int height) {
setCanvasBoundaries(ptr, x, y, width, height);
}
private static native void invertCanvas(long canvasPtr);
public void invert() {
invertCanvas(ptr);
}
private static native void flipCanvas(long canvasPtr);
public void flip() {
flipCanvas(ptr);
}
private static native void flopCanvas(long canvasPtr);
public void flop() {
flopCanvas(ptr);
}
private static native void rotateCanvas180(long canvasPtr);
public void rotate180() {
rotateCanvas180(ptr);
}
private static native void rotateCanvasLeft(long canvasPtr);
public void rotateLeft() {
rotateCanvasLeft(ptr);
}
private static native void rotateCanvasRight(long canvasPtr);
public void rotateRight() {
rotateCanvasRight(ptr);
}
private static native void stretchCanvasLeft(long canvasPtr);
public void stretchLeft() {
stretchCanvasLeft(ptr);
}
private static native void stretchCanvasRight(long canvasPtr);
public void stretchRight() {
stretchCanvasRight(ptr);
}
private static native int getCanvasAttribute(long canvasPtr, int x, int y);
public int getAttribute(int x, int y) {
return getCanvasAttribute(ptr, x, y);
}
private static native void setCanvasAttribute(long canvasPtr, int attr);
public void setDefaultAttribute(int attribute) {
setCanvasAttribute(ptr, attribute);
}
private static native void putCanvasAttribute(long canvasPtr, int x, int y, int attr);
public void putAttribute(int x, int y, int attribute) {
putCanvasAttribute(ptr, x, y, attribute);
}
private static native void setCanvasColorAnsi(long canvasPtr, byte colorAnsiFg, byte colorAnsiBg);
public void setColor(Color.Ansi foreground, Color.Ansi background) {
setCanvasColorAnsi(ptr, foreground.code, background.code);
}
private static native void setCanvasColorArgb(long canvasPtr, short colorArgbFg, short colorArbgBg);
public void setColor(Color.Argb foreground, Color.Argb background) {
setCanvasColorArgb(ptr, foreground.code, background.code);
}
private static native void canvasDrawLine(long canvasPtr, int x1, int y1, int x2, int y2, int ch);
public void drawLine(int x1, int y1, int x2, int y2, int ch) {
canvasDrawLine(ptr, x1, y1, x2, y2, ch);
}
private static native void canvasDrawPolyline(long canvasPtr, int[] x, int[] y, int ch);
public void drawPolyline(int[] x, int[] y, int ch) {
canvasDrawPolyline(ptr, x, y, ch);
}
private static native void canvasDrawThinLine(long canvasPtr, int x1, int y1, int x2, int y2);
public void drawThinLine(int x1, int y1, int x2, int y2) {
canvasDrawThinLine(ptr, x1, y1, x2, y2);
}
private static native void canvasDrawThinPolyline(long canvasPtr, int[] x, int[] y);
public void drawThinPolyline(int[] x, int[] y, int ch) {
canvasDrawThinPolyline(ptr, x, y);
}
private static native void canvasDrawCircle(long canvasPtr, int x, int y, int r, int ch);
public void drawCircle(int x, int y, int r, int ch) {
canvasDrawCircle(ptr, x, y, r, ch);
}
private static native void canvasDrawEllipse(long canvasPtr, int x, int y, int a, int b, int ch);
public void drawEllipse(int x, int y, int a, int b, int ch) {
canvasDrawEllipse(ptr, x, y, a, b, ch);
}
private static native void canvasDrawThinEllipse(long canvasPtr, int x, int y, int a, int b);
public void drawThinEllipse(int x, int y, int a, int b) {
canvasDrawThinEllipse(ptr, x, y, a, b);
}
private static native void canvasFillEllipse(long canvasPtr, int x, int y, int a, int b, int ch);
public void fillEllipse(int x, int y, int a, int b, int ch) {
canvasFillEllipse(ptr, x, y, a, b, ch);
}
private static native void canvasDrawBox(long canvasPtr, int x, int y, int width, int height, int ch);
public void drawBox(int x, int y, int width, int height, int ch) {
canvasDrawBox(ptr, x, y, width, height, ch);
}
private static native void canvasDrawThinBox(long canvasPtr, int x, int y, int width, int height);
public void drawThinBox(int x, int y, int width, int height) {
canvasDrawThinBox(ptr, x, y, width, height);
}
private static native void canvasDrawCp437Box(long canvasPtr, int x, int y, int width, int height);
public void drawCp437Box(int x, int y, int width, int height) {
canvasDrawCp437Box(ptr, x, y, width, height);
}
private static native void canvasFillBox(long canvasPtr, int x, int y, int width, int height, int ch);
public void fillBox(int x, int y, int width, int height, int ch) {
canvasFillBox(ptr, x, y, width, height, ch);
}
private static native void canvasDrawTriangle(long canvasPtr, int x1, int y1, int x2, int y2, int x3, int y3, int ch);
public void drawTriangle(int x1, int y1, int x2, int y2, int x3, int y3, int ch) {
canvasDrawTriangle(ptr, x1, y1, x2, y2, x3, y3, ch);
}
private static native void canvasDrawThinTriangle(long canvasPtr, int x1, int y1, int x2, int y2, int x3, int y3);
public void drawThinTriangle(int x1, int y1, int x2, int y2, int x3, int y3) {
canvasDrawThinTriangle(ptr, x1, y1, x2, y2, x3, y3);
}
private static native void canvasFillTriangle(long canvasPtr, int x1, int y1, int x2, int y2, int x3, int y3, int ch);
public void fillTriangle(int x1, int y1, int x2, int y2, int x3, int y3, int ch) {
canvasFillTriangle(ptr, x1, y1, x2, y2, x3, y3, ch);
}
private static native int getCanvasFrameCount(long canvasPtr);
public int getFrameCount() {
return getCanvasFrameCount(ptr);
}
private static native void setCanvasFrame(long canvasPtr, int id);
public void setFrame(int id) {
setCanvasFrame(ptr, id);
}
private static native String getCanvasFrameName(long canvasPtr);
public String getFrameName() {
return getCanvasFrameName(ptr);
}
private static native void setCanvasFrameName(long canvasPtr, String name);
public void setFrameName(String name) {
setCanvasFrameName(ptr, name);
}
private static native void createCanvasFrame(long canvasPtr, int id);
public void createFrame(int id) {
createCanvasFrame(ptr, id);
}
private static native void freeCanvasFrame(long canvasPtr, int id);
public void removeFrame(int id) {
freeCanvasFrame(ptr, id);
}
private static native void canvasRender(long canvasPtr, long fontPtr, byte[] buf,
int width, int height, int pitch);
public void render(Font font, byte[] buf, int width, int height, int pitch) {
canvasRender(ptr, font.ptr, buf, width, height, pitch);
}
private static native void canvasDitherBitmap(long canvasPtr, int x, int y, int width,
int height, long ditherPtr, byte[] pixels);
public void ditherBitmap(int x, int y, int width, int height, Dither dither, byte[] pixels) {
canvasDitherBitmap(ptr, x, y, width, height, dither.ptr, pixels);
}
private static native void freeCanvas(long canvasPtr);
@Override
public void finalize() throws Throwable {
if (!managed)
freeCanvas(ptr);
super.finalize();
}
}