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

169 lines
4.3 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 Display extends NativeObject {
static {
Caca.load();
}
private static native long createDisplayAndCanvas();
private static native long createDisplay(long canvasPtr);
private static native long createDisplayAndCanvasWithDriver(String driver);
private static native long createDisplayWithDriver(long canvasPtr, String driver);
// Keep a reference to the canvas so that it does not get collected before this.
private Canvas canvas;
public Display() {
ptr = createDisplayAndCanvas();
long canvasPtr = getDisplayCanvas(ptr);
// Create a managed canvas
canvas = new Canvas(canvasPtr);
}
public Display(Canvas canvas) {
this.canvas = canvas;
ptr = createDisplay(canvas.ptr);
}
public Display(String driver) {
ptr = createDisplayAndCanvasWithDriver(driver);
long canvasPtr = getDisplayCanvas(ptr);
// Create a managed canvas
canvas = new Canvas(canvasPtr);
}
public Display(Canvas canvas, Driver driver) {
ptr = createDisplayWithDriver(canvas.ptr, driver.code);
}
public static class Driver extends CacaObject {
public Driver(String code, String desc) {
super(code, desc);
}
public static Driver forCode(String code) {
for (Driver driver : getDriverList()) {
if (driver.code.equals(code)) {
return driver;
}
}
return null;
}
}
private static native String[] getDisplayDriverList();
public static Driver[] getDriverList() {
String[] tmp = getDisplayDriverList();
Driver[] drivers = new Driver[tmp.length / 2];
for (int i = 0; 2*i < tmp.length; i++) {
drivers[i] = new Driver(tmp[2*i], tmp[2*i+1]);
}
return drivers;
}
private static native void setDisplayDriver(long displayPtr, String driver);
public void setDriver(Driver driver) {
setDisplayDriver(ptr, driver.code);
}
private static native String getDisplayDriver(long displayPtr);
public Driver getDriver() {
return Driver.forCode(getDisplayDriver(ptr));
}
private static native long getDisplayCanvas(long displayPtr);
public Canvas getCanvas() {
return canvas;
}
private static native void displayRefresh(long displayPtr);
public void refresh() {
displayRefresh(ptr);
}
private static native void setDisplayTime(long displayPtr, int time);
public void setTime(int time) {
setDisplayTime(ptr, time);
}
private static native int getDisplayTime(long displayPtr);
public int getTime() {
return getDisplayTime(ptr);
}
private static native int getDisplayWidth(long displayPtr);
public int getWidth() {
return getDisplayWidth(ptr);
}
private static native int getDisplayHeight(long displayPtr);
public int getHeight() {
return getDisplayHeight(ptr);
}
private static native void setDisplayTitle(long displayPtr, String title);
public void setTitle(String title) {
setDisplayTitle(ptr, title);
}
private static native void setDisplayMouse(long displayPtr, boolean status);
public void setMouse(boolean status) {
setDisplayMouse(ptr, status);
}
private static native void setDisplayCursor(long displayPtr, boolean status);
public void setCursor(boolean status) {
setDisplayCursor(ptr, status);
}
private static native long getDisplayEvent(long displayPtr, int eventMask, int timeout);
public Event getEvent(Event.Type type, int timeout) {
return new Event(getDisplayEvent(ptr, type.code, timeout));
}
private static native int getDisplayMouseX(long eventPtr);
public int getMouseX() {
return getDisplayMouseX(ptr);
}
private static native int getDisplayMouseY(long eventPtr);
public int getMouseY() {
return getDisplayMouseY(ptr);
}
private static native void freeDisplay(long displayPtr);
@Override
public void finalize() throws Throwable {
freeDisplay(ptr);
super.finalize();
}
}