summaryrefslogtreecommitdiff
path: root/native
diff options
context:
space:
mode:
authorMark Wielaard <mark@klomp.org>2006-06-11 22:02:13 +0000
committerMark Wielaard <mark@klomp.org>2006-06-11 22:02:13 +0000
commit1a1b4f27d1bb540151c7db91f50759cf00b61512 (patch)
treebefdae971496853a5255ea21a31afb19d4def6b1 /native
parentc459361c2aac54c0245b341c31c1f05ff874f1a2 (diff)
downloadclasspath-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.c25
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);