diff options
author | Mark Wielaard <mark@klomp.org> | 2006-06-07 09:40:53 +0000 |
---|---|---|
committer | Mark Wielaard <mark@klomp.org> | 2006-06-07 09:40:53 +0000 |
commit | 6ed03ed1a6d88bca0b11ca2924f844d9c49b15af (patch) | |
tree | 3509a16e5323478b788aabeda0f6510d437ba3a5 | |
parent | 8f2b65e6b8370b0e381590658eb7e1ac93cb1f84 (diff) | |
download | classpath-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-- | ChangeLog | 20 | ||||
-rw-r--r-- | gnu/java/awt/peer/gtk/CairoSurface.java | 8 | ||||
-rw-r--r-- | gnu/java/awt/peer/gtk/ComponentGraphics.java | 15 | ||||
-rw-r--r-- | include/gnu_java_awt_peer_gtk_CairoGraphics2D.h | 2 | ||||
-rw-r--r-- | include/gnu_java_awt_peer_gtk_CairoSurface.h | 2 | ||||
-rw-r--r-- | include/gnu_java_awt_peer_gtk_ComponentGraphics.h | 3 | ||||
-rw-r--r-- | native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c | 4 | ||||
-rw-r--r-- | native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoSurface.c | 1 | ||||
-rw-r--r-- | native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c | 26 |
9 files changed, 78 insertions, 3 deletions
@@ -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)), |