diff options
author | Mark Wielaard <mark@klomp.org> | 2006-06-11 22:02:13 +0000 |
---|---|---|
committer | Mark Wielaard <mark@klomp.org> | 2006-06-11 22:02:13 +0000 |
commit | 1a1b4f27d1bb540151c7db91f50759cf00b61512 (patch) | |
tree | befdae971496853a5255ea21a31afb19d4def6b1 /native | |
parent | c459361c2aac54c0245b341c31c1f05ff874f1a2 (diff) | |
download | classpath-1a1b4f27d1bb540151c7db91f50759cf00b61512.tar.gz |
* gnu/java/awt/peer/gtk/GdkPixbufDecoder.java (streamImage):
Takes GdkPixbufWriter.
(GdkPixbufWriter): Implements Runnable.
(write(IIOMetadata,IIOImage,ImageWriteParam)): Start Thread for
data processing.
(DATADONE): New static final field.
(data): New field.
(write(byte[])): New method.
(run): Likewise.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c
(Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_initStaticState):
Get dataOutputWriteID from writeClass.
(stream_save_request): Change stream field to writer.
(save_to_stream): Remove FIXME, call writer.
(Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_streamImage):
Store writer.
Diffstat (limited to 'native')
-rw-r--r-- | native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c | 25 |
1 files changed, 9 insertions, 16 deletions
diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c index eba00fb68..c8d9fb551 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c @@ -278,7 +278,7 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_initStaticState (JNIEnv *env, jclass clazz) { - jclass dataOutputClass; + jclass writerClass; (*env)->GetJavaVM(env, &vm); @@ -296,9 +296,9 @@ Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_initStaticState "(Ljava/lang/String;Z)" "Lgnu/java/awt/peer/gtk/GdkPixbufDecoder$ImageFormatSpec;"); - - dataOutputClass = (*env)->FindClass(env, "java/io/DataOutput"); - dataOutputWriteID = (*env)->GetMethodID (env, dataOutputClass, + writerClass = (*env)->FindClass + (env, "gnu/java/awt/peer/gtk/GdkPixbufDecoder$GdkPixbufWriter"); + dataOutputWriteID = (*env)->GetMethodID (env, writerClass, "write", "([B)V"); query_formats (env, clazz); @@ -344,7 +344,7 @@ Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_pumpDone struct stream_save_request { JNIEnv *env; - jobject *stream; + jobject *writer; }; static gboolean @@ -358,30 +358,23 @@ save_to_stream(const gchar *buf, jbyteArray jbuf; jbyte *cbuf; - /* FIXME. Don't call user code directly on this thread. - Store bytes and signal a "pump" thread to deliver to user code. - Then we don't have to drop/acquire any locks. */ - gdk_threads_leave (); - jbuf = (*(ssr->env))->NewByteArray ((ssr->env), count); cbuf = (*(ssr->env))->GetByteArrayElements ((ssr->env), jbuf, NULL); memcpy (cbuf, buf, count); (*(ssr->env))->ReleaseByteArrayElements ((ssr->env), jbuf, cbuf, 0); - (*(ssr->env))->CallVoidMethod ((ssr->env), *(ssr->stream), + (*(ssr->env))->CallVoidMethod ((ssr->env), *(ssr->writer), dataOutputWriteID, jbuf); (*(ssr->env))->DeleteLocalRef((ssr->env), jbuf); - gdk_threads_enter (); - return TRUE; } JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_streamImage -(JNIEnv *env, jclass clazz __attribute__((unused)), +(JNIEnv *env, jclass clazz __attribute__((unused)), jintArray jarr, jstring jenctype, jint width, jint height, - jboolean hasAlpha, jobject stream) + jboolean hasAlpha, jobject writer) { GdkPixbuf* pixbuf; jint *ints; @@ -391,7 +384,7 @@ Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_streamImage int i; struct stream_save_request ssr; - ssr.stream = &stream; + ssr.writer = &writer; ssr.env = env; ints = (*env)->GetIntArrayElements (env, jarr, NULL); |