diff options
author | Michael Koch <konqueror@gmx.de> | 2005-01-10 07:26:18 +0000 |
---|---|---|
committer | Michael Koch <konqueror@gmx.de> | 2005-01-10 07:26:18 +0000 |
commit | f1befa164d64abb2094226c31ba908fd25fbb9ba (patch) | |
tree | dd4ad76b33909837accb8b47f54e26ea3208caef | |
parent | 6dc34024a7bc326abd045486b89f8284fe2f65de (diff) | |
download | classpath-f1befa164d64abb2094226c31ba908fd25fbb9ba.tar.gz |
2005-01-10 Thomas Fitzsimmons <fitzsim@redhat.com>
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c
(nativeSetIconImageFromData): Re-add native implementation.
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c | 44 |
2 files changed, 49 insertions, 0 deletions
@@ -1,3 +1,8 @@ +2005-01-10 Thomas Fitzsimmons <fitzsim@redhat.com> + + * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c + (nativeSetIconImageFromData): Re-add native implementation. + 2005-01-09 Mark Wielaard <mark@klomp.org> * java/security/AlgorithmParameterGenerator.java (getInstance): diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c index 5c48832f9..52da40cae 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c @@ -177,3 +177,47 @@ Java_gnu_java_awt_peer_gtk_GtkFramePeer_nativeSetIconImageFromDecoder gdk_threads_leave (); } + +static void +free_pixbuf_data (guchar *pixels, gpointer data __attribute__((unused))) +{ + free(pixels); +} + +JNIEXPORT void JNICALL +Java_gnu_java_awt_peer_gtk_GtkFramePeer_nativeSetIconImageFromData + (JNIEnv *env, jobject obj, jintArray pixelArray, jint width, jint height) +{ + void *ptr; + GdkPixbuf *pixbuf; + jint *pixels; + int pixels_length, i; + guchar *data; + + ptr = NSA_GET_PTR (env, obj); + + pixels = (*env)->GetIntArrayElements (env, pixelArray, 0); + pixels_length = (*env)->GetArrayLength (env, pixelArray); + + data = malloc (sizeof (guchar) * pixels_length); + for (i = 0; i < pixels_length; i++) + data[i] = (guchar) pixels[i]; + + gdk_threads_enter (); + + pixbuf = gdk_pixbuf_new_from_data (data, + GDK_COLORSPACE_RGB, + TRUE, + 8, + width, + height, + width*4, + free_pixbuf_data, + NULL); + + gtk_window_set_icon (GTK_WINDOW (ptr), pixbuf); + + gdk_threads_leave (); + + (*env)->ReleaseIntArrayElements(env, pixelArray, pixels, 0); +} |