summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Wielaard <mark@klomp.org>2006-06-07 09:40:53 +0000
committerMark Wielaard <mark@klomp.org>2006-06-07 09:40:53 +0000
commit6ed03ed1a6d88bca0b11ca2924f844d9c49b15af (patch)
tree3509a16e5323478b788aabeda0f6510d437ba3a5
parent8f2b65e6b8370b0e381590658eb7e1ac93cb1f84 (diff)
downloadclasspath-6ed03ed1a6d88bca0b11ca2924f844d9c49b15af.tar.gz
PR 27917
* gnu/java/awt/peer/gtk/CairoSurface.java (finalize): Call dispose. * gnu/java/awt/peer/gtk/ComponentGraphics.java: Override dispose to call disposeSurface. (disposeSurface): New native method. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c (Java_gnu_java_awt_peer_gtk_CairoGraphics2D_disposeNative): Free pattern_pixels. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoSurface.c (Java_gnu_java_awt_peer_gtk_CairoSurface_drawSurface): Call cairo_pattern_destroy. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c (Java_gnu_java_awt_peer_gtk_ComponentGraphics_disposeSurface): New function to destroy the surface. * include/gnu_java_awt_peer_gtk_CairoGraphics2D.h: Regenerated. * include/gnu_java_awt_peer_gtk_CairoSurface.h: Likewise. * include/gnu_java_awt_peer_gtk_ComponentGraphics.h: Likewise.
-rw-r--r--ChangeLog20
-rw-r--r--gnu/java/awt/peer/gtk/CairoSurface.java8
-rw-r--r--gnu/java/awt/peer/gtk/ComponentGraphics.java15
-rw-r--r--include/gnu_java_awt_peer_gtk_CairoGraphics2D.h2
-rw-r--r--include/gnu_java_awt_peer_gtk_CairoSurface.h2
-rw-r--r--include/gnu_java_awt_peer_gtk_ComponentGraphics.h3
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c4
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoSurface.c1
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c26
9 files changed, 78 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index c820ff2b2..6765a7092 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -8,6 +8,26 @@
2006-06-06 Mark Wielaard <mark@klomp.org>
+ PR 27917
+ * gnu/java/awt/peer/gtk/CairoSurface.java (finalize): Call dispose.
+ * gnu/java/awt/peer/gtk/ComponentGraphics.java: Override dispose to
+ call disposeSurface.
+ (disposeSurface): New native method.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c
+ (Java_gnu_java_awt_peer_gtk_CairoGraphics2D_disposeNative): Free
+ pattern_pixels.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoSurface.c
+ (Java_gnu_java_awt_peer_gtk_CairoSurface_drawSurface): Call
+ cairo_pattern_destroy.
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c
+ (Java_gnu_java_awt_peer_gtk_ComponentGraphics_disposeSurface):
+ New function to destroy the surface.
+ * include/gnu_java_awt_peer_gtk_CairoGraphics2D.h: Regenerated.
+ * include/gnu_java_awt_peer_gtk_CairoSurface.h: Likewise.
+ * include/gnu_java_awt_peer_gtk_ComponentGraphics.h: Likewise.
+
+2006-06-06 Mark Wielaard <mark@klomp.org>
+
* include/jni.h (JDK1_1InitArgs): Mark pointer-to-function types
with JNICALL.
diff --git a/gnu/java/awt/peer/gtk/CairoSurface.java b/gnu/java/awt/peer/gtk/CairoSurface.java
index c3b07d874..e19c9b992 100644
--- a/gnu/java/awt/peer/gtk/CairoSurface.java
+++ b/gnu/java/awt/peer/gtk/CairoSurface.java
@@ -199,6 +199,14 @@ public class CairoSurface extends DataBuffer
}
/**
+ * Call dispose() to clean up any native resources allocated.
+ */
+ protected void finalize()
+ {
+ dispose();
+ }
+
+ /**
* Return a GtkImage from this Cairo surface.
*/
public GtkImage getGtkImage()
diff --git a/gnu/java/awt/peer/gtk/ComponentGraphics.java b/gnu/java/awt/peer/gtk/ComponentGraphics.java
index da629172c..c6cf4948c 100644
--- a/gnu/java/awt/peer/gtk/ComponentGraphics.java
+++ b/gnu/java/awt/peer/gtk/ComponentGraphics.java
@@ -99,6 +99,21 @@ public class ComponentGraphics extends CairoGraphics2D
private native long initState(GtkComponentPeer component);
/**
+ * Destroys the component surface and calls dispose on the cairo
+ * graphics2d to destroy any super class resources.
+ */
+ public void dispose()
+ {
+ disposeSurface(nativePointer);
+ super.dispose();
+ }
+
+ /**
+ * Destroys the component surface.
+ */
+ private native void disposeSurface(long nativePointer);
+
+ /**
* Creates a cairo_t for a volatile image
*/
protected native long initFromVolatile( long pixmapPtr, int width, int height);
diff --git a/include/gnu_java_awt_peer_gtk_CairoGraphics2D.h b/include/gnu_java_awt_peer_gtk_CairoGraphics2D.h
index 0895f86c1..0ac6e4ad0 100644
--- a/include/gnu_java_awt_peer_gtk_CairoGraphics2D.h
+++ b/include/gnu_java_awt_peer_gtk_CairoGraphics2D.h
@@ -34,8 +34,8 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoCurveTo (
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoStroke (JNIEnv *env, jobject);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoFill (JNIEnv *env, jobject);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoClip (JNIEnv *env, jobject);
-JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoResetClip (JNIEnv *env, jobject);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoPreserveClip (JNIEnv *env, jobject);
+JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoResetClip (JNIEnv *env, jobject);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSurfaceSetFilter (JNIEnv *env, jobject, jint);
#ifdef __cplusplus
diff --git a/include/gnu_java_awt_peer_gtk_CairoSurface.h b/include/gnu_java_awt_peer_gtk_CairoSurface.h
index e8c13d705..3bc263ffd 100644
--- a/include/gnu_java_awt_peer_gtk_CairoSurface.h
+++ b/include/gnu_java_awt_peer_gtk_CairoSurface.h
@@ -17,8 +17,8 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoSurface_nativeSetElem (JN
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoSurface_drawSurface (JNIEnv *env, jobject, jobject, jdoubleArray);
JNIEXPORT jintArray JNICALL Java_gnu_java_awt_peer_gtk_CairoSurface_getPixels (JNIEnv *env, jobject, jint);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoSurface_setPixels (JNIEnv *env, jobject, jintArray);
-JNIEXPORT jlong JNICALL Java_gnu_java_awt_peer_gtk_CairoSurface_newCairoContext (JNIEnv *env, jobject);
JNIEXPORT jlong JNICALL Java_gnu_java_awt_peer_gtk_CairoSurface_getFlippedBuffer (JNIEnv *env, jobject, jint);
+JNIEXPORT jlong JNICALL Java_gnu_java_awt_peer_gtk_CairoSurface_newCairoContext (JNIEnv *env, jobject);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoSurface_copyAreaNative (JNIEnv *env, jobject, jint, jint, jint, jint, jint, jint, jint);
#ifdef __cplusplus
diff --git a/include/gnu_java_awt_peer_gtk_ComponentGraphics.h b/include/gnu_java_awt_peer_gtk_ComponentGraphics.h
index f634a1362..e8ca71178 100644
--- a/include/gnu_java_awt_peer_gtk_ComponentGraphics.h
+++ b/include/gnu_java_awt_peer_gtk_ComponentGraphics.h
@@ -11,7 +11,8 @@ extern "C"
#endif
JNIEXPORT jlong JNICALL Java_gnu_java_awt_peer_gtk_ComponentGraphics_initState (JNIEnv *env, jobject, jobject);
-JNIEXPORT jlong JNICALL Java_gnu_java_awt_peer_gtk_ComponentGraphics_initFromVolatile(JNIEnv *env, jobject, jlong, jint, jint);
+JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_ComponentGraphics_disposeSurface (JNIEnv *env, jobject, jlong);
+JNIEXPORT jlong JNICALL Java_gnu_java_awt_peer_gtk_ComponentGraphics_initFromVolatile (JNIEnv *env, jobject, jlong, jint, jint);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_ComponentGraphics_start_1gdk_1drawing (JNIEnv *env, jobject);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_ComponentGraphics_end_1gdk_1drawing (JNIEnv *env, jobject);
JNIEXPORT jboolean JNICALL Java_gnu_java_awt_peer_gtk_ComponentGraphics_hasXRender (JNIEnv *env, jclass);
diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c
index 1cc8b8caa..f4f7c28d3 100644
--- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c
+++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c
@@ -124,6 +124,10 @@ Java_gnu_java_awt_peer_gtk_CairoGraphics2D_disposeNative
cairo_surface_destroy (gr->pattern_surface);
gr->pattern_surface = NULL;
+ if (gr->pattern_pixels)
+ g_free(gr->pattern_pixels);
+ gr->pattern_pixels = NULL;
+
g_free( gr );
}
diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoSurface.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoSurface.c
index 1a618cef5..3518aead5 100644
--- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoSurface.c
+++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoSurface.c
@@ -203,6 +203,7 @@ Java_gnu_java_awt_peer_gtk_CairoSurface_drawSurface
cairo_set_source(cr, p);
cairo_paint(cr);
+ cairo_pattern_destroy(p);
}
(*env)->ReleaseDoubleArrayElements (env, java_matrix, native_matrix, 0);
diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c
index 9e9cc40ac..7e3c83808 100644
--- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c
+++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c
@@ -54,6 +54,8 @@ exception statement from your version. */
#include "gnu_java_awt_peer_gtk_ComponentGraphics.h"
+#include "cairographics2d.h"
+
static short flush_scheduled = 0;
static gboolean flush (gpointer data __attribute__((unused)))
@@ -163,6 +165,30 @@ Java_gnu_java_awt_peer_gtk_ComponentGraphics_initState
return PTR_TO_JLONG(cr);
}
+/**
+ * Disposes of the surface
+ */
+JNIEXPORT void JNICALL
+Java_gnu_java_awt_peer_gtk_ComponentGraphics_disposeSurface
+ (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)),
+ jlong value)
+{
+ struct cairographics2d *gr;
+ cairo_surface_t *surface;
+
+ gr = JLONG_TO_PTR(struct cairographics2d, value);
+
+ if (gr == NULL)
+ return;
+
+ if (gr->cr == NULL)
+ return;
+
+ surface = cairo_get_target (gr->cr);
+ if (surface != NULL)
+ cairo_surface_destroy (surface);
+}
+
JNIEXPORT jlong JNICALL
Java_gnu_java_awt_peer_gtk_ComponentGraphics_initFromVolatile
(JNIEnv *env __attribute__ ((unused)), jobject obj __attribute__ ((unused)),