aboutsummaryrefslogtreecommitdiffstats
path: root/x11-toolkits
diff options
context:
space:
mode:
authoredwin <edwin@FreeBSD.org>2006-01-04 17:39:36 +0800
committeredwin <edwin@FreeBSD.org>2006-01-04 17:39:36 +0800
commit304d88755b51e550c1c8145c77598402ea3a5329 (patch)
treee2e236b8423a1af47c046564fee54700616bdcb3 /x11-toolkits
parent34706cc0522c60dde632a66c6595b01d96185075 (diff)
downloadfreebsd-ports-gnome-304d88755b51e550c1c8145c77598402ea3a5329.tar.gz
freebsd-ports-gnome-304d88755b51e550c1c8145c77598402ea3a5329.tar.zst
freebsd-ports-gnome-304d88755b51e550c1c8145c77598402ea3a5329.zip
New port: x11-toolkits/swt31 Standard Widget Toolkit for Java
This is a new port for SWT. SWT is the software component that delivers native widget functionality for the Eclipse platform in an operating system independent manner. This port provides SWT without requiring a full download and build of Eclipse. Other ports (like net/azureus) that need SWT but not eclipse, can be subsequently changed to depend on this, much lighter, port. I tested it on i386, but am unable to verify whether it works on amd64 or not, although all the necessary bits from eclipse have been kept AFAICT. If someone later steps up to the task, ONLY_FOR_ARCHS can be modified accordingly. PR: ports/91083 Submitted by: Panagiotis Astithas <past@ebs.gr>
Diffstat (limited to 'x11-toolkits')
-rw-r--r--x11-toolkits/Makefile1
-rw-r--r--x11-toolkits/swt31/Makefile110
-rw-r--r--x11-toolkits/swt31/distinfo6
-rw-r--r--x11-toolkits/swt31/files/manualpatch-cairo2432
-rw-r--r--x11-toolkits/swt31/files/patch-build.sh42
-rw-r--r--x11-toolkits/swt31/files/patch-make_freebsd.mak60
-rw-r--r--x11-toolkits/swt31/pkg-descr7
7 files changed, 2658 insertions, 0 deletions
diff --git a/x11-toolkits/Makefile b/x11-toolkits/Makefile
index 20938723c19b..5dab1c9c9c7b 100644
--- a/x11-toolkits/Makefile
+++ b/x11-toolkits/Makefile
@@ -183,6 +183,7 @@
SUBDIR += sdl_gui
SUBDIR += slingshot
SUBDIR += soqt
+ SUBDIR += swt31
SUBDIR += tix
SUBDIR += tk80
SUBDIR += tk82
diff --git a/x11-toolkits/swt31/Makefile b/x11-toolkits/swt31/Makefile
new file mode 100644
index 000000000000..06d27b680b90
--- /dev/null
+++ b/x11-toolkits/swt31/Makefile
@@ -0,0 +1,110 @@
+# New ports collection makefile for: swt
+# Date created: 2005-12-15
+# Whom: past@ebs.gr
+#
+# $FreeBSD$
+#
+
+PORTNAME= swt
+PORTVERSION= 3.1
+CATEGORIES= x11-toolkits devel java
+MASTER_SITES= ${MASTER_SITE_ECLIPSE}
+MASTER_SITE_SUBDIR= R-${PORTVERSION}-200506271435
+
+MAINTAINER= freebsd-eclipse@freebsd.org
+COMMENT= Standard Widget Toolkit for Java
+
+SWT_VERSION= 3138
+NO_WRKSUBDIR= yes
+# Someone with amd64 hardware must finish the amd64 support before it
+# is enabled
+ONLY_FOR_ARCHS= i386
+USE_GMAKE= yes
+USE_ZIP= yes
+MAKEFILE= make_freebsd.mak
+INSTALLS_SHLIB= yes
+PLIST_SUB= BUILD=${SWT_VERSION}
+PLIST_FILES= %%JAVAJARDIR%%/swt.jar \
+ lib/libswt-atk-gtk-%%BUILD%%.so \
+ lib/libswt-awt-gtk-%%BUILD%%.so \
+ lib/libswt-gtk-%%BUILD%%.so \
+ lib/libswt-pi-gtk-%%BUILD%%.so
+
+USE_JAVA= yes
+JAVA_VERSION= 1.4+
+JAVA_OS= native
+
+.if !defined(WITHOUT_MOZILLA)
+PLIST_FILES+= lib/libswt-mozilla-gtk-%%BUILD%%.so
+MAKE_MOZILLA= make_mozilla
+.if defined(WITH_MOZILLA) && ${WITH_MOZILLA} != "mozilla"
+BROWSER= ${WITH_MOZILLA}
+BUILD_DEPENDS+= ${BROWSER}:${PORTSDIR}/www/${BROWSER}
+.else
+BUILD_DEPENDS+= mozilla:${PORTSDIR}/www/mozilla
+BROWSER= mozilla
+.endif
+.else
+BROWSER=
+MAKE_MOZILLA=
+.endif
+
+.if defined(WITHOUT_CAIRO)
+MAKE_CAIRO=
+.else
+LIB_DEPENDS= cairo.2:${PORTSDIR}/graphics/cairo
+MAKE_CAIRO= make_cairo
+PLIST_FILES+= lib/libswt-cairo-gtk-%%BUILD%%.so
+.endif
+
+.if defined(WITHOUT_GNOMEVFS)
+MAKE_GNOME=
+USE_GNOME= gtk20 pkgconfig
+.else
+MAKE_GNOME= make_gnome
+USE_GNOME= gtk20 gnomevfs2 libgnome libgnomeui pkgconfig
+PLIST_FILES+= lib/libswt-gnome-gtk-%%BUILD%%.so
+.endif
+
+.include <bsd.port.pre.mk>
+
+.if (${ARCH} == "amd64")
+DISTNAME= swt-${PORTVERSION}-gtk-linux-x86_64
+.else
+DISTNAME= swt-${PORTVERSION}-gtk-linux-x86
+.endif
+
+MAKE_ENV+= BROWSER="${BROWSER}" \
+ JAVA_HOME="${JAVA_HOME}" \
+ MAKE_GNOME=${MAKE_GNOME} \
+ MAKE_MOZILLA=${MAKE_MOZILLA} \
+ MAKE_CAIRO=${MAKE_CAIRO} \
+ MACHINE_ARCH=${MACHINE_ARCH}
+
+post-extract:
+ @(cd ${WRKSRC} && ${UNZIP_CMD} -qo "*.zip")
+ @${CP} ${WRKSRC}/make_linux.mak ${WRKSRC}/make_freebsd.mak
+
+post-patch:
+ @${RM} ${WRKSRC}/lib*.so
+.if (${ARCH} != "amd64")
+ @${PATCH} ${PATCH_DIST_ARGS} \
+ "cairo.c" \
+ ${FILESDIR}/manualpatch-cairo \
+ + "cairo.h" \
+ + "cairo_custom.c" \
+ + "cairo_stats.c" \
+ + "cairo_stats.h" \
+ + "cairo_structs.c" \
+ + "cairo_structs.h"
+.endif
+
+do-build:
+ @(cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} ${SH} build.sh)
+
+do-install:
+ ${MKDIR} ${JAVAJARDIR}
+ ${INSTALL_PROGRAM} ${WRKSRC}/libswt-*.so ${PREFIX}/lib
+ ${INSTALL_DATA} ${WRKSRC}/swt.jar ${JAVAJARDIR}/
+
+.include <bsd.port.post.mk>
diff --git a/x11-toolkits/swt31/distinfo b/x11-toolkits/swt31/distinfo
new file mode 100644
index 000000000000..575a95687199
--- /dev/null
+++ b/x11-toolkits/swt31/distinfo
@@ -0,0 +1,6 @@
+MD5 (swt-3.1-gtk-linux-x86_64.zip) = 37907f265059d9853911fc9538743280
+SHA256 (swt-3.1-gtk-linux-x86_64.zip) = 5314bd993327ea6e6646a437dde034d574d2e4c66e96ca6a12815fca807458ce
+SIZE (swt-3.1-gtk-linux-x86_64.zip) = 2702033
+MD5 (swt-3.1-gtk-linux-x86.zip) = a7d5f5f593e423f9aec7713c548f3817
+SHA256 (swt-3.1-gtk-linux-x86.zip) = 9a12c6e0377836c277e0268b94d66b8f1a6dd46c5a51720353ec209a2956c25f
+SIZE (swt-3.1-gtk-linux-x86.zip) = 2643472
diff --git a/x11-toolkits/swt31/files/manualpatch-cairo b/x11-toolkits/swt31/files/manualpatch-cairo
new file mode 100644
index 000000000000..b36c760e9516
--- /dev/null
+++ b/x11-toolkits/swt31/files/manualpatch-cairo
@@ -0,0 +1,2432 @@
+diff -uN cairo.c.orig cairo.c
+--- cairo.c.orig Thu Aug 18 12:34:57 2005
++++ cairo.c Thu Aug 18 12:35:19 2005
+@@ -25,6 +25,16 @@
+
+ #define Cairo_NATIVE(func) Java_org_eclipse_swt_internal_cairo_Cairo_##func
+
++#ifndef NO_cairo_1append_1path
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1append_1path)
++ (JNIEnv *env, jclass that, jint arg0, jint arg1)
++{
++ Cairo_NATIVE_ENTER(env, that, cairo_1append_1path_FUNC);
++ cairo_append_path((cairo_t *)arg0, (cairo_path_t *)arg1);
++ Cairo_NATIVE_EXIT(env, that, cairo_1append_1path_FUNC);
++}
++#endif
++
+ #ifndef NO_cairo_1arc
+ JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1arc)
+ (JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2, jdouble arg3, jdouble arg4, jdouble arg5)
+@@ -55,6 +65,16 @@
+ }
+ #endif
+
++#ifndef NO_cairo_1clip_1preserve
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1clip_1preserve)
++ (JNIEnv *env, jclass that, jint arg0)
++{
++ Cairo_NATIVE_ENTER(env, that, cairo_1clip_1preserve_FUNC);
++ cairo_clip_preserve((cairo_t *)arg0);
++ Cairo_NATIVE_EXIT(env, that, cairo_1clip_1preserve_FUNC);
++}
++#endif
++
+ #ifndef NO_cairo_1close_1path
+ JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1close_1path)
+ (JNIEnv *env, jclass that, jint arg0)
+@@ -65,353 +85,403 @@
+ }
+ #endif
+
+-#ifndef NO_cairo_1concat_1matrix
+-JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1concat_1matrix)
+- (JNIEnv *env, jclass that, jint arg0, jint arg1)
++#ifndef NO_cairo_1copy_1page
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1copy_1page)
++ (JNIEnv *env, jclass that, jint arg0)
+ {
+- Cairo_NATIVE_ENTER(env, that, cairo_1concat_1matrix_FUNC);
+- cairo_concat_matrix((cairo_t *)arg0, (cairo_matrix_t *)arg1);
+- Cairo_NATIVE_EXIT(env, that, cairo_1concat_1matrix_FUNC);
++ Cairo_NATIVE_ENTER(env, that, cairo_1copy_1page_FUNC);
++ cairo_copy_page((cairo_t *)arg0);
++ Cairo_NATIVE_EXIT(env, that, cairo_1copy_1page_FUNC);
+ }
+ #endif
+
+-#ifndef NO_cairo_1copy
+-JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1copy)
+- (JNIEnv *env, jclass that, jint arg0, jint arg1)
++#ifndef NO_cairo_1copy_1path
++JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1copy_1path)
++ (JNIEnv *env, jclass that, jint arg0)
+ {
+- Cairo_NATIVE_ENTER(env, that, cairo_1copy_FUNC);
+- cairo_copy((cairo_t *)arg0, (cairo_t *)arg1);
+- Cairo_NATIVE_EXIT(env, that, cairo_1copy_FUNC);
++ jint rc = 0;
++ Cairo_NATIVE_ENTER(env, that, cairo_1copy_1path_FUNC);
++ rc = (jint)cairo_copy_path((cairo_t *)arg0);
++ Cairo_NATIVE_EXIT(env, that, cairo_1copy_1path_FUNC);
++ return rc;
+ }
+ #endif
+
+-#ifndef NO_cairo_1copy_1page
+-JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1copy_1page)
++#ifndef NO_cairo_1copy_1path_1flat
++JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1copy_1path_1flat)
+ (JNIEnv *env, jclass that, jint arg0)
+ {
+- Cairo_NATIVE_ENTER(env, that, cairo_1copy_1page_FUNC);
+- cairo_copy_page((cairo_t *)arg0);
+- Cairo_NATIVE_EXIT(env, that, cairo_1copy_1page_FUNC);
++ jint rc = 0;
++ Cairo_NATIVE_ENTER(env, that, cairo_1copy_1path_1flat_FUNC);
++ rc = (jint)cairo_copy_path_flat((cairo_t *)arg0);
++ Cairo_NATIVE_EXIT(env, that, cairo_1copy_1path_1flat_FUNC);
++ return rc;
+ }
+ #endif
+
+ #ifndef NO_cairo_1create
+ JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1create)
+- (JNIEnv *env, jclass that)
++ (JNIEnv *env, jclass that, jint arg0)
+ {
+ jint rc = 0;
+ Cairo_NATIVE_ENTER(env, that, cairo_1create_FUNC);
+- rc = (jint)cairo_create();
++ rc = (jint)cairo_create((cairo_surface_t *)arg0);
+ Cairo_NATIVE_EXIT(env, that, cairo_1create_FUNC);
+ return rc;
+ }
+ #endif
+
+-#ifndef NO_cairo_1current_1alpha
+-JNIEXPORT jdouble JNICALL Cairo_NATIVE(cairo_1current_1alpha)
+- (JNIEnv *env, jclass that, jint arg0)
++#ifndef NO_cairo_1curve_1to
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1curve_1to)
++ (JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2, jdouble arg3, jdouble arg4, jdouble arg5, jdouble arg6)
+ {
+- jdouble rc = 0;
+- Cairo_NATIVE_ENTER(env, that, cairo_1current_1alpha_FUNC);
+- rc = (jdouble)cairo_current_alpha((cairo_t *)arg0);
+- Cairo_NATIVE_EXIT(env, that, cairo_1current_1alpha_FUNC);
+- return rc;
++ Cairo_NATIVE_ENTER(env, that, cairo_1curve_1to_FUNC);
++ cairo_curve_to((cairo_t *)arg0, arg1, arg2, arg3, arg4, arg5, arg6);
++ Cairo_NATIVE_EXIT(env, that, cairo_1curve_1to_FUNC);
+ }
+ #endif
+
+-#ifndef NO_cairo_1current_1fill_1rule
+-JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1current_1fill_1rule)
++#ifndef NO_cairo_1destroy
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1destroy)
+ (JNIEnv *env, jclass that, jint arg0)
+ {
+- jint rc = 0;
+- Cairo_NATIVE_ENTER(env, that, cairo_1current_1fill_1rule_FUNC);
+- rc = (jint)cairo_current_fill_rule((cairo_t *)arg0);
+- Cairo_NATIVE_EXIT(env, that, cairo_1current_1fill_1rule_FUNC);
+- return rc;
++ Cairo_NATIVE_ENTER(env, that, cairo_1destroy_FUNC);
++ cairo_destroy((cairo_t *)arg0);
++ Cairo_NATIVE_EXIT(env, that, cairo_1destroy_FUNC);
+ }
+ #endif
+
+-#ifndef NO_cairo_1current_1font
+-JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1current_1font)
+- (JNIEnv *env, jclass that, jint arg0)
++#ifndef NO_cairo_1device_1to_1user
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1device_1to_1user)
++ (JNIEnv *env, jclass that, jint arg0, jdoubleArray arg1, jdoubleArray arg2)
+ {
+- jint rc = 0;
+- Cairo_NATIVE_ENTER(env, that, cairo_1current_1font_FUNC);
+- rc = (jint)cairo_current_font((cairo_t *)arg0);
+- Cairo_NATIVE_EXIT(env, that, cairo_1current_1font_FUNC);
+- return rc;
++ jdouble *lparg1=NULL;
++ jdouble *lparg2=NULL;
++ Cairo_NATIVE_ENTER(env, that, cairo_1device_1to_1user_FUNC);
++ if (arg1) if ((lparg1 = (*env)->GetDoubleArrayElements(env, arg1, NULL)) == NULL) goto fail;
++ if (arg2) if ((lparg2 = (*env)->GetDoubleArrayElements(env, arg2, NULL)) == NULL) goto fail;
++ cairo_device_to_user((cairo_t *)arg0, lparg1, lparg2);
++fail:
++ if (arg2 && lparg2) (*env)->ReleaseDoubleArrayElements(env, arg2, lparg2, 0);
++ if (arg1 && lparg1) (*env)->ReleaseDoubleArrayElements(env, arg1, lparg1, 0);
++ Cairo_NATIVE_EXIT(env, that, cairo_1device_1to_1user_FUNC);
+ }
+ #endif
+
+-#ifndef NO_cairo_1current_1font_1extents
+-JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1current_1font_1extents)
+- (JNIEnv *env, jclass that, jint arg0, jobject arg1)
++#ifndef NO_cairo_1device_1to_1user_1distance
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1device_1to_1user_1distance)
++ (JNIEnv *env, jclass that, jint arg0, jdoubleArray arg1, jdoubleArray arg2)
+ {
+- cairo_font_extents_t _arg1, *lparg1=NULL;
+- Cairo_NATIVE_ENTER(env, that, cairo_1current_1font_1extents_FUNC);
+- if (arg1) if ((lparg1 = getcairo_font_extents_tFields(env, arg1, &_arg1)) == NULL) goto fail;
+- cairo_current_font_extents((cairo_t *)arg0, (cairo_font_extents_t *)lparg1);
++ jdouble *lparg1=NULL;
++ jdouble *lparg2=NULL;
++ Cairo_NATIVE_ENTER(env, that, cairo_1device_1to_1user_1distance_FUNC);
++ if (arg1) if ((lparg1 = (*env)->GetDoubleArrayElements(env, arg1, NULL)) == NULL) goto fail;
++ if (arg2) if ((lparg2 = (*env)->GetDoubleArrayElements(env, arg2, NULL)) == NULL) goto fail;
++ cairo_device_to_user_distance((cairo_t *)arg0, lparg1, lparg2);
+ fail:
+- if (arg1 && lparg1) setcairo_font_extents_tFields(env, arg1, lparg1);
+- Cairo_NATIVE_EXIT(env, that, cairo_1current_1font_1extents_FUNC);
++ if (arg2 && lparg2) (*env)->ReleaseDoubleArrayElements(env, arg2, lparg2, 0);
++ if (arg1 && lparg1) (*env)->ReleaseDoubleArrayElements(env, arg1, lparg1, 0);
++ Cairo_NATIVE_EXIT(env, that, cairo_1device_1to_1user_1distance_FUNC);
+ }
+ #endif
+
+-#ifndef NO_cairo_1current_1line_1cap
+-JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1current_1line_1cap)
++#ifndef NO_cairo_1fill
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1fill)
+ (JNIEnv *env, jclass that, jint arg0)
+ {
+- jint rc = 0;
+- Cairo_NATIVE_ENTER(env, that, cairo_1current_1line_1cap_FUNC);
+- rc = (jint)cairo_current_line_cap((cairo_t *)arg0);
+- Cairo_NATIVE_EXIT(env, that, cairo_1current_1line_1cap_FUNC);
+- return rc;
++ Cairo_NATIVE_ENTER(env, that, cairo_1fill_FUNC);
++ cairo_fill((cairo_t *)arg0);
++ Cairo_NATIVE_EXIT(env, that, cairo_1fill_FUNC);
+ }
+ #endif
+
+-#ifndef NO_cairo_1current_1line_1join
+-JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1current_1line_1join)
+- (JNIEnv *env, jclass that, jint arg0)
++#ifndef NO_cairo_1fill_1extents
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1fill_1extents)
++ (JNIEnv *env, jclass that, jint arg0, jdoubleArray arg1, jdoubleArray arg2, jdoubleArray arg3, jdoubleArray arg4)
+ {
+- jint rc = 0;
+- Cairo_NATIVE_ENTER(env, that, cairo_1current_1line_1join_FUNC);
+- rc = (jint)cairo_current_line_join((cairo_t *)arg0);
+- Cairo_NATIVE_EXIT(env, that, cairo_1current_1line_1join_FUNC);
+- return rc;
++ jdouble *lparg1=NULL;
++ jdouble *lparg2=NULL;
++ jdouble *lparg3=NULL;
++ jdouble *lparg4=NULL;
++ Cairo_NATIVE_ENTER(env, that, cairo_1fill_1extents_FUNC);
++ if (arg1) if ((lparg1 = (*env)->GetDoubleArrayElements(env, arg1, NULL)) == NULL) goto fail;
++ if (arg2) if ((lparg2 = (*env)->GetDoubleArrayElements(env, arg2, NULL)) == NULL) goto fail;
++ if (arg3) if ((lparg3 = (*env)->GetDoubleArrayElements(env, arg3, NULL)) == NULL) goto fail;
++ if (arg4) if ((lparg4 = (*env)->GetDoubleArrayElements(env, arg4, NULL)) == NULL) goto fail;
++ cairo_fill_extents((cairo_t *)arg0, lparg1, lparg2, lparg3, lparg4);
++fail:
++ if (arg4 && lparg4) (*env)->ReleaseDoubleArrayElements(env, arg4, lparg4, 0);
++ if (arg3 && lparg3) (*env)->ReleaseDoubleArrayElements(env, arg3, lparg3, 0);
++ if (arg2 && lparg2) (*env)->ReleaseDoubleArrayElements(env, arg2, lparg2, 0);
++ if (arg1 && lparg1) (*env)->ReleaseDoubleArrayElements(env, arg1, lparg1, 0);
++ Cairo_NATIVE_EXIT(env, that, cairo_1fill_1extents_FUNC);
+ }
+ #endif
+
+-#ifndef NO_cairo_1current_1line_1width
+-JNIEXPORT jdouble JNICALL Cairo_NATIVE(cairo_1current_1line_1width)
++#ifndef NO_cairo_1fill_1preserve
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1fill_1preserve)
+ (JNIEnv *env, jclass that, jint arg0)
+ {
+- jdouble rc = 0;
+- Cairo_NATIVE_ENTER(env, that, cairo_1current_1line_1width_FUNC);
+- rc = (jdouble)cairo_current_line_width((cairo_t *)arg0);
+- Cairo_NATIVE_EXIT(env, that, cairo_1current_1line_1width_FUNC);
+- return rc;
++ Cairo_NATIVE_ENTER(env, that, cairo_1fill_1preserve_FUNC);
++ cairo_fill_preserve((cairo_t *)arg0);
++ Cairo_NATIVE_EXIT(env, that, cairo_1fill_1preserve_FUNC);
+ }
+ #endif
+
+-#ifndef NO_cairo_1current_1matrix
+-JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1current_1matrix)
+- (JNIEnv *env, jclass that, jint arg0, jint arg1)
++#ifndef NO_cairo_1font_1extents
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1font_1extents)
++ (JNIEnv *env, jclass that, jint arg0, jobject arg1)
+ {
+- Cairo_NATIVE_ENTER(env, that, cairo_1current_1matrix_FUNC);
+- cairo_current_matrix((cairo_t *)arg0, (cairo_matrix_t *)arg1);
+- Cairo_NATIVE_EXIT(env, that, cairo_1current_1matrix_FUNC);
++ cairo_font_extents_t _arg1, *lparg1=NULL;
++ Cairo_NATIVE_ENTER(env, that, cairo_1font_1extents_FUNC);
++ if (arg1) if ((lparg1 = getcairo_font_extents_tFields(env, arg1, &_arg1)) == NULL) goto fail;
++ cairo_font_extents((cairo_t *)arg0, lparg1);
++fail:
++ if (arg1 && lparg1) setcairo_font_extents_tFields(env, arg1, lparg1);
++ Cairo_NATIVE_EXIT(env, that, cairo_1font_1extents_FUNC);
+ }
+ #endif
+
+-#ifndef NO_cairo_1current_1miter_1limit
+-JNIEXPORT jdouble JNICALL Cairo_NATIVE(cairo_1current_1miter_1limit)
+- (JNIEnv *env, jclass that, jint arg0)
++#ifndef NO_cairo_1font_1extents_1t_1sizeof
++JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1font_1extents_1t_1sizeof)
++ (JNIEnv *env, jclass that)
+ {
+- jdouble rc = 0;
+- Cairo_NATIVE_ENTER(env, that, cairo_1current_1miter_1limit_FUNC);
+- rc = (jdouble)cairo_current_miter_limit((cairo_t *)arg0);
+- Cairo_NATIVE_EXIT(env, that, cairo_1current_1miter_1limit_FUNC);
++ jint rc = 0;
++ Cairo_NATIVE_ENTER(env, that, cairo_1font_1extents_1t_1sizeof_FUNC);
++ rc = (jint)cairo_font_extents_t_sizeof();
++ Cairo_NATIVE_EXIT(env, that, cairo_1font_1extents_1t_1sizeof_FUNC);
+ return rc;
+ }
+ #endif
+
+-#ifndef NO_cairo_1current_1operator
+-JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1current_1operator)
+- (JNIEnv *env, jclass that, jint arg0)
++#ifndef NO_cairo_1font_1options_1create
++JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1font_1options_1create)
++ (JNIEnv *env, jclass that)
+ {
+ jint rc = 0;
+- Cairo_NATIVE_ENTER(env, that, cairo_1current_1operator_FUNC);
+- rc = (jint)cairo_current_operator((cairo_t *)arg0);
+- Cairo_NATIVE_EXIT(env, that, cairo_1current_1operator_FUNC);
++ Cairo_NATIVE_ENTER(env, that, cairo_1font_1options_1create_FUNC);
++ rc = (jint)cairo_font_options_create();
++ Cairo_NATIVE_EXIT(env, that, cairo_1font_1options_1create_FUNC);
+ return rc;
+ }
+ #endif
+
+-#ifndef NO_cairo_1current_1path
+-JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1current_1path)
+- (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4, jint arg5)
++#ifndef NO_cairo_1font_1options_1destroy
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1font_1options_1destroy)
++ (JNIEnv *env, jclass that, jint arg0)
+ {
+- Cairo_NATIVE_ENTER(env, that, cairo_1current_1path_FUNC);
+- cairo_current_path((cairo_t *)arg0, (cairo_move_to_func_t *)arg1, (cairo_line_to_func_t *)arg2, (cairo_curve_to_func_t *)arg3, (cairo_close_path_func_t *)arg4, (void *)arg5);
+- Cairo_NATIVE_EXIT(env, that, cairo_1current_1path_FUNC);
++ Cairo_NATIVE_ENTER(env, that, cairo_1font_1options_1destroy_FUNC);
++ cairo_font_options_destroy((cairo_font_options_t *)arg0);
++ Cairo_NATIVE_EXIT(env, that, cairo_1font_1options_1destroy_FUNC);
+ }
+ #endif
+
+-#ifndef NO_cairo_1current_1path_1flat
+-JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1current_1path_1flat)
+- (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4)
++#ifndef NO_cairo_1font_1options_1get_1antialias
++JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1font_1options_1get_1antialias)
++ (JNIEnv *env, jclass that, jint arg0)
+ {
+- Cairo_NATIVE_ENTER(env, that, cairo_1current_1path_1flat_FUNC);
+- cairo_current_path_flat((cairo_t *)arg0, (cairo_move_to_func_t *)arg1, (cairo_line_to_func_t *)arg2, (cairo_close_path_func_t *)arg3, (void *)arg4);
+- Cairo_NATIVE_EXIT(env, that, cairo_1current_1path_1flat_FUNC);
++ jint rc = 0;
++ Cairo_NATIVE_ENTER(env, that, cairo_1font_1options_1get_1antialias_FUNC);
++ rc = (jint)cairo_font_options_get_antialias((cairo_font_options_t *)arg0);
++ Cairo_NATIVE_EXIT(env, that, cairo_1font_1options_1get_1antialias_FUNC);
++ return rc;
+ }
+ #endif
+
+-#ifndef NO_cairo_1current_1pattern
+-JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1current_1pattern)
++#ifndef NO_cairo_1font_1options_1set_1antialias
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1font_1options_1set_1antialias)
++ (JNIEnv *env, jclass that, jint arg0, jint arg1)
++{
++ Cairo_NATIVE_ENTER(env, that, cairo_1font_1options_1set_1antialias_FUNC);
++ cairo_font_options_set_antialias((cairo_font_options_t *)arg0, arg1);
++ Cairo_NATIVE_EXIT(env, that, cairo_1font_1options_1set_1antialias_FUNC);
++}
++#endif
++
++#ifndef NO_cairo_1get_1antialias
++JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1get_1antialias)
+ (JNIEnv *env, jclass that, jint arg0)
+ {
+ jint rc = 0;
+- Cairo_NATIVE_ENTER(env, that, cairo_1current_1pattern_FUNC);
+- rc = (jint)cairo_current_pattern((cairo_t *)arg0);
+- Cairo_NATIVE_EXIT(env, that, cairo_1current_1pattern_FUNC);
++ Cairo_NATIVE_ENTER(env, that, cairo_1get_1antialias_FUNC);
++ rc = (jint)cairo_get_antialias((cairo_t *)arg0);
++ Cairo_NATIVE_EXIT(env, that, cairo_1get_1antialias_FUNC);
+ return rc;
+ }
+ #endif
+
+-#ifndef NO_cairo_1current_1point
+-JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1current_1point)
++#ifndef NO_cairo_1get_1current_1point
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1get_1current_1point)
+ (JNIEnv *env, jclass that, jint arg0, jdoubleArray arg1, jdoubleArray arg2)
+ {
+ jdouble *lparg1=NULL;
+ jdouble *lparg2=NULL;
+- Cairo_NATIVE_ENTER(env, that, cairo_1current_1point_FUNC);
++ Cairo_NATIVE_ENTER(env, that, cairo_1get_1current_1point_FUNC);
+ if (arg1) if ((lparg1 = (*env)->GetDoubleArrayElements(env, arg1, NULL)) == NULL) goto fail;
+ if (arg2) if ((lparg2 = (*env)->GetDoubleArrayElements(env, arg2, NULL)) == NULL) goto fail;
+- cairo_current_point((cairo_t *)arg0, lparg1, lparg2);
++ cairo_get_current_point((cairo_t *)arg0, lparg1, lparg2);
+ fail:
+ if (arg2 && lparg2) (*env)->ReleaseDoubleArrayElements(env, arg2, lparg2, 0);
+ if (arg1 && lparg1) (*env)->ReleaseDoubleArrayElements(env, arg1, lparg1, 0);
+- Cairo_NATIVE_EXIT(env, that, cairo_1current_1point_FUNC);
++ Cairo_NATIVE_EXIT(env, that, cairo_1get_1current_1point_FUNC);
+ }
+ #endif
+
+-#ifndef NO_cairo_1current_1rgb_1color
+-JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1current_1rgb_1color)
+- (JNIEnv *env, jclass that, jint arg0, jdoubleArray arg1, jdoubleArray arg2, jdoubleArray arg3)
++#ifndef NO_cairo_1get_1fill_1rule
++JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1get_1fill_1rule)
++ (JNIEnv *env, jclass that, jint arg0)
+ {
+- jdouble *lparg1=NULL;
+- jdouble *lparg2=NULL;
+- jdouble *lparg3=NULL;
+- Cairo_NATIVE_ENTER(env, that, cairo_1current_1rgb_1color_FUNC);
+- if (arg1) if ((lparg1 = (*env)->GetDoubleArrayElements(env, arg1, NULL)) == NULL) goto fail;
+- if (arg2) if ((lparg2 = (*env)->GetDoubleArrayElements(env, arg2, NULL)) == NULL) goto fail;
+- if (arg3) if ((lparg3 = (*env)->GetDoubleArrayElements(env, arg3, NULL)) == NULL) goto fail;
+- cairo_current_rgb_color((cairo_t *)arg0, lparg1, lparg2, lparg3);
+-fail:
+- if (arg3 && lparg3) (*env)->ReleaseDoubleArrayElements(env, arg3, lparg3, 0);
+- if (arg2 && lparg2) (*env)->ReleaseDoubleArrayElements(env, arg2, lparg2, 0);
+- if (arg1 && lparg1) (*env)->ReleaseDoubleArrayElements(env, arg1, lparg1, 0);
+- Cairo_NATIVE_EXIT(env, that, cairo_1current_1rgb_1color_FUNC);
++ jint rc = 0;
++ Cairo_NATIVE_ENTER(env, that, cairo_1get_1fill_1rule_FUNC);
++ rc = (jint)cairo_get_fill_rule((cairo_t *)arg0);
++ Cairo_NATIVE_EXIT(env, that, cairo_1get_1fill_1rule_FUNC);
++ return rc;
+ }
+ #endif
+
+-#ifndef NO_cairo_1current_1target_1surface
+-JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1current_1target_1surface)
++#ifndef NO_cairo_1get_1font_1face
++JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1get_1font_1face)
+ (JNIEnv *env, jclass that, jint arg0)
+ {
+ jint rc = 0;
+- Cairo_NATIVE_ENTER(env, that, cairo_1current_1target_1surface_FUNC);
+- rc = (jint)cairo_current_target_surface((cairo_t *)arg0);
+- Cairo_NATIVE_EXIT(env, that, cairo_1current_1target_1surface_FUNC);
++ Cairo_NATIVE_ENTER(env, that, cairo_1get_1font_1face_FUNC);
++ rc = (jint)cairo_get_font_face((cairo_t *)arg0);
++ Cairo_NATIVE_EXIT(env, that, cairo_1get_1font_1face_FUNC);
+ return rc;
+ }
+ #endif
+
+-#ifndef NO_cairo_1current_1tolerance
+-JNIEXPORT jdouble JNICALL Cairo_NATIVE(cairo_1current_1tolerance)
+- (JNIEnv *env, jclass that, jint arg0)
++#ifndef NO_cairo_1get_1font_1matrix
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1get_1font_1matrix)
++ (JNIEnv *env, jclass that, jint arg0, jdoubleArray arg1)
+ {
+- jdouble rc = 0;
+- Cairo_NATIVE_ENTER(env, that, cairo_1current_1tolerance_FUNC);
+- rc = (jdouble)cairo_current_tolerance((cairo_t *)arg0);
+- Cairo_NATIVE_EXIT(env, that, cairo_1current_1tolerance_FUNC);
+- return rc;
++ jdouble *lparg1=NULL;
++ Cairo_NATIVE_ENTER(env, that, cairo_1get_1font_1matrix_FUNC);
++ if (arg1) if ((lparg1 = (*env)->GetDoubleArrayElements(env, arg1, NULL)) == NULL) goto fail;
++ cairo_get_font_matrix((cairo_t *)arg0, (cairo_matrix_t *)lparg1);
++fail:
++ if (arg1 && lparg1) (*env)->ReleaseDoubleArrayElements(env, arg1, lparg1, 0);
++ Cairo_NATIVE_EXIT(env, that, cairo_1get_1font_1matrix_FUNC);
+ }
+ #endif
+
+-#ifndef NO_cairo_1curve_1to
+-JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1curve_1to)
+- (JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2, jdouble arg3, jdouble arg4, jdouble arg5, jdouble arg6)
++#ifndef NO_cairo_1get_1font_1options
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1get_1font_1options)
++ (JNIEnv *env, jclass that, jint arg0, jint arg1)
+ {
+- Cairo_NATIVE_ENTER(env, that, cairo_1curve_1to_FUNC);
+- cairo_curve_to((cairo_t *)arg0, arg1, arg2, arg3, arg4, arg5, arg6);
+- Cairo_NATIVE_EXIT(env, that, cairo_1curve_1to_FUNC);
++ Cairo_NATIVE_ENTER(env, that, cairo_1get_1font_1options_FUNC);
++ cairo_get_font_options((cairo_t *)arg0, (cairo_font_options_t *)arg1);
++ Cairo_NATIVE_EXIT(env, that, cairo_1get_1font_1options_FUNC);
+ }
+ #endif
+
+-#ifndef NO_cairo_1default_1matrix
+-JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1default_1matrix)
++#ifndef NO_cairo_1get_1line_1cap
++JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1get_1line_1cap)
+ (JNIEnv *env, jclass that, jint arg0)
+ {
+- Cairo_NATIVE_ENTER(env, that, cairo_1default_1matrix_FUNC);
+- cairo_default_matrix((cairo_t *)arg0);
+- Cairo_NATIVE_EXIT(env, that, cairo_1default_1matrix_FUNC);
++ jint rc = 0;
++ Cairo_NATIVE_ENTER(env, that, cairo_1get_1line_1cap_FUNC);
++ rc = (jint)cairo_get_line_cap((cairo_t *)arg0);
++ Cairo_NATIVE_EXIT(env, that, cairo_1get_1line_1cap_FUNC);
++ return rc;
+ }
+ #endif
+
+-#ifndef NO_cairo_1destroy
+-JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1destroy)
++#ifndef NO_cairo_1get_1line_1join
++JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1get_1line_1join)
+ (JNIEnv *env, jclass that, jint arg0)
+ {
+- Cairo_NATIVE_ENTER(env, that, cairo_1destroy_FUNC);
+- cairo_destroy((cairo_t *)arg0);
+- Cairo_NATIVE_EXIT(env, that, cairo_1destroy_FUNC);
++ jint rc = 0;
++ Cairo_NATIVE_ENTER(env, that, cairo_1get_1line_1join_FUNC);
++ rc = (jint)cairo_get_line_join((cairo_t *)arg0);
++ Cairo_NATIVE_EXIT(env, that, cairo_1get_1line_1join_FUNC);
++ return rc;
+ }
+ #endif
+
+-#ifndef NO_cairo_1fill
+-JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1fill)
++#ifndef NO_cairo_1get_1line_1width
++JNIEXPORT jdouble JNICALL Cairo_NATIVE(cairo_1get_1line_1width)
+ (JNIEnv *env, jclass that, jint arg0)
+ {
+- Cairo_NATIVE_ENTER(env, that, cairo_1fill_FUNC);
+- cairo_fill((cairo_t *)arg0);
+- Cairo_NATIVE_EXIT(env, that, cairo_1fill_FUNC);
++ jdouble rc = 0;
++ Cairo_NATIVE_ENTER(env, that, cairo_1get_1line_1width_FUNC);
++ rc = (jdouble)cairo_get_line_width((cairo_t *)arg0);
++ Cairo_NATIVE_EXIT(env, that, cairo_1get_1line_1width_FUNC);
++ return rc;
+ }
+ #endif
+
+-#ifndef NO_cairo_1fill_1extents
+-JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1fill_1extents)
+- (JNIEnv *env, jclass that, jint arg0, jdoubleArray arg1, jdoubleArray arg2, jdoubleArray arg3, jdoubleArray arg4)
++#ifndef NO_cairo_1get_1matrix
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1get_1matrix)
++ (JNIEnv *env, jclass that, jint arg0, jdoubleArray arg1)
+ {
+ jdouble *lparg1=NULL;
+- jdouble *lparg2=NULL;
+- jdouble *lparg3=NULL;
+- jdouble *lparg4=NULL;
+- Cairo_NATIVE_ENTER(env, that, cairo_1fill_1extents_FUNC);
++ Cairo_NATIVE_ENTER(env, that, cairo_1get_1matrix_FUNC);
+ if (arg1) if ((lparg1 = (*env)->GetDoubleArrayElements(env, arg1, NULL)) == NULL) goto fail;
+- if (arg2) if ((lparg2 = (*env)->GetDoubleArrayElements(env, arg2, NULL)) == NULL) goto fail;
+- if (arg3) if ((lparg3 = (*env)->GetDoubleArrayElements(env, arg3, NULL)) == NULL) goto fail;
+- if (arg4) if ((lparg4 = (*env)->GetDoubleArrayElements(env, arg4, NULL)) == NULL) goto fail;
+- cairo_fill_extents((cairo_t *)arg0, lparg1, lparg2, lparg3, lparg4);
++ cairo_get_matrix((cairo_t *)arg0, (cairo_matrix_t *)lparg1);
+ fail:
+- if (arg4 && lparg4) (*env)->ReleaseDoubleArrayElements(env, arg4, lparg4, 0);
+- if (arg3 && lparg3) (*env)->ReleaseDoubleArrayElements(env, arg3, lparg3, 0);
+- if (arg2 && lparg2) (*env)->ReleaseDoubleArrayElements(env, arg2, lparg2, 0);
+ if (arg1 && lparg1) (*env)->ReleaseDoubleArrayElements(env, arg1, lparg1, 0);
+- Cairo_NATIVE_EXIT(env, that, cairo_1fill_1extents_FUNC);
++ Cairo_NATIVE_EXIT(env, that, cairo_1get_1matrix_FUNC);
+ }
+ #endif
+
+-#ifndef NO_cairo_1font_1destroy
+-JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1font_1destroy)
++#ifndef NO_cairo_1get_1miter_1limit
++JNIEXPORT jdouble JNICALL Cairo_NATIVE(cairo_1get_1miter_1limit)
+ (JNIEnv *env, jclass that, jint arg0)
+ {
+- Cairo_NATIVE_ENTER(env, that, cairo_1font_1destroy_FUNC);
+- cairo_font_destroy((cairo_font_t *)arg0);
+- Cairo_NATIVE_EXIT(env, that, cairo_1font_1destroy_FUNC);
++ jdouble rc = 0;
++ Cairo_NATIVE_ENTER(env, that, cairo_1get_1miter_1limit_FUNC);
++ rc = (jdouble)cairo_get_miter_limit((cairo_t *)arg0);
++ Cairo_NATIVE_EXIT(env, that, cairo_1get_1miter_1limit_FUNC);
++ return rc;
+ }
+ #endif
+
+-#ifndef NO_cairo_1font_1extents_1t_1sizeof
+-JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1font_1extents_1t_1sizeof)
+- (JNIEnv *env, jclass that)
++#ifndef NO_cairo_1get_1operator
++JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1get_1operator)
++ (JNIEnv *env, jclass that, jint arg0)
+ {
+ jint rc = 0;
+- Cairo_NATIVE_ENTER(env, that, cairo_1font_1extents_1t_1sizeof_FUNC);
+- rc = (jint)cairo_font_extents_t_sizeof();
+- Cairo_NATIVE_EXIT(env, that, cairo_1font_1extents_1t_1sizeof_FUNC);
++ Cairo_NATIVE_ENTER(env, that, cairo_1get_1operator_FUNC);
++ rc = (jint)cairo_get_operator((cairo_t *)arg0);
++ Cairo_NATIVE_EXIT(env, that, cairo_1get_1operator_FUNC);
++ return rc;
++}
++#endif
++
++#ifndef NO_cairo_1get_1source
++JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1get_1source)
++ (JNIEnv *env, jclass that, jint arg0)
++{
++ jint rc = 0;
++ Cairo_NATIVE_ENTER(env, that, cairo_1get_1source_FUNC);
++ rc = (jint)cairo_get_source((cairo_t *)arg0);
++ Cairo_NATIVE_EXIT(env, that, cairo_1get_1source_FUNC);
+ return rc;
+ }
+ #endif
+
+-#ifndef NO_cairo_1font_1reference
+-JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1font_1reference)
++#ifndef NO_cairo_1get_1target
++JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1get_1target)
+ (JNIEnv *env, jclass that, jint arg0)
+ {
+- Cairo_NATIVE_ENTER(env, that, cairo_1font_1reference_FUNC);
+- cairo_font_reference((cairo_font_t *)arg0);
+- Cairo_NATIVE_EXIT(env, that, cairo_1font_1reference_FUNC);
++ jint rc = 0;
++ Cairo_NATIVE_ENTER(env, that, cairo_1get_1target_FUNC);
++ rc = (jint)cairo_get_target((cairo_t *)arg0);
++ Cairo_NATIVE_EXIT(env, that, cairo_1get_1target_FUNC);
++ return rc;
++}
++#endif
++
++#ifndef NO_cairo_1get_1tolerance
++JNIEXPORT jdouble JNICALL Cairo_NATIVE(cairo_1get_1tolerance)
++ (JNIEnv *env, jclass that, jint arg0)
++{
++ jdouble rc = 0;
++ Cairo_NATIVE_ENTER(env, that, cairo_1get_1tolerance_FUNC);
++ rc = (jdouble)cairo_get_tolerance((cairo_t *)arg0);
++ Cairo_NATIVE_EXIT(env, that, cairo_1get_1tolerance_FUNC);
++ return rc;
+ }
+ #endif
+
+@@ -469,6 +539,30 @@
+ }
+ #endif
+
++#ifndef NO_cairo_1image_1surface_1get_1height
++JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1image_1surface_1get_1height)
++ (JNIEnv *env, jclass that, jint arg0)
++{
++ jint rc = 0;
++ Cairo_NATIVE_ENTER(env, that, cairo_1image_1surface_1get_1height_FUNC);
++ rc = (jint)cairo_image_surface_get_height((cairo_surface_t *)arg0);
++ Cairo_NATIVE_EXIT(env, that, cairo_1image_1surface_1get_1height_FUNC);
++ return rc;
++}
++#endif
++
++#ifndef NO_cairo_1image_1surface_1get_1width
++JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1image_1surface_1get_1width)
++ (JNIEnv *env, jclass that, jint arg0)
++{
++ jint rc = 0;
++ Cairo_NATIVE_ENTER(env, that, cairo_1image_1surface_1get_1width_FUNC);
++ rc = (jint)cairo_image_surface_get_width((cairo_surface_t *)arg0);
++ Cairo_NATIVE_EXIT(env, that, cairo_1image_1surface_1get_1width_FUNC);
++ return rc;
++}
++#endif
++
+ #ifndef NO_cairo_1in_1fill
+ JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1in_1fill)
+ (JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2)
+@@ -493,244 +587,221 @@
+ }
+ #endif
+
+-#ifndef NO_cairo_1init_1clip
+-JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1init_1clip)
+- (JNIEnv *env, jclass that, jint arg0)
++#ifndef NO_cairo_1line_1to
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1line_1to)
++ (JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2)
+ {
+- Cairo_NATIVE_ENTER(env, that, cairo_1init_1clip_FUNC);
+- cairo_init_clip((cairo_t *)arg0);
+- Cairo_NATIVE_EXIT(env, that, cairo_1init_1clip_FUNC);
++ Cairo_NATIVE_ENTER(env, that, cairo_1line_1to_FUNC);
++ cairo_line_to((cairo_t *)arg0, arg1, arg2);
++ Cairo_NATIVE_EXIT(env, that, cairo_1line_1to_FUNC);
+ }
+ #endif
+
+-#ifndef NO_cairo_1inverse_1transform_1distance
+-JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1inverse_1transform_1distance)
+- (JNIEnv *env, jclass that, jint arg0, jdoubleArray arg1, jdoubleArray arg2)
++#ifndef NO_cairo_1mask
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1mask)
++ (JNIEnv *env, jclass that, jint arg0, jint arg1)
+ {
+- jdouble *lparg1=NULL;
+- jdouble *lparg2=NULL;
+- Cairo_NATIVE_ENTER(env, that, cairo_1inverse_1transform_1distance_FUNC);
+- if (arg1) if ((lparg1 = (*env)->GetDoubleArrayElements(env, arg1, NULL)) == NULL) goto fail;
+- if (arg2) if ((lparg2 = (*env)->GetDoubleArrayElements(env, arg2, NULL)) == NULL) goto fail;
+- cairo_inverse_transform_distance((cairo_t *)arg0, lparg1, lparg2);
+-fail:
+- if (arg2 && lparg2) (*env)->ReleaseDoubleArrayElements(env, arg2, lparg2, 0);
+- if (arg1 && lparg1) (*env)->ReleaseDoubleArrayElements(env, arg1, lparg1, 0);
+- Cairo_NATIVE_EXIT(env, that, cairo_1inverse_1transform_1distance_FUNC);
++ Cairo_NATIVE_ENTER(env, that, cairo_1mask_FUNC);
++ cairo_mask((cairo_t *)arg0, (cairo_pattern_t *)arg1);
++ Cairo_NATIVE_EXIT(env, that, cairo_1mask_FUNC);
+ }
+ #endif
+
+-#ifndef NO_cairo_1inverse_1transform_1point
+-JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1inverse_1transform_1point)
+- (JNIEnv *env, jclass that, jint arg0, jdoubleArray arg1, jdoubleArray arg2)
++#ifndef NO_cairo_1mask_1surface
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1mask_1surface)
++ (JNIEnv *env, jclass that, jint arg0, jint arg1, jdouble arg2, jdouble arg3)
+ {
+- jdouble *lparg1=NULL;
+- jdouble *lparg2=NULL;
+- Cairo_NATIVE_ENTER(env, that, cairo_1inverse_1transform_1point_FUNC);
+- if (arg1) if ((lparg1 = (*env)->GetDoubleArrayElements(env, arg1, NULL)) == NULL) goto fail;
+- if (arg2) if ((lparg2 = (*env)->GetDoubleArrayElements(env, arg2, NULL)) == NULL) goto fail;
+- cairo_inverse_transform_point((cairo_t *)arg0, lparg1, lparg2);
+-fail:
+- if (arg2 && lparg2) (*env)->ReleaseDoubleArrayElements(env, arg2, lparg2, 0);
+- if (arg1 && lparg1) (*env)->ReleaseDoubleArrayElements(env, arg1, lparg1, 0);
+- Cairo_NATIVE_EXIT(env, that, cairo_1inverse_1transform_1point_FUNC);
++ Cairo_NATIVE_ENTER(env, that, cairo_1mask_1surface_FUNC);
++ cairo_mask_surface((cairo_t *)arg0, (cairo_surface_t *)arg1, arg2, arg3);
++ Cairo_NATIVE_EXIT(env, that, cairo_1mask_1surface_FUNC);
+ }
+ #endif
+
+-#ifndef NO_cairo_1line_1to
+-JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1line_1to)
+- (JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2)
++#ifndef NO_cairo_1matrix_1init
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1matrix_1init)
++ (JNIEnv *env, jclass that, jdoubleArray arg0, jdouble arg1, jdouble arg2, jdouble arg3, jdouble arg4, jdouble arg5, jdouble arg6)
+ {
+- Cairo_NATIVE_ENTER(env, that, cairo_1line_1to_FUNC);
+- cairo_line_to((cairo_t *)arg0, arg1, arg2);
+- Cairo_NATIVE_EXIT(env, that, cairo_1line_1to_FUNC);
++ jdouble *lparg0=NULL;
++ Cairo_NATIVE_ENTER(env, that, cairo_1matrix_1init_FUNC);
++ if (arg0) if ((lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL)) == NULL) goto fail;
++ cairo_matrix_init((cairo_matrix_t *)lparg0, arg1, arg2, arg3, arg4, arg5, arg6);
++fail:
++ if (arg0 && lparg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
++ Cairo_NATIVE_EXIT(env, that, cairo_1matrix_1init_FUNC);
+ }
+ #endif
+
+-#ifndef NO_cairo_1matrix_1copy
+-JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1matrix_1copy)
+- (JNIEnv *env, jclass that, jint arg0, jint arg1)
++#ifndef NO_cairo_1matrix_1init_1identity
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1matrix_1init_1identity)
++ (JNIEnv *env, jclass that, jdoubleArray arg0)
+ {
+- jint rc = 0;
+- Cairo_NATIVE_ENTER(env, that, cairo_1matrix_1copy_FUNC);
+- rc = (jint)cairo_matrix_copy((cairo_matrix_t *)arg0, (cairo_matrix_t *)arg1);
+- Cairo_NATIVE_EXIT(env, that, cairo_1matrix_1copy_FUNC);
+- return rc;
++ jdouble *lparg0=NULL;
++ Cairo_NATIVE_ENTER(env, that, cairo_1matrix_1init_1identity_FUNC);
++ if (arg0) if ((lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL)) == NULL) goto fail;
++ cairo_matrix_init_identity((cairo_matrix_t *)lparg0);
++fail:
++ if (arg0 && lparg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
++ Cairo_NATIVE_EXIT(env, that, cairo_1matrix_1init_1identity_FUNC);
+ }
+ #endif
+
+-#ifndef NO_cairo_1matrix_1create
+-JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1matrix_1create)
+- (JNIEnv *env, jclass that)
++#ifndef NO_cairo_1matrix_1init_1rotate
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1matrix_1init_1rotate)
++ (JNIEnv *env, jclass that, jdoubleArray arg0, jdouble arg1)
+ {
+- jint rc = 0;
+- Cairo_NATIVE_ENTER(env, that, cairo_1matrix_1create_FUNC);
+- rc = (jint)cairo_matrix_create();
+- Cairo_NATIVE_EXIT(env, that, cairo_1matrix_1create_FUNC);
+- return rc;
++ jdouble *lparg0=NULL;
++ Cairo_NATIVE_ENTER(env, that, cairo_1matrix_1init_1rotate_FUNC);
++ if (arg0) if ((lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL)) == NULL) goto fail;
++ cairo_matrix_init_rotate((cairo_matrix_t *)lparg0, arg1);
++fail:
++ if (arg0 && lparg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
++ Cairo_NATIVE_EXIT(env, that, cairo_1matrix_1init_1rotate_FUNC);
+ }
+ #endif
+
+-#ifndef NO_cairo_1matrix_1destroy
+-JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1matrix_1destroy)
+- (JNIEnv *env, jclass that, jint arg0)
++#ifndef NO_cairo_1matrix_1init_1scale
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1matrix_1init_1scale)
++ (JNIEnv *env, jclass that, jdoubleArray arg0, jdouble arg1, jdouble arg2)
+ {
+- Cairo_NATIVE_ENTER(env, that, cairo_1matrix_1destroy_FUNC);
+- cairo_matrix_destroy((cairo_matrix_t *)arg0);
+- Cairo_NATIVE_EXIT(env, that, cairo_1matrix_1destroy_FUNC);
++ jdouble *lparg0=NULL;
++ Cairo_NATIVE_ENTER(env, that, cairo_1matrix_1init_1scale_FUNC);
++ if (arg0) if ((lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL)) == NULL) goto fail;
++ cairo_matrix_init_scale((cairo_matrix_t *)lparg0, arg1, arg2);
++fail:
++ if (arg0 && lparg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
++ Cairo_NATIVE_EXIT(env, that, cairo_1matrix_1init_1scale_FUNC);
+ }
+ #endif
+
+-#ifndef NO_cairo_1matrix_1get_1affine
+-JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1matrix_1get_1affine)
+- (JNIEnv *env, jclass that, jint arg0, jdoubleArray arg1, jdoubleArray arg2, jdoubleArray arg3, jdoubleArray arg4, jdoubleArray arg5, jdoubleArray arg6)
++#ifndef NO_cairo_1matrix_1init_1translate
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1matrix_1init_1translate)
++ (JNIEnv *env, jclass that, jdoubleArray arg0, jdouble arg1, jdouble arg2)
+ {
+- jdouble *lparg1=NULL;
+- jdouble *lparg2=NULL;
+- jdouble *lparg3=NULL;
+- jdouble *lparg4=NULL;
+- jdouble *lparg5=NULL;
+- jdouble *lparg6=NULL;
+- jint rc = 0;
+- Cairo_NATIVE_ENTER(env, that, cairo_1matrix_1get_1affine_FUNC);
+- if (arg1) if ((lparg1 = (*env)->GetDoubleArrayElements(env, arg1, NULL)) == NULL) goto fail;
+- if (arg2) if ((lparg2 = (*env)->GetDoubleArrayElements(env, arg2, NULL)) == NULL) goto fail;
+- if (arg3) if ((lparg3 = (*env)->GetDoubleArrayElements(env, arg3, NULL)) == NULL) goto fail;
+- if (arg4) if ((lparg4 = (*env)->GetDoubleArrayElements(env, arg4, NULL)) == NULL) goto fail;
+- if (arg5) if ((lparg5 = (*env)->GetDoubleArrayElements(env, arg5, NULL)) == NULL) goto fail;
+- if (arg6) if ((lparg6 = (*env)->GetDoubleArrayElements(env, arg6, NULL)) == NULL) goto fail;
+- rc = (jint)cairo_matrix_get_affine((cairo_matrix_t *)arg0, lparg1, lparg2, lparg3, lparg4, lparg5, lparg6);
++ jdouble *lparg0=NULL;
++ Cairo_NATIVE_ENTER(env, that, cairo_1matrix_1init_1translate_FUNC);
++ if (arg0) if ((lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL)) == NULL) goto fail;
++ cairo_matrix_init_translate((cairo_matrix_t *)lparg0, arg1, arg2);
+ fail:
+- if (arg6 && lparg6) (*env)->ReleaseDoubleArrayElements(env, arg6, lparg6, 0);
+- if (arg5 && lparg5) (*env)->ReleaseDoubleArrayElements(env, arg5, lparg5, 0);
+- if (arg4 && lparg4) (*env)->ReleaseDoubleArrayElements(env, arg4, lparg4, 0);
+- if (arg3 && lparg3) (*env)->ReleaseDoubleArrayElements(env, arg3, lparg3, 0);
+- if (arg2 && lparg2) (*env)->ReleaseDoubleArrayElements(env, arg2, lparg2, 0);
+- if (arg1 && lparg1) (*env)->ReleaseDoubleArrayElements(env, arg1, lparg1, 0);
+- Cairo_NATIVE_EXIT(env, that, cairo_1matrix_1get_1affine_FUNC);
+- return rc;
++ if (arg0 && lparg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
++ Cairo_NATIVE_EXIT(env, that, cairo_1matrix_1init_1translate_FUNC);
+ }
+ #endif
+
+ #ifndef NO_cairo_1matrix_1invert
+ JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1matrix_1invert)
+- (JNIEnv *env, jclass that, jint arg0)
++ (JNIEnv *env, jclass that, jdoubleArray arg0)
+ {
++ jdouble *lparg0=NULL;
+ jint rc = 0;
+ Cairo_NATIVE_ENTER(env, that, cairo_1matrix_1invert_FUNC);
+- rc = (jint)cairo_matrix_invert((cairo_matrix_t *)arg0);
++ if (arg0) if ((lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL)) == NULL) goto fail;
++ rc = (jint)cairo_matrix_invert((cairo_matrix_t *)lparg0);
++fail:
++ if (arg0 && lparg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
+ Cairo_NATIVE_EXIT(env, that, cairo_1matrix_1invert_FUNC);
+ return rc;
+ }
+ #endif
+
+ #ifndef NO_cairo_1matrix_1multiply
+-JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1matrix_1multiply)
+- (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1matrix_1multiply)
++ (JNIEnv *env, jclass that, jdoubleArray arg0, jdoubleArray arg1, jdoubleArray arg2)
+ {
+- jint rc = 0;
++ jdouble *lparg0=NULL;
++ jdouble *lparg1=NULL;
++ jdouble *lparg2=NULL;
+ Cairo_NATIVE_ENTER(env, that, cairo_1matrix_1multiply_FUNC);
+- rc = (jint)cairo_matrix_multiply((cairo_matrix_t *)arg0, (cairo_matrix_t *)arg1, (cairo_matrix_t *)arg2);
++ if (arg0) if ((lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL)) == NULL) goto fail;
++ if (arg1) if ((lparg1 = (*env)->GetDoubleArrayElements(env, arg1, NULL)) == NULL) goto fail;
++ if (arg2) if ((lparg2 = (*env)->GetDoubleArrayElements(env, arg2, NULL)) == NULL) goto fail;
++ cairo_matrix_multiply((cairo_matrix_t *)lparg0, (cairo_matrix_t *)lparg1, (cairo_matrix_t *)lparg2);
++fail:
++ if (arg2 && lparg2) (*env)->ReleaseDoubleArrayElements(env, arg2, lparg2, 0);
++ if (arg1 && lparg1) (*env)->ReleaseDoubleArrayElements(env, arg1, lparg1, 0);
++ if (arg0 && lparg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
+ Cairo_NATIVE_EXIT(env, that, cairo_1matrix_1multiply_FUNC);
+- return rc;
+ }
+ #endif
+
+ #ifndef NO_cairo_1matrix_1rotate
+-JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1matrix_1rotate)
+- (JNIEnv *env, jclass that, jint arg0, jdouble arg1)
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1matrix_1rotate)
++ (JNIEnv *env, jclass that, jdoubleArray arg0, jdouble arg1)
+ {
+- jint rc = 0;
++ jdouble *lparg0=NULL;
+ Cairo_NATIVE_ENTER(env, that, cairo_1matrix_1rotate_FUNC);
+- rc = (jint)cairo_matrix_rotate((cairo_matrix_t *)arg0, arg1);
++ if (arg0) if ((lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL)) == NULL) goto fail;
++ cairo_matrix_rotate((cairo_matrix_t *)lparg0, arg1);
++fail:
++ if (arg0 && lparg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
+ Cairo_NATIVE_EXIT(env, that, cairo_1matrix_1rotate_FUNC);
+- return rc;
+ }
+ #endif
+
+ #ifndef NO_cairo_1matrix_1scale
+-JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1matrix_1scale)
+- (JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2)
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1matrix_1scale)
++ (JNIEnv *env, jclass that, jdoubleArray arg0, jdouble arg1, jdouble arg2)
+ {
+- jint rc = 0;
++ jdouble *lparg0=NULL;
+ Cairo_NATIVE_ENTER(env, that, cairo_1matrix_1scale_FUNC);
+- rc = (jint)cairo_matrix_scale((cairo_matrix_t *)arg0, arg1, arg2);
++ if (arg0) if ((lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL)) == NULL) goto fail;
++ cairo_matrix_scale((cairo_matrix_t *)lparg0, arg1, arg2);
++fail:
++ if (arg0 && lparg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
+ Cairo_NATIVE_EXIT(env, that, cairo_1matrix_1scale_FUNC);
+- return rc;
+-}
+-#endif
+-
+-#ifndef NO_cairo_1matrix_1set_1affine
+-JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1matrix_1set_1affine)
+- (JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2, jdouble arg3, jdouble arg4, jdouble arg5, jdouble arg6)
+-{
+- jint rc = 0;
+- Cairo_NATIVE_ENTER(env, that, cairo_1matrix_1set_1affine_FUNC);
+- rc = (jint)cairo_matrix_set_affine((cairo_matrix_t *)arg0, arg1, arg2, arg3, arg4, arg5, arg6);
+- Cairo_NATIVE_EXIT(env, that, cairo_1matrix_1set_1affine_FUNC);
+- return rc;
+-}
+-#endif
+-
+-#ifndef NO_cairo_1matrix_1set_1identity
+-JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1matrix_1set_1identity)
+- (JNIEnv *env, jclass that, jint arg0)
+-{
+- jint rc = 0;
+- Cairo_NATIVE_ENTER(env, that, cairo_1matrix_1set_1identity_FUNC);
+- rc = (jint)cairo_matrix_set_identity((cairo_matrix_t *)arg0);
+- Cairo_NATIVE_EXIT(env, that, cairo_1matrix_1set_1identity_FUNC);
+- return rc;
+ }
+ #endif
+
+ #ifndef NO_cairo_1matrix_1transform_1distance
+-JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1matrix_1transform_1distance)
+- (JNIEnv *env, jclass that, jint arg0, jdoubleArray arg1, jdoubleArray arg2)
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1matrix_1transform_1distance)
++ (JNIEnv *env, jclass that, jdoubleArray arg0, jdoubleArray arg1, jdoubleArray arg2)
+ {
++ jdouble *lparg0=NULL;
+ jdouble *lparg1=NULL;
+ jdouble *lparg2=NULL;
+- jint rc = 0;
+ Cairo_NATIVE_ENTER(env, that, cairo_1matrix_1transform_1distance_FUNC);
++ if (arg0) if ((lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL)) == NULL) goto fail;
+ if (arg1) if ((lparg1 = (*env)->GetDoubleArrayElements(env, arg1, NULL)) == NULL) goto fail;
+ if (arg2) if ((lparg2 = (*env)->GetDoubleArrayElements(env, arg2, NULL)) == NULL) goto fail;
+- rc = (jint)cairo_matrix_transform_distance((cairo_matrix_t *)arg0, lparg1, lparg2);
++ cairo_matrix_transform_distance((cairo_matrix_t *)lparg0, lparg1, lparg2);
+ fail:
+ if (arg2 && lparg2) (*env)->ReleaseDoubleArrayElements(env, arg2, lparg2, 0);
+ if (arg1 && lparg1) (*env)->ReleaseDoubleArrayElements(env, arg1, lparg1, 0);
++ if (arg0 && lparg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
+ Cairo_NATIVE_EXIT(env, that, cairo_1matrix_1transform_1distance_FUNC);
+- return rc;
+ }
+ #endif
+
+ #ifndef NO_cairo_1matrix_1transform_1point
+-JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1matrix_1transform_1point)
+- (JNIEnv *env, jclass that, jint arg0, jdoubleArray arg1, jdoubleArray arg2)
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1matrix_1transform_1point)
++ (JNIEnv *env, jclass that, jdoubleArray arg0, jdoubleArray arg1, jdoubleArray arg2)
+ {
++ jdouble *lparg0=NULL;
+ jdouble *lparg1=NULL;
+ jdouble *lparg2=NULL;
+- jint rc = 0;
+ Cairo_NATIVE_ENTER(env, that, cairo_1matrix_1transform_1point_FUNC);
++ if (arg0) if ((lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL)) == NULL) goto fail;
+ if (arg1) if ((lparg1 = (*env)->GetDoubleArrayElements(env, arg1, NULL)) == NULL) goto fail;
+ if (arg2) if ((lparg2 = (*env)->GetDoubleArrayElements(env, arg2, NULL)) == NULL) goto fail;
+- rc = (jint)cairo_matrix_transform_point((cairo_matrix_t *)arg0, lparg1, lparg2);
++ cairo_matrix_transform_point((cairo_matrix_t *)lparg0, lparg1, lparg2);
+ fail:
+ if (arg2 && lparg2) (*env)->ReleaseDoubleArrayElements(env, arg2, lparg2, 0);
+ if (arg1 && lparg1) (*env)->ReleaseDoubleArrayElements(env, arg1, lparg1, 0);
++ if (arg0 && lparg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
+ Cairo_NATIVE_EXIT(env, that, cairo_1matrix_1transform_1point_FUNC);
+- return rc;
+ }
+ #endif
+
+ #ifndef NO_cairo_1matrix_1translate
+-JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1matrix_1translate)
+- (JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2)
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1matrix_1translate)
++ (JNIEnv *env, jclass that, jdoubleArray arg0, jdouble arg1, jdouble arg2)
+ {
+- jint rc = 0;
++ jdouble *lparg0=NULL;
+ Cairo_NATIVE_ENTER(env, that, cairo_1matrix_1translate_FUNC);
+- rc = (jint)cairo_matrix_translate((cairo_matrix_t *)arg0, arg1, arg2);
++ if (arg0) if ((lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL)) == NULL) goto fail;
++ cairo_matrix_translate((cairo_matrix_t *)lparg0, arg1, arg2);
++fail:
++ if (arg0 && lparg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
+ Cairo_NATIVE_EXIT(env, that, cairo_1matrix_1translate_FUNC);
+- return rc;
+ }
+ #endif
+
+@@ -754,18 +825,80 @@
+ }
+ #endif
+
+-#ifndef NO_cairo_1pattern_1add_1color_1stop
+-JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1pattern_1add_1color_1stop)
+- (JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2, jdouble arg3, jdouble arg4, jdouble arg5)
++#ifndef NO_cairo_1paint
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1paint)
++ (JNIEnv *env, jclass that, jint arg0)
++{
++ Cairo_NATIVE_ENTER(env, that, cairo_1paint_FUNC);
++ cairo_paint((cairo_t *)arg0);
++ Cairo_NATIVE_EXIT(env, that, cairo_1paint_FUNC);
++}
++#endif
++
++#ifndef NO_cairo_1paint_1with_1alpha
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1paint_1with_1alpha)
++ (JNIEnv *env, jclass that, jint arg0, jdouble arg1)
++{
++ Cairo_NATIVE_ENTER(env, that, cairo_1paint_1with_1alpha_FUNC);
++ cairo_paint_with_alpha((cairo_t *)arg0, arg1);
++ Cairo_NATIVE_EXIT(env, that, cairo_1paint_1with_1alpha_FUNC);
++}
++#endif
++
++#ifndef NO_cairo_1path_1data_1t_1sizeof
++JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1path_1data_1t_1sizeof)
++ (JNIEnv *env, jclass that)
++{
++ jint rc = 0;
++ Cairo_NATIVE_ENTER(env, that, cairo_1path_1data_1t_1sizeof_FUNC);
++ rc = (jint)cairo_path_data_t_sizeof();
++ Cairo_NATIVE_EXIT(env, that, cairo_1path_1data_1t_1sizeof_FUNC);
++ return rc;
++}
++#endif
++
++#ifndef NO_cairo_1path_1destroy
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1path_1destroy)
++ (JNIEnv *env, jclass that, jint arg0)
++{
++ Cairo_NATIVE_ENTER(env, that, cairo_1path_1destroy_FUNC);
++ cairo_path_destroy((cairo_path_t *)arg0);
++ Cairo_NATIVE_EXIT(env, that, cairo_1path_1destroy_FUNC);
++}
++#endif
++
++#ifndef NO_cairo_1path_1t_1sizeof
++JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1path_1t_1sizeof)
++ (JNIEnv *env, jclass that)
+ {
+ jint rc = 0;
+- Cairo_NATIVE_ENTER(env, that, cairo_1pattern_1add_1color_1stop_FUNC);
+- rc = (jint)cairo_pattern_add_color_stop((cairo_pattern_t *)arg0, arg1, arg2, arg3, arg4, arg5);
+- Cairo_NATIVE_EXIT(env, that, cairo_1pattern_1add_1color_1stop_FUNC);
++ Cairo_NATIVE_ENTER(env, that, cairo_1path_1t_1sizeof_FUNC);
++ rc = (jint)cairo_path_t_sizeof();
++ Cairo_NATIVE_EXIT(env, that, cairo_1path_1t_1sizeof_FUNC);
+ return rc;
+ }
+ #endif
+
++#ifndef NO_cairo_1pattern_1add_1color_1stop_1rgb
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1pattern_1add_1color_1stop_1rgb)
++ (JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2, jdouble arg3, jdouble arg4)
++{
++ Cairo_NATIVE_ENTER(env, that, cairo_1pattern_1add_1color_1stop_1rgb_FUNC);
++ cairo_pattern_add_color_stop_rgb((cairo_pattern_t *)arg0, arg1, arg2, arg3, arg4);
++ Cairo_NATIVE_EXIT(env, that, cairo_1pattern_1add_1color_1stop_1rgb_FUNC);
++}
++#endif
++
++#ifndef NO_cairo_1pattern_1add_1color_1stop_1rgba
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1pattern_1add_1color_1stop_1rgba)
++ (JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2, jdouble arg3, jdouble arg4, jdouble arg5)
++{
++ Cairo_NATIVE_ENTER(env, that, cairo_1pattern_1add_1color_1stop_1rgba_FUNC);
++ cairo_pattern_add_color_stop_rgba((cairo_pattern_t *)arg0, arg1, arg2, arg3, arg4, arg5);
++ Cairo_NATIVE_EXIT(env, that, cairo_1pattern_1add_1color_1stop_1rgba_FUNC);
++}
++#endif
++
+ #ifndef NO_cairo_1pattern_1create_1for_1surface
+ JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1pattern_1create_1for_1surface)
+ (JNIEnv *env, jclass that, jint arg0)
+@@ -837,14 +970,16 @@
+ #endif
+
+ #ifndef NO_cairo_1pattern_1get_1matrix
+-JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1pattern_1get_1matrix)
+- (JNIEnv *env, jclass that, jint arg0, jint arg1)
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1pattern_1get_1matrix)
++ (JNIEnv *env, jclass that, jint arg0, jdoubleArray arg1)
+ {
+- jint rc = 0;
++ jdouble *lparg1=NULL;
+ Cairo_NATIVE_ENTER(env, that, cairo_1pattern_1get_1matrix_FUNC);
+- rc = (jint)cairo_pattern_get_matrix((cairo_pattern_t *)arg0, (cairo_matrix_t *)arg1);
++ if (arg1) if ((lparg1 = (*env)->GetDoubleArrayElements(env, arg1, NULL)) == NULL) goto fail;
++ cairo_pattern_get_matrix((cairo_pattern_t *)arg0, (cairo_matrix_t *)lparg1);
++fail:
++ if (arg1 && lparg1) (*env)->ReleaseDoubleArrayElements(env, arg1, lparg1, 0);
+ Cairo_NATIVE_EXIT(env, that, cairo_1pattern_1get_1matrix_FUNC);
+- return rc;
+ }
+ #endif
+
+@@ -859,38 +994,36 @@
+ #endif
+
+ #ifndef NO_cairo_1pattern_1set_1extend
+-JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1pattern_1set_1extend)
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1pattern_1set_1extend)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1)
+ {
+- jint rc = 0;
+ Cairo_NATIVE_ENTER(env, that, cairo_1pattern_1set_1extend_FUNC);
+- rc = (jint)cairo_pattern_set_extend((cairo_pattern_t *)arg0, arg1);
++ cairo_pattern_set_extend((cairo_pattern_t *)arg0, arg1);
+ Cairo_NATIVE_EXIT(env, that, cairo_1pattern_1set_1extend_FUNC);
+- return rc;
+ }
+ #endif
+
+ #ifndef NO_cairo_1pattern_1set_1filter
+-JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1pattern_1set_1filter)
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1pattern_1set_1filter)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1)
+ {
+- jint rc = 0;
+ Cairo_NATIVE_ENTER(env, that, cairo_1pattern_1set_1filter_FUNC);
+- rc = (jint)cairo_pattern_set_filter((cairo_pattern_t *)arg0, arg1);
++ cairo_pattern_set_filter((cairo_pattern_t *)arg0, arg1);
+ Cairo_NATIVE_EXIT(env, that, cairo_1pattern_1set_1filter_FUNC);
+- return rc;
+ }
+ #endif
+
+ #ifndef NO_cairo_1pattern_1set_1matrix
+-JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1pattern_1set_1matrix)
+- (JNIEnv *env, jclass that, jint arg0, jint arg1)
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1pattern_1set_1matrix)
++ (JNIEnv *env, jclass that, jint arg0, jdoubleArray arg1)
+ {
+- jint rc = 0;
++ jdouble *lparg1=NULL;
+ Cairo_NATIVE_ENTER(env, that, cairo_1pattern_1set_1matrix_FUNC);
+- rc = (jint)cairo_pattern_set_matrix((cairo_pattern_t *)arg0, (cairo_matrix_t *)arg1);
++ if (arg1) if ((lparg1 = (*env)->GetDoubleArrayElements(env, arg1, NULL)) == NULL) goto fail;
++ cairo_pattern_set_matrix((cairo_pattern_t *)arg0, (cairo_matrix_t *)lparg1);
++fail:
++ if (arg1 && lparg1) (*env)->ReleaseDoubleArrayElements(env, arg1, lparg1, 0);
+ Cairo_NATIVE_EXIT(env, that, cairo_1pattern_1set_1matrix_FUNC);
+- return rc;
+ }
+ #endif
+
+@@ -905,12 +1038,14 @@
+ #endif
+
+ #ifndef NO_cairo_1reference
+-JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1reference)
++JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1reference)
+ (JNIEnv *env, jclass that, jint arg0)
+ {
++ jint rc = 0;
+ Cairo_NATIVE_ENTER(env, that, cairo_1reference_FUNC);
+- cairo_reference((cairo_t *)arg0);
++ rc = (jint)cairo_reference((cairo_t *)arg0);
+ Cairo_NATIVE_EXIT(env, that, cairo_1reference_FUNC);
++ return rc;
+ }
+ #endif
+
+@@ -944,6 +1079,16 @@
+ }
+ #endif
+
++#ifndef NO_cairo_1reset_1clip
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1reset_1clip)
++ (JNIEnv *env, jclass that, jint arg0)
++{
++ Cairo_NATIVE_ENTER(env, that, cairo_1reset_1clip_FUNC);
++ cairo_reset_clip((cairo_t *)arg0);
++ Cairo_NATIVE_EXIT(env, that, cairo_1reset_1clip_FUNC);
++}
++#endif
++
+ #ifndef NO_cairo_1restore
+ JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1restore)
+ (JNIEnv *env, jclass that, jint arg0)
+@@ -984,37 +1129,27 @@
+ }
+ #endif
+
+-#ifndef NO_cairo_1scale_1font
+-JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1scale_1font)
+- (JNIEnv *env, jclass that, jint arg0, jdouble arg1)
+-{
+- Cairo_NATIVE_ENTER(env, that, cairo_1scale_1font_FUNC);
+- cairo_scale_font((cairo_t *)arg0, arg1);
+- Cairo_NATIVE_EXIT(env, that, cairo_1scale_1font_FUNC);
+-}
+-#endif
+-
+-#ifndef NO_cairo_1select_1font
+-JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1select_1font)
++#ifndef NO_cairo_1select_1font_1face
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1select_1font_1face)
+ (JNIEnv *env, jclass that, jint arg0, jbyteArray arg1, jint arg2, jint arg3)
+ {
+ jbyte *lparg1=NULL;
+- Cairo_NATIVE_ENTER(env, that, cairo_1select_1font_FUNC);
++ Cairo_NATIVE_ENTER(env, that, cairo_1select_1font_1face_FUNC);
+ if (arg1) if ((lparg1 = (*env)->GetByteArrayElements(env, arg1, NULL)) == NULL) goto fail;
+- cairo_select_font((cairo_t *)arg0, lparg1, arg2, arg3);
++ cairo_select_font_face((cairo_t *)arg0, lparg1, arg2, arg3);
+ fail:
+ if (arg1 && lparg1) (*env)->ReleaseByteArrayElements(env, arg1, lparg1, 0);
+- Cairo_NATIVE_EXIT(env, that, cairo_1select_1font_FUNC);
++ Cairo_NATIVE_EXIT(env, that, cairo_1select_1font_1face_FUNC);
+ }
+ #endif
+
+-#ifndef NO_cairo_1set_1alpha
+-JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1set_1alpha)
+- (JNIEnv *env, jclass that, jint arg0, jdouble arg1)
++#ifndef NO_cairo_1set_1antialias
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1set_1antialias)
++ (JNIEnv *env, jclass that, jint arg0, jint arg1)
+ {
+- Cairo_NATIVE_ENTER(env, that, cairo_1set_1alpha_FUNC);
+- cairo_set_alpha((cairo_t *)arg0, arg1);
+- Cairo_NATIVE_EXIT(env, that, cairo_1set_1alpha_FUNC);
++ Cairo_NATIVE_ENTER(env, that, cairo_1set_1antialias_FUNC);
++ cairo_set_antialias((cairo_t *)arg0, arg1);
++ Cairo_NATIVE_EXIT(env, that, cairo_1set_1antialias_FUNC);
+ }
+ #endif
+
+@@ -1042,13 +1177,47 @@
+ }
+ #endif
+
+-#ifndef NO_cairo_1set_1font
+-JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1set_1font)
++#ifndef NO_cairo_1set_1font_1face
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1set_1font_1face)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1)
+ {
+- Cairo_NATIVE_ENTER(env, that, cairo_1set_1font_FUNC);
+- cairo_set_font((cairo_t *)arg0, (cairo_font_t *)arg1);
+- Cairo_NATIVE_EXIT(env, that, cairo_1set_1font_FUNC);
++ Cairo_NATIVE_ENTER(env, that, cairo_1set_1font_1face_FUNC);
++ cairo_set_font_face((cairo_t *)arg0, (cairo_font_face_t *)arg1);
++ Cairo_NATIVE_EXIT(env, that, cairo_1set_1font_1face_FUNC);
++}
++#endif
++
++#ifndef NO_cairo_1set_1font_1matrix
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1set_1font_1matrix)
++ (JNIEnv *env, jclass that, jint arg0, jdoubleArray arg1)
++{
++ jdouble *lparg1=NULL;
++ Cairo_NATIVE_ENTER(env, that, cairo_1set_1font_1matrix_FUNC);
++ if (arg1) if ((lparg1 = (*env)->GetDoubleArrayElements(env, arg1, NULL)) == NULL) goto fail;
++ cairo_set_font_matrix((cairo_t *)arg0, (cairo_matrix_t *)lparg1);
++fail:
++ if (arg1 && lparg1) (*env)->ReleaseDoubleArrayElements(env, arg1, lparg1, 0);
++ Cairo_NATIVE_EXIT(env, that, cairo_1set_1font_1matrix_FUNC);
++}
++#endif
++
++#ifndef NO_cairo_1set_1font_1options
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1set_1font_1options)
++ (JNIEnv *env, jclass that, jint arg0, jint arg1)
++{
++ Cairo_NATIVE_ENTER(env, that, cairo_1set_1font_1options_FUNC);
++ cairo_set_font_options((cairo_t *)arg0, (cairo_font_options_t *)arg1);
++ Cairo_NATIVE_EXIT(env, that, cairo_1set_1font_1options_FUNC);
++}
++#endif
++
++#ifndef NO_cairo_1set_1font_1size
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1set_1font_1size)
++ (JNIEnv *env, jclass that, jint arg0, jdouble arg1)
++{
++ Cairo_NATIVE_ENTER(env, that, cairo_1set_1font_1size_FUNC);
++ cairo_set_font_size((cairo_t *)arg0, arg1);
++ Cairo_NATIVE_EXIT(env, that, cairo_1set_1font_1size_FUNC);
+ }
+ #endif
+
+@@ -1084,10 +1253,14 @@
+
+ #ifndef NO_cairo_1set_1matrix
+ JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1set_1matrix)
+- (JNIEnv *env, jclass that, jint arg0, jint arg1)
++ (JNIEnv *env, jclass that, jint arg0, jdoubleArray arg1)
+ {
++ jdouble *lparg1=NULL;
+ Cairo_NATIVE_ENTER(env, that, cairo_1set_1matrix_FUNC);
+- cairo_set_matrix((cairo_t *)arg0, (cairo_matrix_t *)arg1);
++ if (arg1) if ((lparg1 = (*env)->GetDoubleArrayElements(env, arg1, NULL)) == NULL) goto fail;
++ cairo_set_matrix((cairo_t *)arg0, (cairo_matrix_t *)lparg1);
++fail:
++ if (arg1 && lparg1) (*env)->ReleaseDoubleArrayElements(env, arg1, lparg1, 0);
+ Cairo_NATIVE_EXIT(env, that, cairo_1set_1matrix_FUNC);
+ }
+ #endif
+@@ -1112,53 +1285,43 @@
+ }
+ #endif
+
+-#ifndef NO_cairo_1set_1pattern
+-JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1set_1pattern)
++#ifndef NO_cairo_1set_1source
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1set_1source)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1)
+ {
+- Cairo_NATIVE_ENTER(env, that, cairo_1set_1pattern_FUNC);
+- cairo_set_pattern((cairo_t *)arg0, (cairo_pattern_t *)arg1);
+- Cairo_NATIVE_EXIT(env, that, cairo_1set_1pattern_FUNC);
++ Cairo_NATIVE_ENTER(env, that, cairo_1set_1source_FUNC);
++ cairo_set_source((cairo_t *)arg0, (cairo_pattern_t *)arg1);
++ Cairo_NATIVE_EXIT(env, that, cairo_1set_1source_FUNC);
+ }
+ #endif
+
+-#ifndef NO_cairo_1set_1rgb_1color
+-JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1set_1rgb_1color)
++#ifndef NO_cairo_1set_1source_1rgb
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1set_1source_1rgb)
+ (JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2, jdouble arg3)
+ {
+- Cairo_NATIVE_ENTER(env, that, cairo_1set_1rgb_1color_FUNC);
+- cairo_set_rgb_color((cairo_t *)arg0, arg1, arg2, arg3);
+- Cairo_NATIVE_EXIT(env, that, cairo_1set_1rgb_1color_FUNC);
+-}
+-#endif
+-
+-#ifndef NO_cairo_1set_1target_1drawable
+-JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1set_1target_1drawable)
+- (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
+-{
+- Cairo_NATIVE_ENTER(env, that, cairo_1set_1target_1drawable_FUNC);
+- cairo_set_target_drawable((cairo_t *)arg0, (Display *)arg1, (Drawable)arg2);
+- Cairo_NATIVE_EXIT(env, that, cairo_1set_1target_1drawable_FUNC);
++ Cairo_NATIVE_ENTER(env, that, cairo_1set_1source_1rgb_FUNC);
++ cairo_set_source_rgb((cairo_t *)arg0, arg1, arg2, arg3);
++ Cairo_NATIVE_EXIT(env, that, cairo_1set_1source_1rgb_FUNC);
+ }
+ #endif
+
+-#ifndef NO_cairo_1set_1target_1image
+-JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1set_1target_1image)
+- (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4, jint arg5)
++#ifndef NO_cairo_1set_1source_1rgba
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1set_1source_1rgba)
++ (JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2, jdouble arg3, jdouble arg4)
+ {
+- Cairo_NATIVE_ENTER(env, that, cairo_1set_1target_1image_FUNC);
+- cairo_set_target_image((cairo_t *)arg0, (char *)arg1, arg2, arg3, arg4, arg5);
+- Cairo_NATIVE_EXIT(env, that, cairo_1set_1target_1image_FUNC);
++ Cairo_NATIVE_ENTER(env, that, cairo_1set_1source_1rgba_FUNC);
++ cairo_set_source_rgba((cairo_t *)arg0, arg1, arg2, arg3, arg4);
++ Cairo_NATIVE_EXIT(env, that, cairo_1set_1source_1rgba_FUNC);
+ }
+ #endif
+
+-#ifndef NO_cairo_1set_1target_1surface
+-JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1set_1target_1surface)
+- (JNIEnv *env, jclass that, jint arg0, jint arg1)
++#ifndef NO_cairo_1set_1source_1surface
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1set_1source_1surface)
++ (JNIEnv *env, jclass that, jint arg0, jint arg1, jdouble arg2, jdouble arg3)
+ {
+- Cairo_NATIVE_ENTER(env, that, cairo_1set_1target_1surface_FUNC);
+- cairo_set_target_surface((cairo_t *)arg0, (cairo_surface_t *)arg1);
+- Cairo_NATIVE_EXIT(env, that, cairo_1set_1target_1surface_FUNC);
++ Cairo_NATIVE_ENTER(env, that, cairo_1set_1source_1surface_FUNC);
++ cairo_set_source_surface((cairo_t *)arg0, (cairo_surface_t *)arg1, arg2, arg3);
++ Cairo_NATIVE_EXIT(env, that, cairo_1set_1source_1surface_FUNC);
+ }
+ #endif
+
+@@ -1192,16 +1355,6 @@
+ }
+ #endif
+
+-#ifndef NO_cairo_1show_1surface
+-JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1show_1surface)
+- (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
+-{
+- Cairo_NATIVE_ENTER(env, that, cairo_1show_1surface_FUNC);
+- cairo_show_surface((cairo_t *)arg0, (cairo_surface_t *)arg1, arg2, arg3);
+- Cairo_NATIVE_EXIT(env, that, cairo_1show_1surface_FUNC);
+-}
+-#endif
+-
+ #ifndef NO_cairo_1show_1text
+ JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1show_1text)
+ (JNIEnv *env, jclass that, jint arg0, jbyteArray arg1)
+@@ -1228,14 +1381,14 @@
+ }
+ #endif
+
+-#ifndef NO_cairo_1status_1string
+-JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1status_1string)
++#ifndef NO_cairo_1status_1to_1string
++JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1status_1to_1string)
+ (JNIEnv *env, jclass that, jint arg0)
+ {
+ jint rc = 0;
+- Cairo_NATIVE_ENTER(env, that, cairo_1status_1string_FUNC);
+- rc = (jint)cairo_status_string((cairo_t *)arg0);
+- Cairo_NATIVE_EXIT(env, that, cairo_1status_1string_FUNC);
++ Cairo_NATIVE_ENTER(env, that, cairo_1status_1to_1string_FUNC);
++ rc = (jint)cairo_status_to_string(arg0);
++ Cairo_NATIVE_EXIT(env, that, cairo_1status_1to_1string_FUNC);
+ return rc;
+ }
+ #endif
+@@ -1273,15 +1426,13 @@
+ }
+ #endif
+
+-#ifndef NO_cairo_1surface_1create_1for_1image
+-JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1surface_1create_1for_1image)
+- (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4)
++#ifndef NO_cairo_1stroke_1preserve
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1stroke_1preserve)
++ (JNIEnv *env, jclass that, jint arg0)
+ {
+- jint rc = 0;
+- Cairo_NATIVE_ENTER(env, that, cairo_1surface_1create_1for_1image_FUNC);
+- rc = (jint)cairo_surface_create_for_image((char *)arg0, arg1, arg2, arg3, arg4);
+- Cairo_NATIVE_EXIT(env, that, cairo_1surface_1create_1for_1image_FUNC);
+- return rc;
++ Cairo_NATIVE_ENTER(env, that, cairo_1stroke_1preserve_FUNC);
++ cairo_stroke_preserve((cairo_t *)arg0);
++ Cairo_NATIVE_EXIT(env, that, cairo_1stroke_1preserve_FUNC);
+ }
+ #endif
+
+@@ -1307,26 +1458,24 @@
+ }
+ #endif
+
+-#ifndef NO_cairo_1surface_1get_1filter
+-JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1surface_1get_1filter)
++#ifndef NO_cairo_1surface_1finish
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1surface_1finish)
+ (JNIEnv *env, jclass that, jint arg0)
+ {
+- jint rc = 0;
+- Cairo_NATIVE_ENTER(env, that, cairo_1surface_1get_1filter_FUNC);
+- rc = (jint)cairo_surface_get_filter((cairo_surface_t *)arg0);
+- Cairo_NATIVE_EXIT(env, that, cairo_1surface_1get_1filter_FUNC);
+- return rc;
++ Cairo_NATIVE_ENTER(env, that, cairo_1surface_1finish_FUNC);
++ cairo_surface_finish((cairo_surface_t *)arg0);
++ Cairo_NATIVE_EXIT(env, that, cairo_1surface_1finish_FUNC);
+ }
+ #endif
+
+-#ifndef NO_cairo_1surface_1get_1matrix
+-JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1surface_1get_1matrix)
++#ifndef NO_cairo_1surface_1get_1user_1data
++JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1surface_1get_1user_1data)
+ (JNIEnv *env, jclass that, jint arg0, jint arg1)
+ {
+ jint rc = 0;
+- Cairo_NATIVE_ENTER(env, that, cairo_1surface_1get_1matrix_FUNC);
+- rc = (jint)cairo_surface_get_matrix((cairo_surface_t *)arg0, (cairo_matrix_t *)arg1);
+- Cairo_NATIVE_EXIT(env, that, cairo_1surface_1get_1matrix_FUNC);
++ Cairo_NATIVE_ENTER(env, that, cairo_1surface_1get_1user_1data_FUNC);
++ rc = (jint)cairo_surface_get_user_data((cairo_surface_t *)arg0, (cairo_user_data_key_t *)arg1);
++ Cairo_NATIVE_EXIT(env, that, cairo_1surface_1get_1user_1data_FUNC);
+ return rc;
+ }
+ #endif
+@@ -1341,38 +1490,24 @@
+ }
+ #endif
+
+-#ifndef NO_cairo_1surface_1set_1filter
+-JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1surface_1set_1filter)
+- (JNIEnv *env, jclass that, jint arg0, jint arg1)
+-{
+- jint rc = 0;
+- Cairo_NATIVE_ENTER(env, that, cairo_1surface_1set_1filter_FUNC);
+- rc = (jint)cairo_surface_set_filter((cairo_surface_t *)arg0, arg1);
+- Cairo_NATIVE_EXIT(env, that, cairo_1surface_1set_1filter_FUNC);
+- return rc;
+-}
+-#endif
+-
+-#ifndef NO_cairo_1surface_1set_1matrix
+-JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1surface_1set_1matrix)
+- (JNIEnv *env, jclass that, jint arg0, jint arg1)
++#ifndef NO_cairo_1surface_1set_1device_1offset
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1surface_1set_1device_1offset)
++ (JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2)
+ {
+- jint rc = 0;
+- Cairo_NATIVE_ENTER(env, that, cairo_1surface_1set_1matrix_FUNC);
+- rc = (jint)cairo_surface_set_matrix((cairo_surface_t *)arg0, (cairo_matrix_t *)arg1);
+- Cairo_NATIVE_EXIT(env, that, cairo_1surface_1set_1matrix_FUNC);
+- return rc;
++ Cairo_NATIVE_ENTER(env, that, cairo_1surface_1set_1device_1offset_FUNC);
++ cairo_surface_set_device_offset((cairo_surface_t *)arg0, arg1, arg2);
++ Cairo_NATIVE_EXIT(env, that, cairo_1surface_1set_1device_1offset_FUNC);
+ }
+ #endif
+
+-#ifndef NO_cairo_1surface_1set_1repeat
+-JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1surface_1set_1repeat)
+- (JNIEnv *env, jclass that, jint arg0, jint arg1)
++#ifndef NO_cairo_1surface_1set_1user_1data
++JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1surface_1set_1user_1data)
++ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3)
+ {
+ jint rc = 0;
+- Cairo_NATIVE_ENTER(env, that, cairo_1surface_1set_1repeat_FUNC);
+- rc = (jint)cairo_surface_set_repeat((cairo_surface_t *)arg0, arg1);
+- Cairo_NATIVE_EXIT(env, that, cairo_1surface_1set_1repeat_FUNC);
++ Cairo_NATIVE_ENTER(env, that, cairo_1surface_1set_1user_1data_FUNC);
++ rc = (jint)cairo_surface_set_user_data((cairo_surface_t *)arg0, (cairo_user_data_key_t *)arg1, (void *)arg2, (cairo_destroy_func_t)arg3);
++ Cairo_NATIVE_EXIT(env, that, cairo_1surface_1set_1user_1data_FUNC);
+ return rc;
+ }
+ #endif
+@@ -1405,57 +1540,61 @@
+ }
+ #endif
+
+-#ifndef NO_cairo_1transform_1distance
+-JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1transform_1distance)
+- (JNIEnv *env, jclass that, jint arg0, jdoubleArray arg1, jdoubleArray arg2)
++#ifndef NO_cairo_1transform
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1transform)
++ (JNIEnv *env, jclass that, jint arg0, jdoubleArray arg1)
+ {
+ jdouble *lparg1=NULL;
+- jdouble *lparg2=NULL;
+- Cairo_NATIVE_ENTER(env, that, cairo_1transform_1distance_FUNC);
++ Cairo_NATIVE_ENTER(env, that, cairo_1transform_FUNC);
+ if (arg1) if ((lparg1 = (*env)->GetDoubleArrayElements(env, arg1, NULL)) == NULL) goto fail;
+- if (arg2) if ((lparg2 = (*env)->GetDoubleArrayElements(env, arg2, NULL)) == NULL) goto fail;
+- cairo_transform_distance((cairo_t *)arg0, lparg1, lparg2);
++ cairo_transform((cairo_t *)arg0, (cairo_matrix_t *)lparg1);
+ fail:
+- if (arg2 && lparg2) (*env)->ReleaseDoubleArrayElements(env, arg2, lparg2, 0);
+ if (arg1 && lparg1) (*env)->ReleaseDoubleArrayElements(env, arg1, lparg1, 0);
+- Cairo_NATIVE_EXIT(env, that, cairo_1transform_1distance_FUNC);
++ Cairo_NATIVE_EXIT(env, that, cairo_1transform_FUNC);
+ }
+ #endif
+
+-#ifndef NO_cairo_1transform_1font
+-JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1transform_1font)
+- (JNIEnv *env, jclass that, jint arg0, jint arg1)
++#ifndef NO_cairo_1translate
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1translate)
++ (JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2)
+ {
+- Cairo_NATIVE_ENTER(env, that, cairo_1transform_1font_FUNC);
+- cairo_transform_font((cairo_t *)arg0, (cairo_matrix_t *)arg1);
+- Cairo_NATIVE_EXIT(env, that, cairo_1transform_1font_FUNC);
++ Cairo_NATIVE_ENTER(env, that, cairo_1translate_FUNC);
++ cairo_translate((cairo_t *)arg0, arg1, arg2);
++ Cairo_NATIVE_EXIT(env, that, cairo_1translate_FUNC);
+ }
+ #endif
+
+-#ifndef NO_cairo_1transform_1point
+-JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1transform_1point)
++#ifndef NO_cairo_1user_1to_1device
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1user_1to_1device)
+ (JNIEnv *env, jclass that, jint arg0, jdoubleArray arg1, jdoubleArray arg2)
+ {
+ jdouble *lparg1=NULL;
+ jdouble *lparg2=NULL;
+- Cairo_NATIVE_ENTER(env, that, cairo_1transform_1point_FUNC);
++ Cairo_NATIVE_ENTER(env, that, cairo_1user_1to_1device_FUNC);
+ if (arg1) if ((lparg1 = (*env)->GetDoubleArrayElements(env, arg1, NULL)) == NULL) goto fail;
+ if (arg2) if ((lparg2 = (*env)->GetDoubleArrayElements(env, arg2, NULL)) == NULL) goto fail;
+- cairo_transform_point((cairo_t *)arg0, lparg1, lparg2);
++ cairo_user_to_device((cairo_t *)arg0, lparg1, lparg2);
+ fail:
+ if (arg2 && lparg2) (*env)->ReleaseDoubleArrayElements(env, arg2, lparg2, 0);
+ if (arg1 && lparg1) (*env)->ReleaseDoubleArrayElements(env, arg1, lparg1, 0);
+- Cairo_NATIVE_EXIT(env, that, cairo_1transform_1point_FUNC);
++ Cairo_NATIVE_EXIT(env, that, cairo_1user_1to_1device_FUNC);
+ }
+ #endif
+
+-#ifndef NO_cairo_1translate
+-JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1translate)
+- (JNIEnv *env, jclass that, jint arg0, jdouble arg1, jdouble arg2)
++#ifndef NO_cairo_1user_1to_1device_1distance
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1user_1to_1device_1distance)
++ (JNIEnv *env, jclass that, jint arg0, jdoubleArray arg1, jdoubleArray arg2)
+ {
+- Cairo_NATIVE_ENTER(env, that, cairo_1translate_FUNC);
+- cairo_translate((cairo_t *)arg0, arg1, arg2);
+- Cairo_NATIVE_EXIT(env, that, cairo_1translate_FUNC);
++ jdouble *lparg1=NULL;
++ jdouble *lparg2=NULL;
++ Cairo_NATIVE_ENTER(env, that, cairo_1user_1to_1device_1distance_FUNC);
++ if (arg1) if ((lparg1 = (*env)->GetDoubleArrayElements(env, arg1, NULL)) == NULL) goto fail;
++ if (arg2) if ((lparg2 = (*env)->GetDoubleArrayElements(env, arg2, NULL)) == NULL) goto fail;
++ cairo_user_to_device_distance((cairo_t *)arg0, lparg1, lparg2);
++fail:
++ if (arg2 && lparg2) (*env)->ReleaseDoubleArrayElements(env, arg2, lparg2, 0);
++ if (arg1 && lparg1) (*env)->ReleaseDoubleArrayElements(env, arg1, lparg1, 0);
++ Cairo_NATIVE_EXIT(env, that, cairo_1user_1to_1device_1distance_FUNC);
+ }
+ #endif
+
+@@ -1465,9 +1604,73 @@
+ {
+ jint rc = 0;
+ Cairo_NATIVE_ENTER(env, that, cairo_1xlib_1surface_1create_FUNC);
+- rc = (jint)cairo_xlib_surface_create((Display *)arg0, (Drawable)arg1, (Visual *)arg2, arg3, (Colormap)arg4);
++ rc = (jint)cairo_xlib_surface_create((Display *)arg0, (Drawable)arg1, (Visual *)arg2, arg3, arg4);
+ Cairo_NATIVE_EXIT(env, that, cairo_1xlib_1surface_1create_FUNC);
+ return rc;
++}
++#endif
++
++#ifndef NO_cairo_1xlib_1surface_1create_1for_1bitmap
++JNIEXPORT jint JNICALL Cairo_NATIVE(cairo_1xlib_1surface_1create_1for_1bitmap)
++ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2, jint arg3, jint arg4)
++{
++ jint rc = 0;
++ Cairo_NATIVE_ENTER(env, that, cairo_1xlib_1surface_1create_1for_1bitmap_FUNC);
++ rc = (jint)cairo_xlib_surface_create_for_bitmap((Display *)arg0, (Pixmap)arg1, (Screen *)arg2, arg3, arg4);
++ Cairo_NATIVE_EXIT(env, that, cairo_1xlib_1surface_1create_1for_1bitmap_FUNC);
++ return rc;
++}
++#endif
++
++#ifndef NO_cairo_1xlib_1surface_1set_1size
++JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1xlib_1surface_1set_1size)
++ (JNIEnv *env, jclass that, jint arg0, jint arg1, jint arg2)
++{
++ Cairo_NATIVE_ENTER(env, that, cairo_1xlib_1surface_1set_1size_FUNC);
++ cairo_xlib_surface_set_size((cairo_surface_t *)arg0, arg1, arg2);
++ Cairo_NATIVE_EXIT(env, that, cairo_1xlib_1surface_1set_1size_FUNC);
++}
++#endif
++
++#ifndef NO_memmove__Lorg_eclipse_swt_internal_cairo_cairo_1path_1data_1t_2II
++JNIEXPORT void JNICALL Cairo_NATIVE(memmove__Lorg_eclipse_swt_internal_cairo_cairo_1path_1data_1t_2II)
++ (JNIEnv *env, jclass that, jobject arg0, jint arg1, jint arg2)
++{
++ cairo_path_data_t _arg0, *lparg0=NULL;
++ Cairo_NATIVE_ENTER(env, that, memmove__Lorg_eclipse_swt_internal_cairo_cairo_1path_1data_1t_2II_FUNC);
++ if (arg0) if ((lparg0 = getcairo_path_data_tFields(env, arg0, &_arg0)) == NULL) goto fail;
++ memmove((void *)lparg0, (const void *)arg1, (size_t)arg2);
++fail:
++ if (arg0 && lparg0) setcairo_path_data_tFields(env, arg0, lparg0);
++ Cairo_NATIVE_EXIT(env, that, memmove__Lorg_eclipse_swt_internal_cairo_cairo_1path_1data_1t_2II_FUNC);
++}
++#endif
++
++#ifndef NO_memmove__Lorg_eclipse_swt_internal_cairo_cairo_1path_1t_2II
++JNIEXPORT void JNICALL Cairo_NATIVE(memmove__Lorg_eclipse_swt_internal_cairo_cairo_1path_1t_2II)
++ (JNIEnv *env, jclass that, jobject arg0, jint arg1, jint arg2)
++{
++ cairo_path_t _arg0, *lparg0=NULL;
++ Cairo_NATIVE_ENTER(env, that, memmove__Lorg_eclipse_swt_internal_cairo_cairo_1path_1t_2II_FUNC);
++ if (arg0) if ((lparg0 = getcairo_path_tFields(env, arg0, &_arg0)) == NULL) goto fail;
++ memmove((void *)lparg0, (const void *)arg1, (size_t)arg2);
++fail:
++ if (arg0 && lparg0) setcairo_path_tFields(env, arg0, lparg0);
++ Cairo_NATIVE_EXIT(env, that, memmove__Lorg_eclipse_swt_internal_cairo_cairo_1path_1t_2II_FUNC);
++}
++#endif
++
++#ifndef NO_memmove___3DII
++JNIEXPORT void JNICALL Cairo_NATIVE(memmove___3DII)
++ (JNIEnv *env, jclass that, jdoubleArray arg0, jint arg1, jint arg2)
++{
++ jdouble *lparg0=NULL;
++ Cairo_NATIVE_ENTER(env, that, memmove___3DII_FUNC);
++ if (arg0) if ((lparg0 = (*env)->GetDoubleArrayElements(env, arg0, NULL)) == NULL) goto fail;
++ memmove((void *)lparg0, (const void *)arg1, (size_t)arg2);
++fail:
++ if (arg0 && lparg0) (*env)->ReleaseDoubleArrayElements(env, arg0, lparg0, 0);
++ Cairo_NATIVE_EXIT(env, that, memmove___3DII_FUNC);
+ }
+ #endif
+
+diff -uN cairo.h.orig cairo.h
+--- cairo.h.orig Thu Aug 18 12:34:57 2005
++++ cairo.h Thu Aug 18 12:35:19 2005
+@@ -24,5 +24,6 @@
+
+ #include <cairo.h>
+ #include <cairo-xlib.h>
++#include <string.h>
+
+ #endif /* INC_cairo_H */
+diff -uN cairo_custom.c.orig cairo_custom.c
+--- cairo_custom.c.orig Thu Aug 18 12:34:57 2005
++++ cairo_custom.c Thu Jan 1 01:00:00 1970
+@@ -1,179 +0,0 @@
+-/* ***** BEGIN LICENSE BLOCK *****
+- * Version: MPL 1.1
+- *
+- * The contents of this file are subject to the Mozilla Public License Version
+- * 1.1 (the "License"); you may not use this file except in compliance with
+- * the License. You may obtain a copy of the License at
+- * http://www.mozilla.org/MPL/
+- *
+- * Software distributed under the License is distributed on an "AS IS" basis,
+- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+- * for the specific language governing rights and limitations under the
+- * License.
+- *
+- * Contributor(s):
+- *
+- * IBM
+- * - Binding to permit interfacing between Cairo and SWT
+- * - Copyright (C) 2005 IBM Corp. All Rights Reserved.
+- *
+- * ***** END LICENSE BLOCK ***** */
+-
+-#include "swt.h"
+-#include "cairo_structs.h"
+-#include "cairo_stats.h"
+-
+-#define Cairo_NATIVE(func) Java_org_eclipse_swt_internal_cairo_Cairo_##func
+-
+-#ifndef NO_cairo_1add_1path
+-static void moveTo(cairo_t *cairo, double x, double y) {
+- cairo_move_to(cairo, x, y);
+-}
+-
+-static void lineTo(cairo_t *cairo, double x, double y) {
+- cairo_line_to(cairo, x, y);
+-}
+-
+-static void curveTo(cairo_t *cairo, double x1, double y1, double x2, double y2, double x3, double y3) {
+- cairo_curve_to(cairo, x1, y1, x2, y2, x3, y3);
+-}
+-
+-static void closePath(cairo_t *cairo) {
+- cairo_close_path(cairo);
+-}
+-
+-JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1add_1path)
+- (JNIEnv *env, jclass that, SWT_PTR arg0, SWT_PTR arg1)
+-{
+- Cairo_NATIVE_ENTER(env, that, cairo_1add_1path_FUNC);
+- cairo_new_path((cairo_t *)arg0);
+- cairo_current_path((cairo_t *)arg1, (cairo_move_to_func_t *)moveTo, (cairo_line_to_func_t *)lineTo, (cairo_curve_to_func_t *)curveTo, (cairo_close_path_func_t *)closePath, (void *)arg0);
+- Cairo_NATIVE_EXIT(env, that, cairo_1add_1path_FUNC);
+-}
+-#endif
+-
+-#ifndef NO_cairo_1extents
+-#include <float.h>
+-#define EXTENTS(x, y, extents) \
+- if (x < extents[0]) extents[0] = x; \
+- if (y < extents[1]) extents[1] = y; \
+- if (x > extents[2]) extents[2] = x; \
+- if (y > extents[3]) extents[3] = y;
+-
+-static void extentsMoveTo(jdouble *extents, double x, double y) {
+- EXTENTS(x, y, extents)
+-}
+-
+-static void extentsLineTo(jdouble *extents, double x, double y) {
+- EXTENTS(x, y, extents)
+-}
+-
+-static void extentsCurveTo(jdouble *extents, double x1, double y1, double x2, double y2, double x3, double y3) {
+- EXTENTS(x1, y1, extents)
+- EXTENTS(x2, y2, extents)
+- EXTENTS(x3, y3, extents)
+-}
+-
+-static void extentsClosePath(jdouble *extents) {
+-}
+-
+-JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1extents)
+- (JNIEnv *env, jclass that, SWT_PTR arg0, jdoubleArray arg1)
+-{
+- jdouble *lparg1=NULL;
+- Cairo_NATIVE_ENTER(env, that, cairo_1extents_FUNC);
+- if (arg1) if ((lparg1 = (*env)->GetDoubleArrayElements(env, arg1, NULL)) == NULL) goto fail;
+- lparg1[0] = lparg1[1] = DBL_MAX;
+- lparg1[2] = lparg1[3] = DBL_MIN;
+- cairo_current_path((cairo_t *)arg0, (cairo_move_to_func_t *)extentsMoveTo, (cairo_line_to_func_t *)extentsLineTo, (cairo_curve_to_func_t *)extentsCurveTo, (cairo_close_path_func_t *)extentsClosePath, (void *)lparg1);
+- if (lparg1[0] == lparg1[1] && lparg1[0] == DBL_MAX) lparg1[0] = lparg1[1] = 0;
+- if (lparg1[2] == lparg1[3] && lparg1[2] == DBL_MAX) lparg1[2] = lparg1[3] = 0;
+-fail:
+- if (arg1 && lparg1) (*env)->ReleaseDoubleArrayElements(env, arg1, lparg1, 0);
+- Cairo_NATIVE_EXIT(env, that, cairo_1extents_FUNC);
+-}
+-#endif
+-
+-#ifndef NO_cairo_1points
+-#define PATH_MOVE_TO 1
+-#define PATH_LINE_TO 2
+-#define PATH_QUAD_TO 3
+-#define PATH_CUBIC_TO 4
+-#define PATH_CLOSE 5
+-typedef struct _points_data {
+- jint *n_types;
+- jint *n_points;
+- jbyte *types;
+- jfloat *points;
+-} points_data;
+-
+-static void pointsMoveTo(points_data *data, double x, double y) {
+- if (data->types != NULL) data->types[data->n_types[0]] = PATH_MOVE_TO;
+- if (data->points != NULL) {
+- int offset = data->n_points[0] * 2;
+- data->points[offset] = x;
+- data->points[offset + 1] = y;
+- }
+- data->n_types[0]++;
+- data->n_points[0]++;
+-}
+-
+-static void pointsLineTo(points_data *data, double x, double y) {
+- if (data->types != NULL) data->types[data->n_types[0]] = PATH_LINE_TO;
+- if (data->points != NULL) {
+- int offset = data->n_points[0] * 2;
+- data->points[offset] = x;
+- data->points[offset + 1] = y;
+- }
+- data->n_types[0]++;
+- data->n_points[0]++;
+-}
+-
+-static void pointsCurveTo(points_data *data, double x1, double y1, double x2, double y2, double x3, double y3) {
+- if (data->types != NULL) data->types[data->n_types[0]] = PATH_CUBIC_TO;
+- if (data->points != NULL) {
+- int offset = data->n_points[0] * 2;
+- data->points[offset] = x1;
+- data->points[offset + 1] = y1;
+- data->points[offset + 2] = x2;
+- data->points[offset + 3] = y2;
+- data->points[offset + 4] = x3;
+- data->points[offset + 5] = y3;
+- }
+- data->n_types[0]++;
+- data->n_points[0] += 3;
+-}
+-
+-static void pointsClosePath(points_data *data) {
+- if (data->types != NULL) data->types[data->n_types[0]] = PATH_CLOSE;
+- data->n_types[0]++;
+-}
+-
+-JNIEXPORT void JNICALL Cairo_NATIVE(cairo_1points)
+- (JNIEnv *env, jclass that, SWT_PTR arg0, jintArray arg1, jintArray arg2, jbyteArray arg3, jfloatArray arg4)
+-{
+- points_data data;
+- jint *lparg1=NULL;
+- jint *lparg2=NULL;
+- jbyte *lparg3=NULL;
+- jfloat *lparg4=NULL;
+- Cairo_NATIVE_ENTER(env, that, cairo_1points_FUNC);
+- if (arg1) if ((lparg1 = (*env)->GetIntArrayElements(env, arg1, NULL)) == NULL) goto fail;
+- if (arg2) if ((lparg2 = (*env)->GetIntArrayElements(env, arg2, NULL)) == NULL) goto fail;
+- if (arg3) if ((lparg3 = (*env)->GetByteArrayElements(env, arg3, NULL)) == NULL) goto fail;
+- if (arg4) if ((lparg4 = (*env)->GetFloatArrayElements(env, arg4, NULL)) == NULL) goto fail;
+- data.n_types = lparg1;
+- data.n_points = lparg2;
+- data.types = lparg3;
+- data.points = lparg4;
+- data.n_types[0] = data.n_points[0] = 0;
+- cairo_current_path((cairo_t *)arg0, (cairo_move_to_func_t *)pointsMoveTo, (cairo_line_to_func_t *)pointsLineTo, (cairo_curve_to_func_t *)pointsCurveTo, (cairo_close_path_func_t *)pointsClosePath, (void *)&data);
+-fail:
+- if (arg4 && lparg4) (*env)->ReleaseFloatArrayElements(env, arg4, lparg4, 0);
+- if (arg3 && lparg3) (*env)->ReleaseByteArrayElements(env, arg3, lparg3, 0);
+- if (arg2 && lparg2) (*env)->ReleaseIntArrayElements(env, arg2, lparg2, 0);
+- if (arg1 && lparg1) (*env)->ReleaseIntArrayElements(env, arg1, lparg1, 0);
+- Cairo_NATIVE_EXIT(env, that, cairo_1points_FUNC);
+-}
+-#endif
+-
+diff -uN cairo_stats.c.orig cairo_stats.c
+--- cairo_stats.c.orig Thu Aug 18 12:34:57 2005
++++ cairo_stats.c Thu Aug 18 12:35:19 2005
+@@ -24,71 +24,80 @@
+
+ #ifdef NATIVE_STATS
+
+-int Cairo_nativeFunctionCount = 125;
+-int Cairo_nativeFunctionCallCount[125];
++int Cairo_nativeFunctionCount = 138;
++int Cairo_nativeFunctionCallCount[138];
+ char * Cairo_nativeFunctionNames[] = {
+- "cairo_1add_1path",
++ "cairo_1append_1path",
+ "cairo_1arc",
+ "cairo_1arc_1negative",
+ "cairo_1clip",
++ "cairo_1clip_1preserve",
+ "cairo_1close_1path",
+- "cairo_1concat_1matrix",
+- "cairo_1copy",
+ "cairo_1copy_1page",
++ "cairo_1copy_1path",
++ "cairo_1copy_1path_1flat",
+ "cairo_1create",
+- "cairo_1current_1alpha",
+- "cairo_1current_1fill_1rule",
+- "cairo_1current_1font",
+- "cairo_1current_1font_1extents",
+- "cairo_1current_1line_1cap",
+- "cairo_1current_1line_1join",
+- "cairo_1current_1line_1width",
+- "cairo_1current_1matrix",
+- "cairo_1current_1miter_1limit",
+- "cairo_1current_1operator",
+- "cairo_1current_1path",
+- "cairo_1current_1path_1flat",
+- "cairo_1current_1pattern",
+- "cairo_1current_1point",
+- "cairo_1current_1rgb_1color",
+- "cairo_1current_1target_1surface",
+- "cairo_1current_1tolerance",
+ "cairo_1curve_1to",
+- "cairo_1default_1matrix",
+ "cairo_1destroy",
+- "cairo_1extents",
++ "cairo_1device_1to_1user",
++ "cairo_1device_1to_1user_1distance",
+ "cairo_1fill",
+ "cairo_1fill_1extents",
+- "cairo_1font_1destroy",
++ "cairo_1fill_1preserve",
++ "cairo_1font_1extents",
+ "cairo_1font_1extents_1t_1sizeof",
+- "cairo_1font_1reference",
++ "cairo_1font_1options_1create",
++ "cairo_1font_1options_1destroy",
++ "cairo_1font_1options_1get_1antialias",
++ "cairo_1font_1options_1set_1antialias",
++ "cairo_1get_1antialias",
++ "cairo_1get_1current_1point",
++ "cairo_1get_1fill_1rule",
++ "cairo_1get_1font_1face",
++ "cairo_1get_1font_1matrix",
++ "cairo_1get_1font_1options",
++ "cairo_1get_1line_1cap",
++ "cairo_1get_1line_1join",
++ "cairo_1get_1line_1width",
++ "cairo_1get_1matrix",
++ "cairo_1get_1miter_1limit",
++ "cairo_1get_1operator",
++ "cairo_1get_1source",
++ "cairo_1get_1target",
++ "cairo_1get_1tolerance",
+ "cairo_1glyph_1extents",
+ "cairo_1glyph_1path",
+ "cairo_1identity_1matrix",
+ "cairo_1image_1surface_1create",
+ "cairo_1image_1surface_1create_1for_1data",
++ "cairo_1image_1surface_1get_1height",
++ "cairo_1image_1surface_1get_1width",
+ "cairo_1in_1fill",
+ "cairo_1in_1stroke",
+- "cairo_1init_1clip",
+- "cairo_1inverse_1transform_1distance",
+- "cairo_1inverse_1transform_1point",
+ "cairo_1line_1to",
+- "cairo_1matrix_1copy",
+- "cairo_1matrix_1create",
+- "cairo_1matrix_1destroy",
+- "cairo_1matrix_1get_1affine",
++ "cairo_1mask",
++ "cairo_1mask_1surface",
++ "cairo_1matrix_1init",
++ "cairo_1matrix_1init_1identity",
++ "cairo_1matrix_1init_1rotate",
++ "cairo_1matrix_1init_1scale",
++ "cairo_1matrix_1init_1translate",
+ "cairo_1matrix_1invert",
+ "cairo_1matrix_1multiply",
+ "cairo_1matrix_1rotate",
+ "cairo_1matrix_1scale",
+- "cairo_1matrix_1set_1affine",
+- "cairo_1matrix_1set_1identity",
+ "cairo_1matrix_1transform_1distance",
+ "cairo_1matrix_1transform_1point",
+ "cairo_1matrix_1translate",
+ "cairo_1move_1to",
+ "cairo_1new_1path",
+- "cairo_1pattern_1add_1color_1stop",
++ "cairo_1paint",
++ "cairo_1paint_1with_1alpha",
++ "cairo_1path_1data_1t_1sizeof",
++ "cairo_1path_1destroy",
++ "cairo_1path_1t_1sizeof",
++ "cairo_1pattern_1add_1color_1stop_1rgb",
++ "cairo_1pattern_1add_1color_1stop_1rgba",
+ "cairo_1pattern_1create_1for_1surface",
+ "cairo_1pattern_1create_1linear",
+ "cairo_1pattern_1create_1radial",
+@@ -100,58 +109,62 @@
+ "cairo_1pattern_1set_1extend",
+ "cairo_1pattern_1set_1filter",
+ "cairo_1pattern_1set_1matrix",
+- "cairo_1points",
+ "cairo_1rectangle",
+ "cairo_1reference",
+ "cairo_1rel_1curve_1to",
+ "cairo_1rel_1line_1to",
+ "cairo_1rel_1move_1to",
++ "cairo_1reset_1clip",
+ "cairo_1restore",
+ "cairo_1rotate",
+ "cairo_1save",
+ "cairo_1scale",
+- "cairo_1scale_1font",
+- "cairo_1select_1font",
+- "cairo_1set_1alpha",
++ "cairo_1select_1font_1face",
++ "cairo_1set_1antialias",
+ "cairo_1set_1dash",
+ "cairo_1set_1fill_1rule",
+- "cairo_1set_1font",
++ "cairo_1set_1font_1face",
++ "cairo_1set_1font_1matrix",
++ "cairo_1set_1font_1options",
++ "cairo_1set_1font_1size",
+ "cairo_1set_1line_1cap",
+ "cairo_1set_1line_1join",
+ "cairo_1set_1line_1width",
+ "cairo_1set_1matrix",
+ "cairo_1set_1miter_1limit",
+ "cairo_1set_1operator",
+- "cairo_1set_1pattern",
+- "cairo_1set_1rgb_1color",
+- "cairo_1set_1target_1drawable",
+- "cairo_1set_1target_1image",
+- "cairo_1set_1target_1surface",
++ "cairo_1set_1source",
++ "cairo_1set_1source_1rgb",
++ "cairo_1set_1source_1rgba",
++ "cairo_1set_1source_1surface",
+ "cairo_1set_1tolerance",
+ "cairo_1show_1glyphs",
+ "cairo_1show_1page",
+- "cairo_1show_1surface",
+ "cairo_1show_1text",
+ "cairo_1status",
+- "cairo_1status_1string",
++ "cairo_1status_1to_1string",
+ "cairo_1stroke",
+ "cairo_1stroke_1extents",
+- "cairo_1surface_1create_1for_1image",
++ "cairo_1stroke_1preserve",
+ "cairo_1surface_1create_1similar",
+ "cairo_1surface_1destroy",
+- "cairo_1surface_1get_1filter",
+- "cairo_1surface_1get_1matrix",
++ "cairo_1surface_1finish",
++ "cairo_1surface_1get_1user_1data",
+ "cairo_1surface_1reference",
+- "cairo_1surface_1set_1filter",
+- "cairo_1surface_1set_1matrix",
+- "cairo_1surface_1set_1repeat",
++ "cairo_1surface_1set_1device_1offset",
++ "cairo_1surface_1set_1user_1data",
+ "cairo_1text_1extents",
+ "cairo_1text_1path",
+- "cairo_1transform_1distance",
+- "cairo_1transform_1font",
+- "cairo_1transform_1point",
++ "cairo_1transform",
+ "cairo_1translate",
++ "cairo_1user_1to_1device",
++ "cairo_1user_1to_1device_1distance",
+ "cairo_1xlib_1surface_1create",
++ "cairo_1xlib_1surface_1create_1for_1bitmap",
++ "cairo_1xlib_1surface_1set_1size",
++ "memmove__Lorg_eclipse_swt_internal_cairo_cairo_1path_1data_1t_2II",
++ "memmove__Lorg_eclipse_swt_internal_cairo_cairo_1path_1t_2II",
++ "memmove___3DII",
+ };
+
+ #define STATS_NATIVE(func) Java_org_eclipse_swt_tools_internal_NativeStats_##func
+diff -uN cairo_stats.h.orig cairo_stats.h
+--- cairo_stats.h.orig Thu Aug 18 12:34:57 2005
++++ cairo_stats.h Thu Aug 18 12:35:19 2005
+@@ -31,68 +31,77 @@
+ #endif
+
+ typedef enum {
+- cairo_1add_1path_FUNC,
++ cairo_1append_1path_FUNC,
+ cairo_1arc_FUNC,
+ cairo_1arc_1negative_FUNC,
+ cairo_1clip_FUNC,
++ cairo_1clip_1preserve_FUNC,
+ cairo_1close_1path_FUNC,
+- cairo_1concat_1matrix_FUNC,
+- cairo_1copy_FUNC,
+ cairo_1copy_1page_FUNC,
++ cairo_1copy_1path_FUNC,
++ cairo_1copy_1path_1flat_FUNC,
+ cairo_1create_FUNC,
+- cairo_1current_1alpha_FUNC,
+- cairo_1current_1fill_1rule_FUNC,
+- cairo_1current_1font_FUNC,
+- cairo_1current_1font_1extents_FUNC,
+- cairo_1current_1line_1cap_FUNC,
+- cairo_1current_1line_1join_FUNC,
+- cairo_1current_1line_1width_FUNC,
+- cairo_1current_1matrix_FUNC,
+- cairo_1current_1miter_1limit_FUNC,
+- cairo_1current_1operator_FUNC,
+- cairo_1current_1path_FUNC,
+- cairo_1current_1path_1flat_FUNC,
+- cairo_1current_1pattern_FUNC,
+- cairo_1current_1point_FUNC,
+- cairo_1current_1rgb_1color_FUNC,
+- cairo_1current_1target_1surface_FUNC,
+- cairo_1current_1tolerance_FUNC,
+ cairo_1curve_1to_FUNC,
+- cairo_1default_1matrix_FUNC,
+ cairo_1destroy_FUNC,
+- cairo_1extents_FUNC,
++ cairo_1device_1to_1user_FUNC,
++ cairo_1device_1to_1user_1distance_FUNC,
+ cairo_1fill_FUNC,
+ cairo_1fill_1extents_FUNC,
+- cairo_1font_1destroy_FUNC,
++ cairo_1fill_1preserve_FUNC,
++ cairo_1font_1extents_FUNC,
+ cairo_1font_1extents_1t_1sizeof_FUNC,
+- cairo_1font_1reference_FUNC,
++ cairo_1font_1options_1create_FUNC,
++ cairo_1font_1options_1destroy_FUNC,
++ cairo_1font_1options_1get_1antialias_FUNC,
++ cairo_1font_1options_1set_1antialias_FUNC,
++ cairo_1get_1antialias_FUNC,
++ cairo_1get_1current_1point_FUNC,
++ cairo_1get_1fill_1rule_FUNC,
++ cairo_1get_1font_1face_FUNC,
++ cairo_1get_1font_1matrix_FUNC,
++ cairo_1get_1font_1options_FUNC,
++ cairo_1get_1line_1cap_FUNC,
++ cairo_1get_1line_1join_FUNC,
++ cairo_1get_1line_1width_FUNC,
++ cairo_1get_1matrix_FUNC,
++ cairo_1get_1miter_1limit_FUNC,
++ cairo_1get_1operator_FUNC,
++ cairo_1get_1source_FUNC,
++ cairo_1get_1target_FUNC,
++ cairo_1get_1tolerance_FUNC,
+ cairo_1glyph_1extents_FUNC,
+ cairo_1glyph_1path_FUNC,
+ cairo_1identity_1matrix_FUNC,
+ cairo_1image_1surface_1create_FUNC,
+ cairo_1image_1surface_1create_1for_1data_FUNC,
++ cairo_1image_1surface_1get_1height_FUNC,
++ cairo_1image_1surface_1get_1width_FUNC,
+ cairo_1in_1fill_FUNC,
+ cairo_1in_1stroke_FUNC,
+- cairo_1init_1clip_FUNC,
+- cairo_1inverse_1transform_1distance_FUNC,
+- cairo_1inverse_1transform_1point_FUNC,
+ cairo_1line_1to_FUNC,
+- cairo_1matrix_1copy_FUNC,
+- cairo_1matrix_1create_FUNC,
+- cairo_1matrix_1destroy_FUNC,
+- cairo_1matrix_1get_1affine_FUNC,
++ cairo_1mask_FUNC,
++ cairo_1mask_1surface_FUNC,
++ cairo_1matrix_1init_FUNC,
++ cairo_1matrix_1init_1identity_FUNC,
++ cairo_1matrix_1init_1rotate_FUNC,
++ cairo_1matrix_1init_1scale_FUNC,
++ cairo_1matrix_1init_1translate_FUNC,
+ cairo_1matrix_1invert_FUNC,
+ cairo_1matrix_1multiply_FUNC,
+ cairo_1matrix_1rotate_FUNC,
+ cairo_1matrix_1scale_FUNC,
+- cairo_1matrix_1set_1affine_FUNC,
+- cairo_1matrix_1set_1identity_FUNC,
+ cairo_1matrix_1transform_1distance_FUNC,
+ cairo_1matrix_1transform_1point_FUNC,
+ cairo_1matrix_1translate_FUNC,
+ cairo_1move_1to_FUNC,
+ cairo_1new_1path_FUNC,
+- cairo_1pattern_1add_1color_1stop_FUNC,
++ cairo_1paint_FUNC,
++ cairo_1paint_1with_1alpha_FUNC,
++ cairo_1path_1data_1t_1sizeof_FUNC,
++ cairo_1path_1destroy_FUNC,
++ cairo_1path_1t_1sizeof_FUNC,
++ cairo_1pattern_1add_1color_1stop_1rgb_FUNC,
++ cairo_1pattern_1add_1color_1stop_1rgba_FUNC,
+ cairo_1pattern_1create_1for_1surface_FUNC,
+ cairo_1pattern_1create_1linear_FUNC,
+ cairo_1pattern_1create_1radial_FUNC,
+@@ -104,56 +113,60 @@
+ cairo_1pattern_1set_1extend_FUNC,
+ cairo_1pattern_1set_1filter_FUNC,
+ cairo_1pattern_1set_1matrix_FUNC,
+- cairo_1points_FUNC,
+ cairo_1rectangle_FUNC,
+ cairo_1reference_FUNC,
+ cairo_1rel_1curve_1to_FUNC,
+ cairo_1rel_1line_1to_FUNC,
+ cairo_1rel_1move_1to_FUNC,
++ cairo_1reset_1clip_FUNC,
+ cairo_1restore_FUNC,
+ cairo_1rotate_FUNC,
+ cairo_1save_FUNC,
+ cairo_1scale_FUNC,
+- cairo_1scale_1font_FUNC,
+- cairo_1select_1font_FUNC,
+- cairo_1set_1alpha_FUNC,
++ cairo_1select_1font_1face_FUNC,
++ cairo_1set_1antialias_FUNC,
+ cairo_1set_1dash_FUNC,
+ cairo_1set_1fill_1rule_FUNC,
+- cairo_1set_1font_FUNC,
++ cairo_1set_1font_1face_FUNC,
++ cairo_1set_1font_1matrix_FUNC,
++ cairo_1set_1font_1options_FUNC,
++ cairo_1set_1font_1size_FUNC,
+ cairo_1set_1line_1cap_FUNC,
+ cairo_1set_1line_1join_FUNC,
+ cairo_1set_1line_1width_FUNC,
+ cairo_1set_1matrix_FUNC,
+ cairo_1set_1miter_1limit_FUNC,
+ cairo_1set_1operator_FUNC,
+- cairo_1set_1pattern_FUNC,
+- cairo_1set_1rgb_1color_FUNC,
+- cairo_1set_1target_1drawable_FUNC,
+- cairo_1set_1target_1image_FUNC,
+- cairo_1set_1target_1surface_FUNC,
++ cairo_1set_1source_FUNC,
++ cairo_1set_1source_1rgb_FUNC,
++ cairo_1set_1source_1rgba_FUNC,
++ cairo_1set_1source_1surface_FUNC,
+ cairo_1set_1tolerance_FUNC,
+ cairo_1show_1glyphs_FUNC,
+ cairo_1show_1page_FUNC,
+- cairo_1show_1surface_FUNC,
+ cairo_1show_1text_FUNC,
+ cairo_1status_FUNC,
+- cairo_1status_1string_FUNC,
++ cairo_1status_1to_1string_FUNC,
+ cairo_1stroke_FUNC,
+ cairo_1stroke_1extents_FUNC,
+- cairo_1surface_1create_1for_1image_FUNC,
++ cairo_1stroke_1preserve_FUNC,
+ cairo_1surface_1create_1similar_FUNC,
+ cairo_1surface_1destroy_FUNC,
+- cairo_1surface_1get_1filter_FUNC,
+- cairo_1surface_1get_1matrix_FUNC,
++ cairo_1surface_1finish_FUNC,
++ cairo_1surface_1get_1user_1data_FUNC,
+ cairo_1surface_1reference_FUNC,
+- cairo_1surface_1set_1filter_FUNC,
+- cairo_1surface_1set_1matrix_FUNC,
+- cairo_1surface_1set_1repeat_FUNC,
++ cairo_1surface_1set_1device_1offset_FUNC,
++ cairo_1surface_1set_1user_1data_FUNC,
+ cairo_1text_1extents_FUNC,
+ cairo_1text_1path_FUNC,
+- cairo_1transform_1distance_FUNC,
+- cairo_1transform_1font_FUNC,
+- cairo_1transform_1point_FUNC,
++ cairo_1transform_FUNC,
+ cairo_1translate_FUNC,
++ cairo_1user_1to_1device_FUNC,
++ cairo_1user_1to_1device_1distance_FUNC,
+ cairo_1xlib_1surface_1create_FUNC,
++ cairo_1xlib_1surface_1create_1for_1bitmap_FUNC,
++ cairo_1xlib_1surface_1set_1size_FUNC,
++ memmove__Lorg_eclipse_swt_internal_cairo_cairo_1path_1data_1t_2II_FUNC,
++ memmove__Lorg_eclipse_swt_internal_cairo_cairo_1path_1t_2II_FUNC,
++ memmove___3DII_FUNC,
+ } Cairo_FUNCS;
+diff -uN cairo_structs.c.orig cairo_structs.c
+--- cairo_structs.c.orig Thu Aug 18 12:34:57 2005
++++ cairo_structs.c Thu Aug 18 12:35:19 2005
+@@ -65,3 +65,74 @@
+ }
+ #endif
+
++#ifndef NO_cairo_path_data_t
++typedef struct cairo_path_data_t_FID_CACHE {
++ int cached;
++ jclass clazz;
++ jfieldID type, length;
++} cairo_path_data_t_FID_CACHE;
++
++cairo_path_data_t_FID_CACHE cairo_path_data_tFc;
++
++void cachecairo_path_data_tFields(JNIEnv *env, jobject lpObject)
++{
++ if (cairo_path_data_tFc.cached) return;
++ cairo_path_data_tFc.clazz = (*env)->GetObjectClass(env, lpObject);
++ cairo_path_data_tFc.type = (*env)->GetFieldID(env, cairo_path_data_tFc.clazz, "type", "I");
++ cairo_path_data_tFc.length = (*env)->GetFieldID(env, cairo_path_data_tFc.clazz, "length", "I");
++ cairo_path_data_tFc.cached = 1;
++}
++
++cairo_path_data_t *getcairo_path_data_tFields(JNIEnv *env, jobject lpObject, cairo_path_data_t *lpStruct)
++{
++ if (!cairo_path_data_tFc.cached) cachecairo_path_data_tFields(env, lpObject);
++ lpStruct->header.type = (*env)->GetIntField(env, lpObject, cairo_path_data_tFc.type);
++ lpStruct->header.length = (*env)->GetIntField(env, lpObject, cairo_path_data_tFc.length);
++ return lpStruct;
++}
++
++void setcairo_path_data_tFields(JNIEnv *env, jobject lpObject, cairo_path_data_t *lpStruct)
++{
++ if (!cairo_path_data_tFc.cached) cachecairo_path_data_tFields(env, lpObject);
++ (*env)->SetIntField(env, lpObject, cairo_path_data_tFc.type, (jint)lpStruct->header.type);
++ (*env)->SetIntField(env, lpObject, cairo_path_data_tFc.length, (jint)lpStruct->header.length);
++}
++#endif
++
++#ifndef NO_cairo_path_t
++typedef struct cairo_path_t_FID_CACHE {
++ int cached;
++ jclass clazz;
++ jfieldID status, data, num_data;
++} cairo_path_t_FID_CACHE;
++
++cairo_path_t_FID_CACHE cairo_path_tFc;
++
++void cachecairo_path_tFields(JNIEnv *env, jobject lpObject)
++{
++ if (cairo_path_tFc.cached) return;
++ cairo_path_tFc.clazz = (*env)->GetObjectClass(env, lpObject);
++ cairo_path_tFc.status = (*env)->GetFieldID(env, cairo_path_tFc.clazz, "status", "I");
++ cairo_path_tFc.data = (*env)->GetFieldID(env, cairo_path_tFc.clazz, "data", "I");
++ cairo_path_tFc.num_data = (*env)->GetFieldID(env, cairo_path_tFc.clazz, "num_data", "I");
++ cairo_path_tFc.cached = 1;
++}
++
++cairo_path_t *getcairo_path_tFields(JNIEnv *env, jobject lpObject, cairo_path_t *lpStruct)
++{
++ if (!cairo_path_tFc.cached) cachecairo_path_tFields(env, lpObject);
++ lpStruct->status = (*env)->GetIntField(env, lpObject, cairo_path_tFc.status);
++ lpStruct->data = (cairo_path_data_t *)(*env)->GetIntField(env, lpObject, cairo_path_tFc.data);
++ lpStruct->num_data = (*env)->GetIntField(env, lpObject, cairo_path_tFc.num_data);
++ return lpStruct;
++}
++
++void setcairo_path_tFields(JNIEnv *env, jobject lpObject, cairo_path_t *lpStruct)
++{
++ if (!cairo_path_tFc.cached) cachecairo_path_tFields(env, lpObject);
++ (*env)->SetIntField(env, lpObject, cairo_path_tFc.status, (jint)lpStruct->status);
++ (*env)->SetIntField(env, lpObject, cairo_path_tFc.data, (jint)lpStruct->data);
++ (*env)->SetIntField(env, lpObject, cairo_path_tFc.num_data, (jint)lpStruct->num_data);
++}
++#endif
++
+diff -uN cairo_structs.h.orig cairo_structs.h
+--- cairo_structs.h.orig Thu Aug 18 12:34:57 2005
++++ cairo_structs.h Thu Aug 18 12:35:19 2005
+@@ -33,3 +33,27 @@
+ #define cairo_font_extents_t_sizeof() 0
+ #endif
+
++#ifndef NO_cairo_path_data_t
++void cachecairo_path_data_tFields(JNIEnv *env, jobject lpObject);
++cairo_path_data_t *getcairo_path_data_tFields(JNIEnv *env, jobject lpObject, cairo_path_data_t *lpStruct);
++void setcairo_path_data_tFields(JNIEnv *env, jobject lpObject, cairo_path_data_t *lpStruct);
++#define cairo_path_data_t_sizeof() sizeof(cairo_path_data_t)
++#else
++#define cachecairo_path_data_tFields(a,b)
++#define getcairo_path_data_tFields(a,b,c) NULL
++#define setcairo_path_data_tFields(a,b,c)
++#define cairo_path_data_t_sizeof() 0
++#endif
++
++#ifndef NO_cairo_path_t
++void cachecairo_path_tFields(JNIEnv *env, jobject lpObject);
++cairo_path_t *getcairo_path_tFields(JNIEnv *env, jobject lpObject, cairo_path_t *lpStruct);
++void setcairo_path_tFields(JNIEnv *env, jobject lpObject, cairo_path_t *lpStruct);
++#define cairo_path_t_sizeof() sizeof(cairo_path_t)
++#else
++#define cachecairo_path_tFields(a,b)
++#define getcairo_path_tFields(a,b,c) NULL
++#define setcairo_path_tFields(a,b,c)
++#define cairo_path_t_sizeof() 0
++#endif
++
diff --git a/x11-toolkits/swt31/files/patch-build.sh b/x11-toolkits/swt31/files/patch-build.sh
new file mode 100644
index 000000000000..3b92678a9766
--- /dev/null
+++ b/x11-toolkits/swt31/files/patch-build.sh
@@ -0,0 +1,42 @@
+--- build.sh.orig Fri May 13 11:37:09 2005
++++ build.sh Sat May 14 21:02:00 2005
+@@ -100,6 +100,33 @@
+ ;;
+ esac
+ ;;
++ "FreeBSD")
++ CC=gcc
++ LD=gcc
++ XTEST_LIB_PATH=$X11BASE/lib
++ GECKO_I=${X11BASE}/include/${BROWSER}
++ GECKO_INCLUDES="-I${GECKO_I} -I${LOCALBASE}/include/nspr -I${GECKO_I}/xpcom -I${GECKO_I}/string -I${GECKO_I}/embed_base -I${GECKO_I}/embedstring"
++ GECKO_L=${X11BASE}/lib/${BROWSER}
++ GECKO_LIBS="-L${GECKO_L} -L${LOCALBASE}/lib -lxpcom -lnspr4 -lplds4 -lplc4 -lgtkembedmoz"
++ case $MODEL in
++ "amd64")
++ AWT_LIB_PATH=$JAVA_HOME/jre/lib/amd64
++ SWT_PTR_CFLAGS=-DSWT_PTR_SIZE_64
++ OUTPUT_DIR=../../../org.eclipse.swt.gtk.freebsd.amd64
++ makefile="make_freebsd.mak"
++ echo "Building FreeBSD GTK AMD64 version of SWT"
++ ;;
++ "i386")
++ AWT_LIB_PATH=$JAVA_HOME/jre/lib/i386
++ OUTPUT_DIR=../../../org.eclipse.swt.gtk.freebsd.x86
++ makefile="make_freebsd.mak"
++ echo "Building FreeBSD GTK x86 version of SWT"
++ ;;
++ *)
++ echo "*** Unknown MODEL <${MODEL}>"
++ ;;
++ esac
++ ;;
+ "SunOS")
+ CC=gcc
+ LD=gcc
+@@ -128,4 +155,4 @@
+
+ export CC LD JAVA_HOME AWT_LIB_PATH XTEST_LIB_PATH GECKO_SDK GECKO_INCLUDES GECKO_LIBS SWT_PTR_CFLAGS CDE_HOME OUTPUT_DIR
+
+-make -f $makefile ${1} ${2} ${3} ${4}
++gmake -f $makefile ${1} ${2} ${3} ${4}
diff --git a/x11-toolkits/swt31/files/patch-make_freebsd.mak b/x11-toolkits/swt31/files/patch-make_freebsd.mak
new file mode 100644
index 000000000000..6b41128a4cbb
--- /dev/null
+++ b/x11-toolkits/swt31/files/patch-make_freebsd.mak
@@ -0,0 +1,60 @@
+--- make_freebsd.mak.orig Thu Dec 15 18:14:06 2005
++++ make_freebsd.mak Thu Dec 15 18:25:59 2005
+@@ -9,7 +9,7 @@
+ # IBM Corporation - initial API and implementation
+ #*******************************************************************************
+
+-# Makefile for creating SWT libraries for Linux GTK
++# Makefile for creating SWT libraries for FreeBSD GTK
+
+ include make_common.mak
+
+@@ -61,7 +61,7 @@
+ -fPIC \
+ -I./ \
+ -I$(JAVA_HOME)/include \
+- -I$(JAVA_HOME)/include/linux \
++ -I$(JAVA_HOME)/include/freebsd \
+ ${GECKO_INCLUDES} \
+ ${SWT_PTR_CFLAGS}
+
+@@ -70,7 +70,7 @@
+ SWT_OBJECTS = swt.o callback.o
+ AWT_OBJECTS = swt_awt.o
+ SWTPI_OBJECTS = swt.o os.o os_structs.o os_custom.o os_stats.o
+-CAIRO_OBJECTS = swt.o cairo.o cairo_structs.o cairo_stats.o cairo_custom.o
++CAIRO_OBJECTS = swt.o cairo.o cairo_structs.o cairo_stats.o
+ ATK_OBJECTS = swt.o atk.o atk_structs.o atk_custom.o atk_stats.o
+ GNOME_OBJECTS = swt.o gnome.o gnome_structs.o gnome_stats.o
+ MOZILLA_OBJECTS = swt.o xpcom.o xpcom_custom.o xpcom_structs.o xpcom_stats.o
+@@ -78,15 +78,16 @@
+ CFLAGS = -O -Wall \
+ -DSWT_VERSION=$(SWT_VERSION) \
+ $(NATIVE_STATS) \
+- -DLINUX -DGTK \
++ -DFREEBSD -DGTK \
+ -I$(JAVA_HOME)/include \
+- -I$(JAVA_HOME)/include/linux \
+- -fpic \
++ -I$(JAVA_HOME)/include/freebsd \
++ -fpic -fPIC \
++ -I$(X11BASE)/include \
+ ${SWT_PTR_CFLAGS}
+-LIBS = -shared -fpic -s
++LIBS = -shared -fpic -fPIC -s
+
+
+-all: make_swt make_atk make_gnome make_awt
++all: make_swt make_atk $(MAKE_GNOME) make_awt $(MAKE_MOZILLA) $(MAKE_CAIRO)
+
+ #
+ # SWT libs
+@@ -123,8 +124,6 @@
+
+ cairo.o: cairo.c cairo.h swt.h
+ $(CC) $(CFLAGS) $(CAIROCFLAGS) -c cairo.c
+-cairo_custom.o: cairo_custom.c cairo_structs.h cairo.h swt.h
+- $(CC) $(CFLAGS) $(CAIROCFLAGS) -c cairo_custom.c
+ cairo_structs.o: cairo_structs.c cairo_structs.h cairo.h swt.h
+ $(CC) $(CFLAGS) $(CAIROCFLAGS) -c cairo_structs.c
+ cairo_stats.o: cairo_stats.c cairo_structs.h cairo.h cairo_stats.h swt.h
diff --git a/x11-toolkits/swt31/pkg-descr b/x11-toolkits/swt31/pkg-descr
new file mode 100644
index 000000000000..d0260cdfa93a
--- /dev/null
+++ b/x11-toolkits/swt31/pkg-descr
@@ -0,0 +1,7 @@
+SWT is the software component that delivers native widget functionality
+for the Eclipse platform in an operating system independent manner.
+
+This port provides SWT without requiring a full download and build of
+Eclipse.
+
+WWW: http://www.eclipse.org/swt/