@@ -26,4 +26,7 @@ Daniele "Eriol" Tricoli <eriol@mornie.org> | |||||
Nicolas Vion <nico@picapo.net> | Nicolas Vion <nico@picapo.net> | ||||
- PHP bindings | - PHP bindings | ||||
Adrien Grand <jpountz@dinauz.org> | |||||
- Java bindings | |||||
*/ | */ |
@@ -1,6 +1,8 @@ | |||||
# $Id$ | # $Id$ | ||||
SUBDIRS = kernel caca src examples tools caca-sharp cxx python ruby doc test | |||||
SUBDIRS = kernel caca src examples tools \ | |||||
cxx caca-sharp python ruby java \ | |||||
doc test | |||||
DIST_SUBDIRS = $(SUBDIRS) win32 | DIST_SUBDIRS = $(SUBDIRS) win32 | ||||
EXTRA_DIST = NOTES COPYING.GPL COPYING.ISC COPYING.LGPL bootstrap build-dos build-kernel build-win32 caca-config.in libcaca.spec libcaca.sln | EXTRA_DIST = NOTES COPYING.GPL COPYING.ISC COPYING.LGPL bootstrap build-dos build-kernel build-win32 caca-config.in libcaca.spec libcaca.sln | ||||
@@ -78,6 +78,8 @@ AC_ARG_ENABLE(vga, | |||||
dnl language bindings | dnl language bindings | ||||
AC_ARG_ENABLE(csharp, | AC_ARG_ENABLE(csharp, | ||||
[ --enable-csharp C# bindings (autodetected)]) | [ --enable-csharp C# bindings (autodetected)]) | ||||
AC_ARG_ENABLE(java, | |||||
[ --enable-java Java bindings (autodetected)]) | |||||
AC_ARG_ENABLE(cxx, | AC_ARG_ENABLE(cxx, | ||||
[ --enable-cxx C++ bindings (autodetected)]) | [ --enable-cxx C++ bindings (autodetected)]) | ||||
AC_ARG_ENABLE(ruby, | AC_ARG_ENABLE(ruby, | ||||
@@ -408,6 +410,48 @@ if test "${enable_csharp}" != "no"; then | |||||
fi | fi | ||||
AM_CONDITIONAL(USE_CSHARP, test "${ac_cv_my_have_csharp}" = "yes") | AM_CONDITIONAL(USE_CSHARP, test "${ac_cv_my_have_csharp}" = "yes") | ||||
# Build the Java bindings? | |||||
ac_cv_my_have_java="no" | |||||
if test "${enable_java}" != "no"; then | |||||
AC_PATH_PROG(JAVAC, javac, no) | |||||
AC_PATH_PROG(JAVAH, javah, no) | |||||
AC_PATH_PROG(JAR, jar, no) | |||||
if test "${JAVAC}" != "no" -a "${JAVAH}" != "no" -a "${JAR}" != "no"; then | |||||
if test "$JAVA_HOME" = ""; then | |||||
# Try to resolve JAVA_HOME | |||||
JAVAC_EXE="$JAVAC" | |||||
# Follow symlinks | |||||
while test -h "$JAVAC_EXE"; do | |||||
ls=`ls -ld "$JAVAC_EXE"` | |||||
link=`expr "$ls" : '.*-> \(.*\)$'` | |||||
if expr "$link" : '/.*' > /dev/null; then | |||||
JAVAC_EXE="$link" | |||||
else | |||||
JAVAC_EXE="`dirname "$JAVAC_EXE"`/$link" | |||||
fi | |||||
done | |||||
JAVA_HOME="`dirname $JAVAC_EXE`/.." | |||||
fi | |||||
# Include path to jni.h | |||||
JAVA_CFLAGS="${JAVA_CFLAGS} -I$JAVA_HOME/include" | |||||
# Add the OS specific include path | |||||
for dir in $JAVA_HOME/include/*; do | |||||
if test -f "$dir/jni_md.h"; then | |||||
JAVA_CFLAGS="${JAVA_CFLAGS} -I$dir" | |||||
fi | |||||
done | |||||
AC_SUBST(JAVA_CFLAGS) | |||||
AC_SUBST(JAVA_LIBS) | |||||
AC_LANG_PUSH(C) | |||||
CPPFLAGS="${CPPFLAGS} ${JAVA_CFLAGS}" | |||||
AC_CHECK_HEADERS([jni.h], | |||||
[ac_cv_my_have_java="yes" | |||||
CACA_BINDINGS="${CACA_BINDINGS} Java"]) | |||||
AC_LANG_POP(C) | |||||
fi | |||||
fi | |||||
AM_CONDITIONAL(USE_JAVA, test "${ac_cv_my_have_java}" = "yes") | |||||
# Build the Ruby bindings? | # Build the Ruby bindings? | ||||
ac_cv_my_have_ruby="no" | ac_cv_my_have_ruby="no" | ||||
if test "${enable_ruby}" != "no"; then | if test "${enable_ruby}" != "no"; then | ||||
@@ -506,6 +550,7 @@ AC_CONFIG_FILES([ | |||||
examples/Makefile | examples/Makefile | ||||
test/Makefile | test/Makefile | ||||
tools/Makefile | tools/Makefile | ||||
java/Makefile | |||||
caca-sharp/Makefile | caca-sharp/Makefile | ||||
cxx/Makefile | cxx/Makefile | ||||
python/Makefile | python/Makefile | ||||
@@ -0,0 +1,3 @@ | |||||
libjava.jar | |||||
org_zoy_caca_*.h | |||||
org/zoy/caca/*.class |
@@ -0,0 +1,94 @@ | |||||
# $Id$ | |||||
jnidir = $(libdir)/jni | |||||
if USE_JAVA | |||||
jni_LTLIBRARIES = libcaca-java.la | |||||
endif | |||||
java_src = $(wildcard $(srcdir)/org/zoy/caca/*.java) | |||||
java_jar = libjava.jar | |||||
java_jni_headers = \ | |||||
org_zoy_caca_Attribute.h \ | |||||
org_zoy_caca_Caca.h \ | |||||
org_zoy_caca_Canvas.h \ | |||||
org_zoy_caca_Display.h \ | |||||
org_zoy_caca_Dither.h \ | |||||
org_zoy_caca_Event.h \ | |||||
org_zoy_caca_Font.h | |||||
java_jni_src = \ | |||||
org_zoy_caca_Attribute.c \ | |||||
org_zoy_caca_Caca.c \ | |||||
org_zoy_caca_Canvas.c \ | |||||
org_zoy_caca_Display.c \ | |||||
org_zoy_caca_Dither.c \ | |||||
org_zoy_caca_Event.c \ | |||||
org_zoy_caca_Font.c | |||||
java_jni_classes = \ | |||||
org/zoy/caca/Attribute.class \ | |||||
org/zoy/caca/Caca.class \ | |||||
org/zoy/caca/Canvas.class \ | |||||
org/zoy/caca/Display.class \ | |||||
org/zoy/caca/Dither.class \ | |||||
org/zoy/caca/Event.class \ | |||||
org/zoy/caca/Font.class | |||||
JAVAH_FLAGS = -d . -classpath . | |||||
$(java_jni_classes): $(java_src) | |||||
$(JAVAC) -d . $(java_src) | |||||
$(JAR) -cf $(java_jar) org | |||||
# Javah does not update the file if it detects that there is nothing to do, | |||||
# hence the `touch` so that javah is not run at every `make`. | |||||
org_zoy_caca_Attribute.h: org/zoy/caca/Attribute.class | |||||
$(JAVAH) $(JAVAH_FLAGS) org.zoy.caca.Attribute | |||||
@touch org_zoy_caca_Attribute.h | |||||
org_zoy_caca_Caca.h: org/zoy/caca/Caca.class | |||||
$(JAVAH) $(JAVAH_FLAGS) org.zoy.caca.Caca | |||||
@touch org_zoy_caca_Caca.h | |||||
org_zoy_caca_Canvas.h: org/zoy/caca/Canvas.class | |||||
$(JAVAH) $(JAVAH_FLAGS) org.zoy.caca.Canvas | |||||
@touch org_zoy_caca_Canvas.h | |||||
org_zoy_caca_Display.h: org/zoy/caca/Display.class | |||||
$(JAVAH) $(JAVAH_FLAGS) org.zoy.caca.Display | |||||
@touch org_zoy_caca_Display.h | |||||
org_zoy_caca_Dither.h: org/zoy/caca/Dither.class | |||||
$(JAVAH) $(JAVAH_FLAGS) org.zoy.caca.Dither | |||||
@touch org_zoy_caca_Dither.h | |||||
org_zoy_caca_Event.h: org/zoy/caca/Event.class | |||||
$(JAVAH) $(JAVAH_FLAGS) org.zoy.caca.Event | |||||
@touch org_zoy_caca_Event.h | |||||
org_zoy_caca_Font.h: org/zoy/caca/Font.class | |||||
$(JAVAH) $(JAVAH_FLAGS) org.zoy.caca.Font | |||||
@touch org_zoy_caca_Font.h | |||||
CLEANFILES = org/zoy/caca/*.class org_zoy_caca_[A-Z]*.h $(java_jar) | |||||
EXTRA_DIST = README | |||||
if USE_JAVA | |||||
BUILT_SOURCES = $(java_jni_headers) $(java_jni_classes) | |||||
libcaca_java_la_CPPFLAGS = $(JAVA_CFLAGS) | |||||
libcaca_java_la_SOURCES = \ | |||||
caca_java_common.h \ | |||||
caca_java_common.c \ | |||||
$(java_jni_src) | |||||
#nodist_libcaca_java_la_SOURCES = \ | |||||
# $(java_jni_headers) | |||||
libcaca_java_la_LDFLAGS = -shared $(JAVA_LIBS) | |||||
libcaca_java_la_LIBADD = ../caca/libcaca.la | |||||
libcaca_java_ladir = $(datadir)/java | |||||
libcaca_java_la_DATA = $(java_jar) | |||||
endif |
@@ -0,0 +1,20 @@ | |||||
$Id$ | |||||
Building the libcaca Java bindings | |||||
o In the configure step, ensure the --enable-java flag is turned on. | |||||
o `make install` will install: | |||||
- libjava.so in ${libdir}/jni, | |||||
- libjava.jar in ${datadir}/java. | |||||
Using the libcaca Java bindings | |||||
o Look into examples/ for source code examples. | |||||
o Running an application which uses the libcaca Java bindings: | |||||
java -Djava.library.path=${libdir}/jni \ | |||||
-cp ${datadir}/java/libjava.jar:<classpath> <class name> | |||||
@@ -0,0 +1,31 @@ | |||||
/* | |||||
* libcaca Java bindings for libcaca | |||||
* Copyright (c) 2009 Adrien Grand <jpountz@dinauz.org> | |||||
* | |||||
* $Id$ | |||||
* | |||||
* 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://sam.zoy.org/wtfpl/COPYING for more details. | |||||
*/ | |||||
#include "caca_java_common.h" | |||||
jobjectArray caca_java_to_string_array(JNIEnv *env, const char *const *v) | |||||
{ | |||||
jclass java_lang_string = (*env)->FindClass(env, "java/lang/String"); | |||||
jsize size; | |||||
jsize i; | |||||
for (size = 0; v[size]; ++size); | |||||
jobjectArray ret = (*env)->NewObjectArray(env, size, java_lang_string, NULL); | |||||
for (i = 0; i < size; ++i) | |||||
{ | |||||
(*env)->SetObjectArrayElement(env, ret, i, (*env)->NewStringUTF(env, v[i])); | |||||
} | |||||
return ret; | |||||
} | |||||
@@ -0,0 +1,23 @@ | |||||
/* | |||||
* libcaca Java bindings for libcaca | |||||
* Copyright (c) 2009 Adrien Grand <jpountz@dinauz.org> | |||||
* | |||||
* $Id$ | |||||
* | |||||
* 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://sam.zoy.org/wtfpl/COPYING for more details. | |||||
*/ | |||||
#ifndef __CACA_JAVA_COMMON_H__ | |||||
#define __CACA_JAVA_COMMON_H__ | |||||
#include <jni.h> | |||||
#define THROW_EX(msg) (*env)->ThrowNew(env, (*env)->FindClass(env, "org/zoy/caca/CacaException"), msg) | |||||
jobjectArray caca_java_to_string_array(JNIEnv *env, const char *const *v); | |||||
#endif |
@@ -0,0 +1,54 @@ | |||||
/** | |||||
* libcaca Java bindings for libcaca | |||||
* Copyright (c) 2009 Adrien Grand <jpountz@dinauz.org> | |||||
* | |||||
* $Id$ | |||||
* | |||||
* 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://sam.zoy.org/wtfpl/COPYING for more details. | |||||
*/ | |||||
import org.zoy.caca.Canvas; | |||||
import org.zoy.caca.Color; | |||||
import org.zoy.caca.Display; | |||||
import org.zoy.caca.Event; | |||||
import org.zoy.caca.TimeoutException; | |||||
public class Driver { | |||||
public static void main(String[] args) { | |||||
Canvas cv = new Canvas(32, 16); | |||||
Display dp = new Display(cv); | |||||
cv.setColor(Color.Ansi.WHITE, Color.Ansi.BLACK); | |||||
Display.Driver driver; | |||||
int i, cur = 0; | |||||
while(true) { | |||||
cv.put(1, 0, "Availabl driver"); | |||||
driver = dp.getDriver(); | |||||
Display.Driver[] list = Display.getDriverList(); | |||||
for (i = 0; i < list.length; i++) { | |||||
if (driver.equals(list[i])) { | |||||
cur = i; | |||||
} | |||||
cv.drawLine(0, 2*i+2, 9999, 2*i+2, ' '); | |||||
cv.put(2, 2*i+2, (cur == i ? "* " : " ") + list[i].getCode() + " " + list[i].getDescription()); | |||||
} | |||||
cv.put(1, 2*i + 2, "Switching driver in 5 seconds"); | |||||
dp.refresh(); | |||||
try { | |||||
dp.getEvent(Event.Type.KEY_PRESS, 5000000); | |||||
break; | |||||
} catch(TimeoutException e) { | |||||
// Let's continue | |||||
} | |||||
cur++; | |||||
if (list[cur].getCode().equals("raw")) cur++; | |||||
if (cur >= list.length) cur = 0; | |||||
dp.setDriver(list[cur]); | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,38 @@ | |||||
/** | |||||
* libcaca Java bindings for libcaca | |||||
* Copyright (c) 2009 Adrien Grand <jpountz@dinauz.org> | |||||
* | |||||
* $Id$ | |||||
* | |||||
* 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://sam.zoy.org/wtfpl/COPYING for more details. | |||||
*/ | |||||
import org.zoy.caca.Canvas; | |||||
import org.zoy.caca.Color; | |||||
import org.zoy.caca.Display; | |||||
import org.zoy.caca.Event; | |||||
public class TrueColor { | |||||
public static void main(String[] args) { | |||||
Canvas cv = new Canvas(32, 16); | |||||
Display dp = new Display(cv); | |||||
for (int y = 0; y < 16; y++) { | |||||
for (int x = 0; x < 16; x++) { | |||||
int bgcolor = 0xff00 | (y << 4) | x; | |||||
int fgcolor = 0xf000 | ((15 - y) << 4) | ((15 - x) << 8); | |||||
cv.setColor(new Color.Argb(bgcolor), new Color.Argb(fgcolor)); | |||||
cv.put(x*2, y, "CA"); | |||||
} | |||||
} | |||||
cv.setColor(Color.Ansi.WHITE, Color.Ansi.LIGHTBLUE); | |||||
cv.put(2, 1, "truecolor libcaca"); | |||||
dp.refresh(); | |||||
dp.getEvent(Event.Type.KEY_PRESS, -1); | |||||
} | |||||
} |
@@ -0,0 +1,60 @@ | |||||
/** | |||||
* libcaca Java bindings for libcaca | |||||
* Copyright (c) 2009 Adrien Grand <jpountz@dinauz.org> | |||||
* | |||||
* $Id$ | |||||
* | |||||
* 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://sam.zoy.org/wtfpl/COPYING for more details. | |||||
*/ | |||||
package org.zoy.caca; | |||||
public class Attribute { | |||||
static { | |||||
Caca.load(); | |||||
} | |||||
private Attribute() {} | |||||
private static final native byte attributeToAnsi(int attr); | |||||
public static byte toAnsi(int attr) { | |||||
return attributeToAnsi(attr); | |||||
} | |||||
private static native byte attributeToAnsiForeground(int attr); | |||||
public byte toAnsiForeground(int attr) { | |||||
return attributeToAnsiForeground(attr); | |||||
} | |||||
private static native byte attributeToAnsiBackground(int attr); | |||||
public byte toAnsiBackground(int attr) { | |||||
return attributeToAnsiBackground(attr); | |||||
} | |||||
private static native short attributeToRgb12Foreground(int attr); | |||||
public static short toRgb12Foreground(int attr) { | |||||
return attributeToRgb12Foreground(attr); | |||||
} | |||||
private static native short attributeToRgb12Background(int attr); | |||||
public static short toRgb12Background(int attr) { | |||||
return attributeToRgb12Background(attr); | |||||
} | |||||
private static native byte[] attributeToArgb64(int attr); | |||||
public static byte[] toArgb64(int attr) { | |||||
return attributeToArgb64(attr); | |||||
} | |||||
} |
@@ -0,0 +1,33 @@ | |||||
/** | |||||
* libcaca Java bindings for libcaca | |||||
* Copyright (c) 2009 Adrien Grand <jpountz@dinauz.org> | |||||
* | |||||
* $Id$ | |||||
* | |||||
* 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://sam.zoy.org/wtfpl/COPYING for more details. | |||||
*/ | |||||
package org.zoy.caca; | |||||
public class Caca { | |||||
static { | |||||
load(); | |||||
} | |||||
private static boolean alreadyLoaded = false; | |||||
synchronized public static void load() { | |||||
if (!alreadyLoaded) { | |||||
System.loadLibrary("java"); | |||||
alreadyLoaded = true; | |||||
} | |||||
} | |||||
public static native String getVersion(); | |||||
} |
@@ -0,0 +1,24 @@ | |||||
/** | |||||
* libcaca Java bindings for libcaca | |||||
* Copyright (c) 2009 Adrien Grand <jpountz@dinauz.org> | |||||
* | |||||
* $Id$ | |||||
* | |||||
* 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://sam.zoy.org/wtfpl/COPYING for more details. | |||||
*/ | |||||
package org.zoy.caca; | |||||
public class CacaException extends RuntimeException { | |||||
private static final long serialVersionUID = 0L; | |||||
public CacaException(String msg) { | |||||
super(msg); | |||||
} | |||||
} |
@@ -0,0 +1,40 @@ | |||||
/** | |||||
* libcaca Java bindings for libcaca | |||||
* Copyright (c) 2009 Adrien Grand <jpountz@dinauz.org> | |||||
* | |||||
* $Id$ | |||||
* | |||||
* 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://sam.zoy.org/wtfpl/COPYING for more details. | |||||
*/ | |||||
package org.zoy.caca; | |||||
public abstract class CacaObject { | |||||
protected String code; | |||||
protected String description; | |||||
public CacaObject(String code, String desc) { | |||||
this.code = code; | |||||
this.description = desc; | |||||
} | |||||
public String getCode() { | |||||
return code; | |||||
} | |||||
public String getDescription() { | |||||
return description; | |||||
} | |||||
@Override | |||||
public boolean equals(Object o) { | |||||
if (o == null) return false; | |||||
if (this.getClass().equals(o.getClass())) { | |||||
CacaObject other = (CacaObject)o; | |||||
return this.code.equals(other.code); | |||||
} | |||||
return false; | |||||
} | |||||
} |
@@ -0,0 +1,377 @@ | |||||
/** | |||||
* libcaca Java bindings for libcaca | |||||
* Copyright (c) 2009 Adrien Grand <jpountz@dinauz.org> | |||||
* | |||||
* $Id$ | |||||
* | |||||
* 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://sam.zoy.org/wtfpl/COPYING 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(); | |||||
} | |||||
} |
@@ -0,0 +1,84 @@ | |||||
/** | |||||
* libcaca Java bindings for libcaca | |||||
* Copyright (c) 2009 Adrien Grand <jpountz@dinauz.org> | |||||
* | |||||
* $Id$ | |||||
* | |||||
* 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://sam.zoy.org/wtfpl/COPYING for more details. | |||||
*/ | |||||
package org.zoy.caca; | |||||
public abstract class Color { | |||||
public static enum Ansi { | |||||
BLACK((byte)0x00), | |||||
BLUE((byte)0x01), | |||||
GREEN((byte)0x02), | |||||
CYAN((byte)0x03), | |||||
RED((byte)0x04), | |||||
MAGENTA((byte)0x05), | |||||
BROWN((byte)0x06), | |||||
LIGHTGREY((byte)0x07), | |||||
DARKGREY((byte)0x08), | |||||
LIGHTBLUE((byte)0x09), | |||||
LIGHTGREEN((byte)0x0a), | |||||
LIGHTCYAN((byte)0x0b), | |||||
LIGHTRED((byte)0x0c), | |||||
LIGHTMAGENTA((byte)0x0d), | |||||
YELLOW((byte)0x0e), | |||||
WHITE((byte)0x0f), | |||||
DEFAULT((byte)0x10), | |||||
TRANSPARENT((byte)0x20); | |||||
private Ansi(byte code) { | |||||
this.code = code; | |||||
} | |||||
protected byte code; | |||||
public static Ansi forCode(byte code) { | |||||
Ansi[] values = Ansi.values(); | |||||
for (Ansi color : values) { | |||||
if (color.code == code) { | |||||
return color; | |||||
} | |||||
} | |||||
return null; | |||||
} | |||||
} | |||||
// Use ints mostly because it is more convenient (no need to cast) | |||||
public static class Argb { | |||||
public Argb(int code) { | |||||
if (code < 0 || code > Short.MAX_VALUE - Short.MIN_VALUE) { | |||||
throw new IllegalArgumentException("Code should be a 16-bit unsigned integer"); | |||||
} | |||||
this.code = (short)code; | |||||
} | |||||
public Argb(int alpha, int red, int green, int blue) { | |||||
if (alpha < 0 || alpha >15) { | |||||
throw new IllegalArgumentException("alpha should be a 4-bit unsigned integer"); | |||||
} | |||||
if (red < 0 || red >15) { | |||||
throw new IllegalArgumentException("red should be a 4-bit unsigned integer"); | |||||
} | |||||
if (green < 0 || green >15) { | |||||
throw new IllegalArgumentException("green should be a 4-bit unsigned integer"); | |||||
} | |||||
if (blue < 0 || blue >15) { | |||||
throw new IllegalArgumentException("blue should be a 4-bit unsigned integer"); | |||||
} | |||||
this.code = (short)((alpha << 16) + (red << 8) + (green << 4) + blue); | |||||
} | |||||
public short getCode() { | |||||
return code; | |||||
} | |||||
protected short code; | |||||
} | |||||
} |
@@ -0,0 +1,170 @@ | |||||
/** | |||||
* libcaca Java bindings for libcaca | |||||
* Copyright (c) 2009 Adrien Grand <jpountz@dinauz.org> | |||||
* | |||||
* $Id$ | |||||
* | |||||
* 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://sam.zoy.org/wtfpl/COPYING 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(); | |||||
} | |||||
} |
@@ -0,0 +1,238 @@ | |||||
/** | |||||
* libcaca Java bindings for libcaca | |||||
* Copyright (c) 2009 Adrien Grand <jpountz@dinauz.org> | |||||
* | |||||
* $Id$ | |||||
* | |||||
* 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://sam.zoy.org/wtfpl/COPYING for more details. | |||||
*/ | |||||
package org.zoy.caca; | |||||
public class Dither extends NativeObject { | |||||
static { | |||||
Caca.load(); | |||||
} | |||||
private native static long createDither(int bitmapDepth, int weight, int height, | |||||
int pitch, int redMask, int greenMask, int blueMask, int alphaMask); | |||||
public Dither(int bitmapDepth, int weight, int height, int pitch, int redMask, | |||||
int greenMask, int blueMask, int alphaMask) { | |||||
this.ptr = createDither(bitmapDepth, weight, height, pitch, redMask, greenMask, | |||||
blueMask, alphaMask); | |||||
} | |||||
private static native void setDitherPalette(long ditherPtr, int[] red, int[] green, | |||||
int[] blue, int[] alpha); | |||||
public void setPalette(int[] red, int[] green, int[] blue, int[] alpha) { | |||||
if (red.length != 256 || | |||||
green.length != 256 || | |||||
blue.length != 256 || | |||||
alpha.length !=256) { | |||||
throw new IllegalArgumentException("Palette components must have 256 elements"); | |||||
} | |||||
setDitherPalette(ptr, red, green, blue, alpha); | |||||
} | |||||
private static native void setDitherBrightness(long ditherPtr, float brightness); | |||||
public void setBrightness(float brightness) { | |||||
setDitherBrightness(ptr, brightness); | |||||
} | |||||
private static native float getDitherBrightness(long ditherPtr); | |||||
public float getBrightness() { | |||||
return getDitherBrightness(ptr); | |||||
} | |||||
private static native void setDitherGamma(long ditherPtr, float gama); | |||||
public void setGamma(float gama) { | |||||
setDitherGamma(ptr, gama); | |||||
} | |||||
private static native float getDitherGamma(long ditherPtr); | |||||
public float getGamma() { | |||||
return getDitherGamma(ptr); | |||||
} | |||||
private static native void setDitherContrast(long ditherPtr, float contrast); | |||||
public void setContrast(float contrast) { | |||||
setDitherContrast(ptr, contrast); | |||||
} | |||||
private static native float getDitherContrast(long ditherPtr); | |||||
public float getContrast() { | |||||
return getDitherContrast(ptr); | |||||
} | |||||
public static class AntiAliasing extends CacaObject { | |||||
public AntiAliasing(String code, String desc) { | |||||
super(code, desc); | |||||
} | |||||
public static AntiAliasing forCode(Dither dither, String code) { | |||||
for (AntiAliasing aa : dither.getAntiAliasingList()) { | |||||
if (aa.code.equals(code)) { | |||||
return aa; | |||||
} | |||||
} | |||||
return null; | |||||
} | |||||
} | |||||
private static native String[] getDitherAntiAliasingList(long ditherPtr); | |||||
public AntiAliasing[] getAntiAliasingList() { | |||||
String[] tmp = getDitherAntiAliasingList(ptr); | |||||
AntiAliasing[] aas; | |||||
aas = new AntiAliasing[tmp.length / 2]; | |||||
for (int i = 0; 2*i < tmp.length; i++) { | |||||
aas[i] = new AntiAliasing(tmp[2*i], tmp[2*i+1]); | |||||
} | |||||
return aas; | |||||
} | |||||
private static native void setDitherAntiAliasing(long ditherPtr, String antiAliasing); | |||||
public void setAntiAliasing(AntiAliasing antiAliasing) { | |||||
setDitherAntiAliasing(ptr, antiAliasing.code); | |||||
} | |||||
private static native String getDitherAntiAliasing(long ditherPtr); | |||||
public AntiAliasing getAntiAliasing() { | |||||
return AntiAliasing.forCode(this, getDitherAntiAliasing(ptr)); | |||||
} | |||||
public static class Color extends CacaObject { | |||||
public Color(String code, String desc) { | |||||
super(code, desc); | |||||
} | |||||
public static Color forCode(Dither dither, String code) { | |||||
for (Color color : dither.getColorList()) { | |||||
if (color.code.equals(code)) { | |||||
return color; | |||||
} | |||||
} | |||||
return null; | |||||
} | |||||
} | |||||
private static native String[] getDitherColorList(long ditherPtr); | |||||
public Color[] getColorList() { | |||||
String[] tmp = getDitherColorList(ptr); | |||||
Color[] colors = new Color[tmp.length / 2]; | |||||
for (int i = 0; 2*i < tmp.length; i++) { | |||||
colors[i] = new Color(tmp[2*i], tmp[2*i+1]); | |||||
} | |||||
return colors; | |||||
} | |||||
private static native void setDitherColor(long ditherPtr, String color); | |||||
public void setColor(Color color) { | |||||
setDitherColor(ptr, color.code); | |||||
} | |||||
private static native String getDitherColor(long ditherPtr); | |||||
public Color getColor() { | |||||
return Color.forCode(this, getDitherColor(ptr)); | |||||
} | |||||
public static class Charset extends CacaObject { | |||||
public Charset(String code, String desc) { | |||||
super(code, desc); | |||||
} | |||||
public static Charset forCode(Dither dither, String code) { | |||||
for (Charset charset : dither.getCharsetList()) { | |||||
if (charset.code.equals(code)) { | |||||
return charset; | |||||
} | |||||
} | |||||
return null; | |||||
} | |||||
} | |||||
private static native String[] getDitherCharsetList(long charsetPtr); | |||||
public Charset[] getCharsetList() { | |||||
String[] tmp = getDitherCharsetList(ptr); | |||||
Charset[] charsets = new Charset[tmp.length / 2]; | |||||
for (int i = 0; 2*i < tmp.length; i++) { | |||||
charsets[i] = new Charset(tmp[2*i], tmp[2*i+1]); | |||||
} | |||||
return charsets; | |||||
} | |||||
private static native void setDitherCharset(long ditherPtr, String charset); | |||||
public void setCharset(Charset charset) { | |||||
setDitherCharset(ptr, charset.code); | |||||
} | |||||
private static native String getDitherCharset(long ditherPtr); | |||||
public Charset getCharset() { | |||||
return Charset.forCode(this, getDitherCharset(ptr)); | |||||
} | |||||
public static class Algorithm extends CacaObject { | |||||
public Algorithm(String code, String desc) { | |||||
super(code, desc); | |||||
} | |||||
public static Algorithm forCode(Dither dither, String code) { | |||||
for (Algorithm algorithm : dither.getAlgorithmList()) { | |||||
if (algorithm.code.equals(code)) { | |||||
return algorithm; | |||||
} | |||||
} | |||||
return null; | |||||
} | |||||
} | |||||
private static native String[] getDitherAlgorithmList(long ditherPtr); | |||||
public Algorithm[] getAlgorithmList() { | |||||
String[] tmp = getDitherAlgorithmList(ptr); | |||||
Algorithm[] result = new Algorithm[tmp.length / 2]; | |||||
for (int i = 0; 2*i < tmp.length; i++) { | |||||
result[i] = new Algorithm(tmp[2*i], tmp[2*i+1]); | |||||
} | |||||
return result; | |||||
} | |||||
private static native void setDitherAlgorithm(long ditherPtr, String algorithm); | |||||
public void setAlgorithm(Algorithm algorithm) { | |||||
setDitherAlgorithm(ptr, algorithm.code); | |||||
} | |||||
private static native String getDitherAlgorithm(long ditherPtr); | |||||
public Algorithm getAlgorithm() { | |||||
return Algorithm.forCode(this, getDitherAlgorithm(ptr)); | |||||
} | |||||
private static native void freeDither(long ditherPtr); | |||||
@Override | |||||
public void finalize() throws Throwable { | |||||
freeDither(ptr); | |||||
super.finalize(); | |||||
} | |||||
} |
@@ -0,0 +1,184 @@ | |||||
/** | |||||
* libcaca Java bindings for libcaca | |||||
* Copyright (c) 2009 Adrien Grand <jpountz@dinauz.org> | |||||
* | |||||
* $Id$ | |||||
* | |||||
* 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://sam.zoy.org/wtfpl/COPYING for more details. | |||||
*/ | |||||
package org.zoy.caca; | |||||
public class Event extends NativeObject { | |||||
static { | |||||
Caca.load(); | |||||
} | |||||
public static enum Type { | |||||
NONE(0x0000), | |||||
KEY_PRESS(0x0001), | |||||
KEY_RELEASE(0x0002), | |||||
MOUSE_PRESS(0x0004), | |||||
MOUSE_RELEASE(0x0008), | |||||
MOUSE_MOTION(0x0010), | |||||
RESIZE(0x0020), | |||||
QUIT(0x0040), | |||||
ANY(0xffff); | |||||
protected final int code; | |||||
private Type(int code) { | |||||
this.code = code; | |||||
} | |||||
public static Type forCode(int code) { | |||||
Type[] types = Type.values(); | |||||
for (Type type : types) { | |||||
if (type.code == code) { | |||||
return type; | |||||
} | |||||
} | |||||
return null; | |||||
} | |||||
} | |||||
public static enum Key { | |||||
CTRL_A(0x01), | |||||
CTRL_B(0x02), | |||||
CTRL_C(0x03), | |||||
CTRL_D(0x04), | |||||
CTRL_E(0x05), | |||||
CTRL_F(0x06), | |||||
CTRL_G(0x07), | |||||
BACKSPACE(0x08), | |||||
TAB(0x09), | |||||
CTRL_J(0x0a), | |||||
CTRL_K(0x0b), | |||||
CTRL_L(0x0c), | |||||
RETURN(0x0d), | |||||
CTRL_N(0x0e), | |||||
CTRL_O(0x0f), | |||||
CTRL_P(0x10), | |||||
CTRL_Q(0x11), | |||||
CTRL_R(0x12), | |||||
PAUSE(0x13), | |||||
CTRL_T(0x14), | |||||
CTRL_U(0x15), | |||||
CTRL_V(0x16), | |||||
CTRL_W(0x17), | |||||
CTRL_X(0x18), | |||||
CTRL_Y(0x19), | |||||
CTRL_Z(0x20), | |||||
UP(0x111), | |||||
DOWN(0x112), | |||||
LEFT(0x113), | |||||
RIGHT(0x114), | |||||
INSERT(0x115), | |||||
HOME(0x116), | |||||
END(0x117), | |||||
PAGE_HOME(0x118), | |||||
PAGE_DOWN(0x119), | |||||
F1(0x11a), | |||||
F2(0x11b), | |||||
F3(0x11c), | |||||
F4(0x11d), | |||||
F5(0x11e), | |||||
F6(0x11f), | |||||
F7(0x120), | |||||
F8(0x121), | |||||
F9(0x122), | |||||
F10(0x123), | |||||
F11(0x124), | |||||
F12(0x125), | |||||
F13(0x126), | |||||
F14(0x127), | |||||
F15(0x128); | |||||
protected final int code; | |||||
private Key(int code) { | |||||
this.code = code; | |||||
} | |||||
public static Key forCode(int code) { | |||||
Key[] keys = Key.values(); | |||||
for (Key key : keys) { | |||||
if (key.code == code) { | |||||
return key; | |||||
} | |||||
} | |||||
return null; | |||||
} | |||||
} | |||||
protected Event(long ptr) { | |||||
this.ptr = ptr; | |||||
} | |||||
private static native int getEventType(long eventPtr); | |||||
public Type getType() { | |||||
return Type.forCode(getEventType(ptr)); | |||||
} | |||||
private static native int getEventKeyCh(long eventPtr); | |||||
public int getKeyCh() { | |||||
return getEventKeyCh(ptr); | |||||
} | |||||
private static native int getEventKeyUtf32(long eventPtr); | |||||
public int getKeyUtf32() { | |||||
return getEventKeyUtf32(ptr); | |||||
} | |||||
private static native String getEventKeyUtf8(long eventPtr); | |||||
public String getKeyUtf8() { | |||||
return getEventKeyUtf8(ptr); | |||||
} | |||||
private static native int getEventMouseButton(long eventPtr); | |||||
public int getMouseButton() { | |||||
return getEventMouseButton(ptr); | |||||
} | |||||
private static native int getEventMouseX(long eventPtr); | |||||
public int getMouseX() { | |||||
return getEventMouseX(ptr); | |||||
} | |||||
private static native int getEventMouseY(long eventPtr); | |||||
public int getMouseY() { | |||||
return getEventMouseY(ptr); | |||||
} | |||||
private static native int getEventResizeWidth(long eventPtr); | |||||
public int getResizeWidth() { | |||||
return getEventResizeWidth(ptr); | |||||
} | |||||
private static native int getEventResizeHeight(long eventPtr); | |||||
public int getResizeHeight() { | |||||
return getEventResizeHeight(ptr); | |||||
} | |||||
private static native void freeEvent(long eventPtr); | |||||
@Override | |||||
public void finalize() throws Throwable { | |||||
freeEvent(ptr); | |||||
super.finalize(); | |||||
} | |||||
} |
@@ -0,0 +1,61 @@ | |||||
/** | |||||
* libcaca Java bindings for libcaca | |||||
* Copyright (c) 2009 Adrien Grand <jpountz@dinauz.org> | |||||
* | |||||
* $Id$ | |||||
* | |||||
* 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://sam.zoy.org/wtfpl/COPYING for more details. | |||||
*/ | |||||
package org.zoy.caca; | |||||
public class Font extends NativeObject { | |||||
static { | |||||
Caca.load(); | |||||
} | |||||
private static native long loadFont(String fontName); | |||||
private static native long loadFont(byte[] fontBytes); | |||||
public Font(String fontName) { | |||||
ptr = loadFont(fontName); | |||||
} | |||||
public Font(byte[] fontBytes) { | |||||
ptr = loadFont(fontBytes); | |||||
} | |||||
public static native String[] getFontNames(); | |||||
private static native int getFontWidth(long fontPtr); | |||||
public int getWidth() { | |||||
return getFontWidth(ptr); | |||||
} | |||||
private static native int getFontHeight(long fontPtr); | |||||
public int getHeight() { | |||||
return getFontHeight(ptr); | |||||
} | |||||
private static native int[][] getFontBlocks(long fontPtr); | |||||
public int[][] getBlocks() { | |||||
return getFontBlocks(ptr); | |||||
} | |||||
private static native void freeFont(long fontPtr); | |||||
@Override | |||||
public void finalize() throws Throwable { | |||||
freeFont(ptr); | |||||
super.finalize(); | |||||
} | |||||
} |
@@ -0,0 +1,20 @@ | |||||
/** | |||||
* libcaca Java bindings for libcaca | |||||
* Copyright (c) 2009 Adrien Grand <jpountz@dinauz.org> | |||||
* | |||||
* $Id$ | |||||
* | |||||
* 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://sam.zoy.org/wtfpl/COPYING for more details. | |||||
*/ | |||||
package org.zoy.caca; | |||||
public abstract class NativeObject { | |||||
protected long ptr; | |||||
} |
@@ -0,0 +1,24 @@ | |||||
/** | |||||
* libcaca Java bindings for libcaca | |||||
* Copyright (c) 2009 Adrien Grand <jpountz@dinauz.org> | |||||
* | |||||
* $Id$ | |||||
* | |||||
* 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://sam.zoy.org/wtfpl/COPYING for more details. | |||||
*/ | |||||
package org.zoy.caca; | |||||
public class TimeoutException extends RuntimeException { | |||||
private static final long serialVersionUID = 1L; | |||||
public TimeoutException(String msg) { | |||||
super(msg); | |||||
} | |||||
} |
@@ -0,0 +1,62 @@ | |||||
/* | |||||
* libcaca Java bindings for libcaca | |||||
* Copyright (c) 2009 Adrien Grand <jpountz@dinauz.org> | |||||
* | |||||
* $Id$ | |||||
* | |||||
* 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://sam.zoy.org/wtfpl/COPYING for more details. | |||||
*/ | |||||
#include "org_zoy_caca_Attribute.h" | |||||
#include "caca.h" | |||||
JNIEXPORT jbyte JNICALL | |||||
Java_org_zoy_caca_Attribute_attributeToAnsi(JNIEnv *env, jclass cls, jint attr) | |||||
{ | |||||
return caca_attr_to_ansi(attr); | |||||
} | |||||
JNIEXPORT jbyte JNICALL | |||||
Java_org_zoy_caca_Attribute_attributeToAnsiForeground(JNIEnv *env, jclass cls, jint attr) | |||||
{ | |||||
return caca_attr_to_ansi_fg(attr); | |||||
} | |||||
JNIEXPORT jbyte JNICALL | |||||
Java_org_zoy_caca_Attribute_attributeToAnsiBackground(JNIEnv *env, jclass cls, jint attr) | |||||
{ | |||||
return caca_attr_to_ansi_bg(attr); | |||||
} | |||||
JNIEXPORT jshort JNICALL | |||||
Java_org_zoy_caca_Attribute_attributeToRgb12Foreground(JNIEnv *env, jclass cls, jint attr) | |||||
{ | |||||
return caca_attr_to_rgb12_fg(attr); | |||||
} | |||||
JNIEXPORT jshort JNICALL | |||||
Java_org_zoy_caca_Attribute_attributeToRgb12Background(JNIEnv *env, jclass cls, jint attr) | |||||
{ | |||||
return caca_attr_to_rgb12_bg(attr); | |||||
} | |||||
JNIEXPORT jbyteArray JNICALL | |||||
Java_org_zoy_caca_Attribute_attributeToArgb64(JNIEnv *env, jclass cls, jint attr) | |||||
{ | |||||
jbyteArray ret; | |||||
jbyte *elems; | |||||
ret = (*env)->NewByteArray(env, 8); | |||||
elems = (*env)->GetByteArrayElements(env, ret, 0); | |||||
caca_attr_to_argb64(attr, elems); | |||||
(*env)->ReleaseByteArrayElements(env, ret, elems, 0); | |||||
return ret; | |||||
} | |||||
@@ -0,0 +1,24 @@ | |||||
/** | |||||
* libcaca Java bindings for libcaca | |||||
* Copyright (c) 2009 Adrien Grand <jpountz@dinauz.org> | |||||
* | |||||
* $Id$ | |||||
* | |||||
* 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://sam.zoy.org/wtfpl/COPYING for more details. | |||||
*/ | |||||
#include "org_zoy_caca_Caca.h" | |||||
#include "caca.h" | |||||
JNIEXPORT jstring JNICALL | |||||
Java_org_zoy_caca_Caca_getVersion(JNIEnv *env, jclass cls) | |||||
{ | |||||
const char *version = caca_get_version(); | |||||
return (*env)->NewStringUTF(env, version); | |||||
} |
@@ -0,0 +1,389 @@ | |||||
/** | |||||
* libcaca Java bindings for libcaca | |||||
* Copyright (c) 2009 Adrien Grand <jpountz@dinauz.org> | |||||
* | |||||
* $Id$ | |||||
* | |||||
* 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://sam.zoy.org/wtfpl/COPYING for more details. | |||||
*/ | |||||
#include "org_zoy_caca_Canvas.h" | |||||
#include "caca.h" | |||||
JNIEXPORT jint JNICALL | |||||
Java_org_zoy_caca_Canvas_getCursorX(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
return caca_get_cursor_x((caca_canvas_t *)ptr); | |||||
} | |||||
JNIEXPORT jint JNICALL | |||||
Java_org_zoy_caca_Canvas_getCursorY (JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
return caca_get_cursor_y((caca_canvas_t *)ptr); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_setCursorXY(JNIEnv *env, jclass cls, jlong ptr, jint x, jint y) | |||||
{ | |||||
caca_gotoxy((caca_canvas_t *)ptr, x, y); | |||||
} | |||||
JNIEXPORT jint JNICALL | |||||
Java_org_zoy_caca_Canvas_getHandleX(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
return caca_get_canvas_handle_x((caca_canvas_t *)ptr); | |||||
} | |||||
JNIEXPORT jint JNICALL | |||||
Java_org_zoy_caca_Canvas_getHandleY(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
return caca_get_canvas_handle_x((caca_canvas_t *)ptr); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_setHandleXY(JNIEnv *env, jclass cls, jlong ptr, jint x, jint y) | |||||
{ | |||||
caca_set_canvas_handle((caca_canvas_t *)ptr, x, y); | |||||
} | |||||
JNIEXPORT jlong JNICALL | |||||
Java_org_zoy_caca_Canvas_createCanvas(JNIEnv *env, jclass cls, jint w, jint h) | |||||
{ | |||||
return (jlong)caca_create_canvas(w, h); | |||||
} | |||||
JNIEXPORT jint JNICALL | |||||
Java_org_zoy_caca_Canvas_getCanvasWidth(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
return caca_get_canvas_width((caca_canvas_t *)ptr); | |||||
} | |||||
JNIEXPORT jint JNICALL | |||||
Java_org_zoy_caca_Canvas_getCanvasHeight(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
return caca_get_canvas_height((caca_canvas_t *)ptr); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_setCanvasSize(JNIEnv *env, jclass cls, jlong ptr, jint w, jint h) | |||||
{ | |||||
caca_set_canvas_size((caca_canvas_t *)ptr, w, h); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_clearCanvas(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
caca_clear_canvas((caca_canvas_t *)ptr); | |||||
} | |||||
JNIEXPORT jint JNICALL | |||||
Java_org_zoy_caca_Canvas_getCanvasChar(JNIEnv *env, jclass cls, jlong ptr, jint x, jint y) | |||||
{ | |||||
return caca_get_char((caca_canvas_t *)ptr, x, y); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_putCanvasChar(JNIEnv *env, jclass cls, jlong ptr, jint x, jint y, jint ch) | |||||
{ | |||||
caca_put_char((caca_canvas_t *)ptr, x, y, ch); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_putCanvasString(JNIEnv *env, jclass cls, jlong ptr, jint x, jint y, jstring s) | |||||
{ | |||||
const char *chars; | |||||
chars = (*env)->GetStringUTFChars(env, s, 0); | |||||
caca_put_str((caca_canvas_t *)ptr, x, y, chars); | |||||
(*env)->ReleaseStringUTFChars(env, s, chars); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_blitCanvas(JNIEnv *env, jclass cls, jlong ptr, jint x, | |||||
jint y, jlong cv, jlong mask) | |||||
{ | |||||
caca_blit((caca_canvas_t *)ptr, x, y, (caca_canvas_t *)cv, (caca_canvas_t *)mask); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_setCanvasBoundaries(JNIEnv *env, jclass cls, jlong ptr, | |||||
jint x, jint y, jint w, jint h) | |||||
{ | |||||
caca_set_canvas_boundaries((caca_canvas_t *)ptr, x, y, w, h); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_invertCanvas(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
caca_invert((caca_canvas_t *)ptr); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_flipCanvas(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
caca_flip((caca_canvas_t *)ptr); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_flopCanvas(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
caca_flop((caca_canvas_t *)ptr); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_rotateCanvas180(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
caca_rotate_180((caca_canvas_t *)ptr); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_rotateCanvasLeft(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
caca_rotate_left((caca_canvas_t *)ptr); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_rotateCanvasRight(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
caca_rotate_right((caca_canvas_t *)ptr); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_stretchCanvasLeft(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
caca_stretch_left((caca_canvas_t *)ptr); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_stretchCanvasRight(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
caca_stretch_right((caca_canvas_t *)ptr); | |||||
} | |||||
JNIEXPORT jint JNICALL | |||||
Java_org_zoy_caca_Canvas_getCanvasAttribute(JNIEnv *env, jclass cls, jlong ptr, jint x, jint y) | |||||
{ | |||||
return caca_get_attr((caca_canvas_t *)ptr, x, y); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_setCanvasAttribute(JNIEnv *env, jclass cls, jlong ptr, jint attr) | |||||
{ | |||||
caca_set_attr((caca_canvas_t *)ptr, attr); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_putCanvasAttribute(JNIEnv *env, jclass cls, jlong ptr, | |||||
jint x, jint y, jint attr) | |||||
{ | |||||
caca_put_attr((caca_canvas_t *)ptr, x, y, attr); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_setCanvasColorAnsi(JNIEnv *env, jclass cls, jlong ptr, jbyte fg, jbyte bg) | |||||
{ | |||||
caca_set_color_ansi((caca_canvas_t *)ptr, fg, bg); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_setCanvasColorArgb(JNIEnv *env, jclass cls, jlong ptr, jshort fg, jshort bg) | |||||
{ | |||||
caca_set_color_argb((caca_canvas_t *)ptr, fg, bg); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_canvasDrawLine(JNIEnv *env, jclass cls, jlong ptr, jint x1, jint y1, | |||||
jint x2, jint y2, jint ch) | |||||
{ | |||||
caca_draw_line((caca_canvas_t *)ptr, x1, y1, x2, y2, ch); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_canvasDrawPolyline(JNIEnv *env, jclass cls, jlong ptr, | |||||
jintArray xs, jintArray ys, jint ch) | |||||
{ | |||||
jsize size; | |||||
jint *x_elems; | |||||
jint *y_elems; | |||||
size = (*env)->GetArrayLength(env, xs); | |||||
x_elems = (*env)->GetIntArrayElements(env, xs, 0); | |||||
y_elems = (*env)->GetIntArrayElements(env, ys, 0); | |||||
caca_draw_polyline((caca_canvas_t *)ptr, x_elems, y_elems, size, ch); | |||||
(*env)->ReleaseIntArrayElements(env, xs, x_elems, 0); | |||||
(*env)->ReleaseIntArrayElements(env, ys, y_elems, 0); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_canvasDrawThinLine(JNIEnv *env, jclass cls, jlong ptr, | |||||
jint x1, jint y1, jint x2, jint y2) | |||||
{ | |||||
caca_draw_thin_line((caca_canvas_t *)ptr, x1, y1, x2, y2); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_canvasDrawThinPolyline(JNIEnv *env, jclass cls, jlong ptr, | |||||
jintArray xs, jintArray ys) | |||||
{ | |||||
jsize size; | |||||
jint *x_elems; | |||||
jint *y_elems; | |||||
size = (*env)->GetArrayLength(env, xs); | |||||
x_elems = (*env)->GetIntArrayElements(env, xs, 0); | |||||
y_elems = (*env)->GetIntArrayElements(env, ys, 0); | |||||
caca_draw_thin_polyline((caca_canvas_t *)ptr, x_elems, y_elems, size); | |||||
(*env)->ReleaseIntArrayElements(env, xs, x_elems, 0); | |||||
(*env)->ReleaseIntArrayElements(env, ys, y_elems, 0); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_canvasDrawCircle(JNIEnv * env, jclass cls, jlong ptr, | |||||
jint x, jint y, jint r, jint ch) | |||||
{ | |||||
caca_draw_circle((caca_canvas_t *)ptr, x, y, r, ch); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_canvasDrawEllipse(JNIEnv *env, jclass cls, jlong ptr, | |||||
jint x, jint y, jint a, jint b, jint ch) | |||||
{ | |||||
caca_draw_ellipse((caca_canvas_t *)ptr, x, y, a, b, ch); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_canvasDrawThinEllipse(JNIEnv *env, jclass cls, jlong ptr, | |||||
jint x, jint y, jint a, jint b) | |||||
{ | |||||
caca_draw_thin_ellipse((caca_canvas_t *)ptr, x, y, a, b); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_canvasFillEllipse(JNIEnv *env, jclass cls, jlong ptr, jint x, | |||||
jint y, jint a, jint b, jint ch) | |||||
{ | |||||
caca_fill_ellipse((caca_canvas_t *)ptr, x, y, a, b, ch); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_canvasDrawBox(JNIEnv *env, jclass cls, jlong ptr, jint x, jint y, | |||||
jint w, jint h, jint ch) | |||||
{ | |||||
caca_draw_box((caca_canvas_t *)ptr, x, y, w, h, ch); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_canvasDrawThinBox(JNIEnv *env, jclass cls, jlong ptr, | |||||
jint x, jint y, jint w, jint h) | |||||
{ | |||||
caca_draw_thin_box((caca_canvas_t *)ptr, x, y, w, h); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_canvasDrawCp437Box(JNIEnv *env, jclass cls, jlong ptr, | |||||
jint x, jint y, jint w, jint h) | |||||
{ | |||||
caca_draw_cp437_box((caca_canvas_t *)ptr, x, y, w, h); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_canvasFillBox(JNIEnv *env, jclass cls, jlong ptr, | |||||
jint x, jint y, jint w, jint h, jint ch) | |||||
{ | |||||
caca_fill_box((caca_canvas_t *)ptr, x, y, w, h, ch); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_canvasDrawTriangle(JNIEnv *env, jclass cls, jlong ptr, | |||||
jint x1, jint y1, jint x2, jint y2, | |||||
jint x3, jint y3, jint ch) | |||||
{ | |||||
caca_draw_triangle((caca_canvas_t *)ptr, x1, y1, x2, y2, x3, y3, ch); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_canvasDrawThinTriangle(JNIEnv *env, jclass cls, jlong ptr, | |||||
jint x1, jint y1, jint x2, jint y2, | |||||
jint x3, jint y3) | |||||
{ | |||||
caca_draw_thin_triangle((caca_canvas_t *)ptr, x1, y1, x2, y2, x3, y3); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_canvasFillTriangle(JNIEnv *env, jclass cls, jlong ptr, | |||||
jint x1, jint y1, jint x2, jint y2, | |||||
jint x3, jint y3, jint ch) | |||||
{ | |||||
caca_fill_triangle((caca_canvas_t *)ptr, x1, y1, x2, y2, x3, y3, ch); | |||||
} | |||||
JNIEXPORT jint JNICALL | |||||
Java_org_zoy_caca_Canvas_getCanvasFrameCount(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
return caca_get_frame_count((caca_canvas_t *)ptr); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_setCanvasFrame(JNIEnv *env, jclass cls, jlong ptr, jint id) | |||||
{ | |||||
caca_set_frame((caca_canvas_t *)ptr, id); | |||||
} | |||||
JNIEXPORT jstring JNICALL | |||||
Java_org_zoy_caca_Canvas_getCanvasFrameName(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
const char *frame_name = caca_get_frame_name((caca_canvas_t *)ptr); | |||||
return (*env)->NewStringUTF(env, frame_name); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_setCanvasFrameName(JNIEnv *env, jclass cls, jlong ptr, jstring frame_name) | |||||
{ | |||||
const char *frame_name_chars = (*env)->GetStringUTFChars(env, frame_name, 0); | |||||
caca_set_frame_name((caca_canvas_t *)ptr, frame_name_chars); | |||||
(*env)->ReleaseStringUTFChars(env, frame_name, frame_name_chars); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_createCanvasFrame(JNIEnv *env, jclass cls, jlong ptr, jint id) | |||||
{ | |||||
caca_create_frame((caca_canvas_t *)ptr, id); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_freeCanvasFrame(JNIEnv *env, jclass cls, jlong ptr, jint id) | |||||
{ | |||||
caca_free_frame((caca_canvas_t *)ptr, id); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_canvasRender(JNIEnv *env, jclass cls, jlong ptr, jlong font_ptr, | |||||
jbyteArray buf, jint width, jint height, jint pitch) | |||||
{ | |||||
jbyte *elems = (*env)->GetByteArrayElements(env, buf, 0); | |||||
caca_render_canvas((caca_canvas_t *)ptr, (caca_font_t *)font_ptr, elems, width, height, pitch); | |||||
(*env)->ReleaseByteArrayElements(env, buf, elems, 0); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_canvasDitherBitmap(JNIEnv *env, jclass cls, jlong ptr, jint x, jint y, | |||||
jint w, jint h, jlong dither_ptr, jbyteArray pixels) | |||||
{ | |||||
jbyte *elems = (*env)->GetByteArrayElements(env, pixels, 0); | |||||
jsize size = (*env)->GetArrayLength(env, pixels); | |||||
caca_dither_bitmap((caca_canvas_t *)ptr, x, y, w, h, (caca_dither_t *)dither_ptr, elems); | |||||
(*env)->ReleaseByteArrayElements(env, pixels, elems, 0); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Canvas_freeCanvas(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
caca_free_canvas((caca_canvas_t *)ptr); | |||||
} | |||||
@@ -0,0 +1,187 @@ | |||||
/** | |||||
* libcaca Java bindings for libcaca | |||||
* Copyright (c) 2009 Adrien Grand <jpountz@dinauz.org> | |||||
* | |||||
* $Id$ | |||||
* | |||||
* 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://sam.zoy.org/wtfpl/COPYING for more details. | |||||
*/ | |||||
#include "caca_java_common.h" | |||||
#include "org_zoy_caca_Display.h" | |||||
#include <stdlib.h> | |||||
#include "caca.h" | |||||
#define DISPLAY_CREATION_ERROR "Cannot create display" | |||||
JNIEXPORT jlong JNICALL | |||||
Java_org_zoy_caca_Display_createDisplayAndCanvas(JNIEnv *env, jclass cls) | |||||
{ | |||||
caca_display_t *display = caca_create_display(NULL); | |||||
if(display == NULL) { | |||||
THROW_EX(DISPLAY_CREATION_ERROR); | |||||
return 0; | |||||
} | |||||
return (jlong)display; | |||||
} | |||||
JNIEXPORT jlong JNICALL | |||||
Java_org_zoy_caca_Display_createDisplay(JNIEnv *env, jclass cls, jlong canvas_ptr) | |||||
{ | |||||
caca_display_t *display = caca_create_display((caca_canvas_t *)canvas_ptr); | |||||
if(display == NULL) { | |||||
THROW_EX(DISPLAY_CREATION_ERROR); | |||||
return 0; | |||||
} | |||||
return (jlong)display; | |||||
} | |||||
JNIEXPORT jlong JNICALL | |||||
Java_org_zoy_caca_Display_createDisplayAndCanvasWithDriver(JNIEnv *env, jclass cls, | |||||
jstring driver_name) | |||||
{ | |||||
const char *driver_name_chars = (*env)->GetStringUTFChars(env, driver_name, 0); | |||||
caca_display_t *ret = caca_create_display_with_driver(NULL, driver_name_chars); | |||||
(*env)->ReleaseStringUTFChars(env, driver_name, driver_name_chars); | |||||
if(ret == NULL) { | |||||
THROW_EX(DISPLAY_CREATION_ERROR); | |||||
return 0; | |||||
} | |||||
return (jlong)ret; | |||||
} | |||||
JNIEXPORT jlong JNICALL | |||||
Java_org_zoy_caca_Display_createDisplayWithDriver(JNIEnv *env, jclass cls, | |||||
jlong canvas_ptr, jstring driver_name) | |||||
{ | |||||
const char *driver_name_chars = (*env)->GetStringUTFChars(env, driver_name, 0); | |||||
caca_display_t *ret = caca_create_display_with_driver((caca_canvas_t *)canvas_ptr, driver_name_chars); | |||||
(*env)->ReleaseStringUTFChars(env, driver_name, driver_name_chars); | |||||
if(ret == NULL) { | |||||
THROW_EX(DISPLAY_CREATION_ERROR); | |||||
return 0; | |||||
} | |||||
return (jlong)ret; | |||||
} | |||||
JNIEXPORT jobjectArray JNICALL | |||||
Java_org_zoy_caca_Display_getDisplayDriverList(JNIEnv *env, jclass cls) | |||||
{ | |||||
const char *const *drivers = caca_get_display_driver_list(); | |||||
return caca_java_to_string_array(env, drivers); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Display_setDisplayDriver(JNIEnv *env, jclass cls, jlong ptr, jstring driver_name) | |||||
{ | |||||
const char *driver_name_chars = (*env)->GetStringUTFChars(env, driver_name, 0); | |||||
caca_set_display_driver((caca_display_t *)ptr, driver_name_chars); | |||||
(*env)->ReleaseStringUTFChars(env, driver_name, driver_name_chars); | |||||
} | |||||
JNIEXPORT jstring JNICALL | |||||
Java_org_zoy_caca_Display_getDisplayDriver(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
return (*env)->NewStringUTF(env, caca_get_display_driver((caca_display_t *)ptr)); | |||||
} | |||||
JNIEXPORT jlong JNICALL | |||||
Java_org_zoy_caca_Display_getDisplayCanvas(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
return (jlong)caca_get_canvas((caca_display_t *)ptr); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Display_displayRefresh(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
caca_refresh_display((caca_display_t *)ptr); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Display_setDisplayTime(JNIEnv *env, jclass cls, jlong ptr, jint time) | |||||
{ | |||||
caca_set_display_time((caca_display_t *)ptr, time); | |||||
} | |||||
JNIEXPORT jint JNICALL | |||||
Java_org_zoy_caca_Display_getDisplayTime(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
return caca_get_display_time((caca_display_t *)ptr); | |||||
} | |||||
JNIEXPORT jint JNICALL | |||||
Java_org_zoy_caca_Display_getDisplayWidth(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
return caca_get_display_width((caca_display_t *)ptr); | |||||
} | |||||
JNIEXPORT jint JNICALL | |||||
Java_org_zoy_caca_Display_getDisplayHeight(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
return caca_get_display_height((caca_display_t *)ptr); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Display_setDisplayTitle(JNIEnv *env, jclass cls, jlong ptr, jstring title) | |||||
{ | |||||
const char *title_chars = (*env)->GetStringUTFChars(env, title, 0); | |||||
caca_set_display_title((caca_display_t *)ptr, title_chars); | |||||
(*env)->ReleaseStringUTFChars(env, title, title_chars); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Display_setDisplayMouse(JNIEnv *env, jclass cls, jlong ptr, jboolean st) | |||||
{ | |||||
caca_set_mouse((caca_display_t *)ptr, st); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Display_setDisplayCursor(JNIEnv *env, jclass cls, jlong ptr, jboolean st) | |||||
{ | |||||
caca_set_cursor((caca_display_t *)ptr, st); | |||||
} | |||||
JNIEXPORT jlong JNICALL | |||||
Java_org_zoy_caca_Display_getDisplayEvent(JNIEnv *env, jclass cls, jlong ptr, jint mask, jint timeout) | |||||
{ | |||||
caca_event_t *ev = malloc(sizeof(caca_event_t)); | |||||
if (caca_get_event((caca_display_t *)ptr, mask, ev, timeout)) | |||||
{ | |||||
return (jlong) ev; | |||||
} | |||||
free(ev); | |||||
(*env)->ThrowNew(env, (*env)->FindClass(env, "org/zoy/caca/TimeoutException"), "No event received"); | |||||
return -1; | |||||
} | |||||
JNIEXPORT jint JNICALL | |||||
Java_org_zoy_caca_Display_getDisplayMouseX(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
return caca_get_mouse_x((caca_display_t *)ptr); | |||||
} | |||||
JNIEXPORT jint JNICALL | |||||
Java_org_zoy_caca_Display_getDisplayMouseY(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
return caca_get_mouse_y((caca_display_t *)ptr); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Display_freeDisplay(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
caca_free_display((caca_display_t *)ptr); | |||||
} | |||||
@@ -0,0 +1,175 @@ | |||||
/** | |||||
* libcaca Java bindings for libcaca | |||||
* Copyright (c) 2009 Adrien Grand <jpountz@dinauz.org> | |||||
* | |||||
* $Id$ | |||||
* | |||||
* 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://sam.zoy.org/wtfpl/COPYING for more details. | |||||
*/ | |||||
#include "org_zoy_caca_Dither.h" | |||||
#include "caca_java_common.h" | |||||
#include "caca.h" | |||||
JNIEXPORT jlong JNICALL | |||||
Java_org_zoy_caca_Dither_createDither(JNIEnv *env, jclass cls, jint bpp, jint w, jint h, | |||||
jint pitch, jint rmask, jint gmask, jint bmask, jint amask) | |||||
{ | |||||
caca_dither_t *dither = caca_create_dither(bpp, w, h, pitch, rmask, gmask, bmask, amask); | |||||
if(dither == NULL) { | |||||
THROW_EX("Cannot create a new Dither"); | |||||
return 0; | |||||
} | |||||
return (jlong)dither; | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Dither_setDitherPalette(JNIEnv *env, jclass vls, jlong ptr, jintArray red, | |||||
jintArray green, jintArray blue, jintArray alpha) | |||||
{ | |||||
jint *relems, *gelems, *belems, *aelems; | |||||
relems = (*env)->GetIntArrayElements(env, red, 0); | |||||
gelems = (*env)->GetIntArrayElements(env, green, 0); | |||||
belems = (*env)->GetIntArrayElements(env, blue, 0); | |||||
aelems = (*env)->GetIntArrayElements(env, alpha, 0); | |||||
caca_set_dither_palette((caca_dither_t *)ptr, relems, gelems, belems, aelems); | |||||
(*env)->ReleaseIntArrayElements(env, red, relems, 0); | |||||
(*env)->ReleaseIntArrayElements(env, green, gelems, 0); | |||||
(*env)->ReleaseIntArrayElements(env, blue, belems, 0); | |||||
(*env)->ReleaseIntArrayElements(env, alpha, aelems, 0); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Dither_setDitherBrightness(JNIEnv *env, jclass cls, jlong ptr, jfloat v) | |||||
{ | |||||
caca_set_dither_brightness((caca_dither_t *)ptr, v); | |||||
} | |||||
JNIEXPORT jfloat JNICALL | |||||
Java_org_zoy_caca_Dither_getDitherBrightness(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
return caca_get_dither_brightness((caca_dither_t *)ptr); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Dither_setDitherGamma(JNIEnv *env, jclass cls, jlong ptr, jfloat v) | |||||
{ | |||||
caca_set_dither_gamma((caca_dither_t *)ptr, v); | |||||
} | |||||
JNIEXPORT jfloat JNICALL | |||||
Java_org_zoy_caca_Dither_getDitherGamma(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
return caca_get_dither_gamma((caca_dither_t *)ptr); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Dither_setDitherContrast(JNIEnv *env, jclass cls, jlong ptr, jfloat v) | |||||
{ | |||||
caca_set_dither_contrast((caca_dither_t *)ptr, v); | |||||
} | |||||
JNIEXPORT jfloat JNICALL | |||||
Java_org_zoy_caca_Dither_getDitherContrast(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
return caca_get_dither_contrast((caca_dither_t *)ptr); | |||||
} | |||||
JNIEXPORT jobjectArray JNICALL | |||||
Java_org_zoy_caca_Dither_getDitherAntiAliasingList(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
const char *const *antialias_list = caca_get_dither_antialias_list((caca_dither_t *)ptr); | |||||
return caca_java_to_string_array(env, antialias_list); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Dither_setDitherAntiAliasing(JNIEnv *env, jclass cls, jlong ptr, jstring aa) | |||||
{ | |||||
const char *aa_chars = (*env)->GetStringUTFChars(env, aa, 0); | |||||
caca_set_dither_antialias((caca_dither_t *)ptr, aa_chars); | |||||
(*env)->ReleaseStringUTFChars(env, aa, aa_chars); | |||||
} | |||||
JNIEXPORT jstring JNICALL | |||||
Java_org_zoy_caca_Dither_getDitherAntiAliasing(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
return (*env)->NewStringUTF(env, caca_get_dither_antialias((caca_dither_t *)ptr)); | |||||
} | |||||
JNIEXPORT jobjectArray | |||||
JNICALL Java_org_zoy_caca_Dither_getDitherColorList(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
const char *const *color_list = caca_get_dither_color_list((caca_dither_t *)ptr); | |||||
return caca_java_to_string_array(env, color_list); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Dither_setDitherColor(JNIEnv *env, jclass cls, jlong ptr, jstring color) | |||||
{ | |||||
const char *color_chars = (*env)->GetStringUTFChars(env, color, 0); | |||||
caca_set_dither_color((caca_dither_t *)ptr, color_chars); | |||||
(*env)->ReleaseStringUTFChars(env, color, color_chars); | |||||
} | |||||
JNIEXPORT jstring JNICALL | |||||
Java_org_zoy_caca_Dither_getDitherColor(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
return (*env)->NewStringUTF(env, caca_get_dither_color((caca_dither_t *)ptr)); | |||||
} | |||||
JNIEXPORT jobjectArray JNICALL | |||||
Java_org_zoy_caca_Dither_getDitherCharsetList(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
const char *const *color_list = caca_get_dither_color_list((caca_dither_t *)ptr); | |||||
return caca_java_to_string_array(env, color_list); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Dither_setDitherCharset(JNIEnv *env, jclass cls, jlong ptr, jstring charset) | |||||
{ | |||||
const char *charset_chars = (*env)->GetStringUTFChars(env, charset, 0); | |||||
caca_set_dither_charset((caca_dither_t *)ptr, charset_chars); | |||||
(*env)->ReleaseStringUTFChars(env, charset, charset_chars); | |||||
} | |||||
JNIEXPORT jstring JNICALL | |||||
Java_org_zoy_caca_Dither_getDitherCharset(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
return (*env)->NewStringUTF(env, caca_get_dither_charset((caca_dither_t *)ptr)); | |||||
} | |||||
JNIEXPORT jobjectArray JNICALL | |||||
Java_org_zoy_caca_Dither_getDitherAlgorithmList(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
const char *const *algorithm_list = caca_get_dither_algorithm_list((caca_dither_t *)ptr); | |||||
return caca_java_to_string_array(env, algorithm_list); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Dither_setDitherAlgorithm(JNIEnv *env, jclass cls, jlong ptr, jstring algorithm) | |||||
{ | |||||
const char *algorithm_chars = (*env)->GetStringUTFChars(env, algorithm, 0); | |||||
caca_set_dither_algorithm((caca_dither_t *)ptr, algorithm_chars); | |||||
(*env)->ReleaseStringUTFChars(env, algorithm, algorithm_chars); | |||||
} | |||||
JNIEXPORT jstring JNICALL | |||||
Java_org_zoy_caca_Dither_getDitherAlgorithm(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
return (*env)->NewStringUTF(env, caca_get_dither_algorithm((caca_dither_t *)ptr)); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Dither_freeDither(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
caca_free_dither((caca_dither_t *)ptr); | |||||
} | |||||
@@ -0,0 +1,80 @@ | |||||
/** | |||||
* libcaca Java bindings for libcaca | |||||
* Copyright (c) 2009 Adrien Grand <jpountz@dinauz.org> | |||||
* | |||||
* $Id$ | |||||
* | |||||
* 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://sam.zoy.org/wtfpl/COPYING for more details. | |||||
*/ | |||||
#include "org_zoy_caca_Event.h" | |||||
#include <stdlib.h> | |||||
#include "caca.h" | |||||
JNIEXPORT jint JNICALL | |||||
Java_org_zoy_caca_Event_getEventType(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
return (jint)caca_get_event_type((caca_event_t *)ptr); | |||||
} | |||||
JNIEXPORT jint JNICALL | |||||
Java_org_zoy_caca_Event_getEventKeyCh(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
return caca_get_event_key_ch((caca_event_t *)ptr); | |||||
} | |||||
JNIEXPORT jint JNICALL | |||||
Java_org_zoy_caca_Event_getEventKeyUtf32(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
return caca_get_event_key_utf32((caca_event_t *)ptr); | |||||
} | |||||
JNIEXPORT jstring JNICALL | |||||
Java_org_zoy_caca_Event_getEventKeyUtf8(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
char *str = malloc(8 * sizeof(char)); | |||||
caca_get_event_key_utf8((caca_event_t *)ptr, str); | |||||
return (*env)->NewStringUTF(env, str); | |||||
} | |||||
JNIEXPORT jint JNICALL | |||||
Java_org_zoy_caca_Event_getEventMouseButton(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
return caca_get_event_mouse_button((caca_event_t *)ptr); | |||||
} | |||||
JNIEXPORT jint JNICALL | |||||
Java_org_zoy_caca_Event_getEventMouseX(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
return caca_get_event_mouse_x((caca_event_t *)ptr); | |||||
} | |||||
JNIEXPORT jint JNICALL | |||||
Java_org_zoy_caca_Event_getEventMouseY(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
return caca_get_event_mouse_y((caca_event_t *)ptr); | |||||
} | |||||
JNIEXPORT jint JNICALL | |||||
Java_org_zoy_caca_Event_getEventResizeWidth(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
return caca_get_event_resize_width((caca_event_t *)ptr); | |||||
} | |||||
JNIEXPORT jint JNICALL | |||||
Java_org_zoy_caca_Event_getEventResizeHeight(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
return caca_get_event_resize_height((caca_event_t *)ptr); | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Event_freeEvent(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
caca_event_t *ev = (caca_event_t *)ptr; | |||||
free(ev); | |||||
} |
@@ -0,0 +1,117 @@ | |||||
/** | |||||
* libcaca Java bindings for libcaca | |||||
* Copyright (c) 2009 Adrien Grand <jpountz@dinauz.org> | |||||
* | |||||
* $Id$ | |||||
* | |||||
* 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://sam.zoy.org/wtfpl/COPYING for more details. | |||||
*/ | |||||
#include "caca_java_common.h" | |||||
#include "org_zoy_caca_Font.h" | |||||
#include "caca.h" | |||||
#define FONT_CREATION_ERROR "Cannot load font" | |||||
JNIEXPORT jlong JNICALL | |||||
Java_org_zoy_caca_Font_loadFont__Ljava_lang_String_2(JNIEnv *env, jclass cls, jstring font_name) | |||||
{ | |||||
const char *font_name_chars; | |||||
caca_font_t *font; | |||||
font_name_chars = (*env)->GetStringUTFChars(env, font_name, 0); | |||||
font = caca_load_font(font_name_chars, 0); | |||||
(*env)->ReleaseStringUTFChars(env, font_name, font_name_chars); | |||||
if (!font) | |||||
{ | |||||
THROW_EX(FONT_CREATION_ERROR); | |||||
return 0; | |||||
} | |||||
return (jlong)font; | |||||
} | |||||
JNIEXPORT jlong JNICALL | |||||
Java_org_zoy_caca_Font_loadFont___3B(JNIEnv *env, jclass cls, jbyteArray font_bytes) | |||||
{ | |||||
jbyte *elems; | |||||
jsize size; | |||||
caca_font_t *font; | |||||
elems = (*env)->GetByteArrayElements(env, font_bytes, 0); | |||||
size = (*env)->GetArrayLength(env, font_bytes); | |||||
font = caca_load_font(elems, size); | |||||
(*env)->ReleaseByteArrayElements(env, font_bytes, elems, 0); | |||||
if (!font) | |||||
{ | |||||
THROW_EX(FONT_CREATION_ERROR); | |||||
return 0; | |||||
} | |||||
return (jlong)font; | |||||
} | |||||
JNIEXPORT jobjectArray JNICALL | |||||
Java_org_zoy_caca_Font_getFontNames(JNIEnv *env, jclass cls) | |||||
{ | |||||
const char *const *fonts = caca_get_font_list(); | |||||
return caca_java_to_string_array(env, fonts); | |||||
} | |||||
JNIEXPORT jint JNICALL | |||||
Java_org_zoy_caca_Font_getFontWidth(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
return caca_get_font_width(ptr); | |||||
} | |||||
JNIEXPORT jint JNICALL | |||||
Java_org_zoy_caca_Font_getFontHeight(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
return caca_get_font_height(ptr); | |||||
} | |||||
JNIEXPORT jobjectArray JNICALL | |||||
Java_org_zoy_caca_Font_getFontBlocks(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
const uint32_t *blocks; | |||||
jclass int_array; | |||||
jobjectArray ret; | |||||
jsize size; | |||||
jsize i; | |||||
blocks = caca_get_font_blocks(ptr); | |||||
for (size = 0; blocks[2*size] || blocks[2*size+1]; ++size); | |||||
int_array = (*env)->FindClass(env, "[I"); | |||||
ret = (*env)->NewObjectArray(env, size, int_array, NULL); | |||||
for (i = 0; i < size; ++i) | |||||
{ | |||||
jintArray nth = (*env)->NewIntArray(env, 2); /* Size is 2 */ | |||||
jint nth_elems[] = { blocks[2*i], blocks[2*i+1] }; | |||||
(*env)->SetIntArrayRegion(env, nth, 0, 2, nth_elems); | |||||
(*env)->SetObjectArrayElement(env, ret, i, nth); | |||||
(*env)->DeleteLocalRef(env, nth); | |||||
} | |||||
return ret; | |||||
} | |||||
JNIEXPORT void JNICALL | |||||
Java_org_zoy_caca_Font_freeFont(JNIEnv *env, jclass cls, jlong ptr) | |||||
{ | |||||
caca_free_font((caca_font_t *)ptr); | |||||
} | |||||