summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Koch <konqueror@gmx.de>2005-01-10 07:26:18 +0000
committerMichael Koch <konqueror@gmx.de>2005-01-10 07:26:18 +0000
commitf1befa164d64abb2094226c31ba908fd25fbb9ba (patch)
treedd4ad76b33909837accb8b47f54e26ea3208caef
parent6dc34024a7bc326abd045486b89f8284fe2f65de (diff)
downloadclasspath-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--ChangeLog5
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c44
2 files changed, 49 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 56ce52b08..37f7a932a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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);
+}