97 |
return JNI_TRUE; |
return JNI_TRUE; |
98 |
} |
} |
99 |
|
|
100 |
|
/* |
101 |
|
* Creates the image from an array of java bytes. |
102 |
|
*/ |
103 |
|
JNIEXPORT jboolean JNICALL |
104 |
|
Java_gnu_java_awt_peer_gtk_GtkImage_loadImageFromData |
105 |
|
(JNIEnv *env, jobject obj, jbyteArray data) |
106 |
|
{ |
107 |
|
jbyte *src; |
108 |
|
GdkPixbuf* pixbuf; |
109 |
|
GdkPixbufLoader* loader; |
110 |
|
int len; |
111 |
|
int width; |
112 |
|
int height; |
113 |
|
|
114 |
|
gdk_threads_enter (); |
115 |
|
|
116 |
|
src = (*env)->GetByteArrayElements (env, data, NULL); |
117 |
|
len = (*env)->GetArrayLength (env, data); |
118 |
|
|
119 |
|
loader = gdk_pixbuf_loader_new (); |
120 |
|
|
121 |
|
gdk_pixbuf_loader_write (loader, (guchar *)src, len, NULL); |
122 |
|
gdk_pixbuf_loader_close (loader, NULL); |
123 |
|
|
124 |
|
(*env)->ReleaseByteArrayElements (env, data, src, 0); |
125 |
|
|
126 |
|
pixbuf = gdk_pixbuf_loader_get_pixbuf (loader); |
127 |
|
|
128 |
|
if (pixbuf == NULL) |
129 |
|
{ |
130 |
|
createRawData (env, obj, NULL); |
131 |
|
|
132 |
|
gdk_threads_leave (); |
133 |
|
|
134 |
|
return JNI_FALSE; |
135 |
|
} |
136 |
|
|
137 |
|
width = gdk_pixbuf_get_width (pixbuf); |
138 |
|
height = gdk_pixbuf_get_height (pixbuf); |
139 |
|
|
140 |
|
createRawData (env, obj, pixbuf); |
141 |
|
setWidthHeight(env, obj, width, height); |
142 |
|
|
143 |
|
gdk_threads_leave (); |
144 |
|
|
145 |
|
return JNI_TRUE; |
146 |
|
} |
147 |
|
|
148 |
|
JNIEXPORT void JNICALL |
149 |
|
Java_gnu_java_awt_peer_gtk_GtkImage_createFromPixbuf |
150 |
|
(JNIEnv *env, jobject obj) |
151 |
|
{ |
152 |
|
int width, heigth; |
153 |
|
GdkPixbuf *pixbuf = (GdkPixbuf *) getData (env, obj); |
154 |
|
gdk_threads_enter (); |
155 |
|
width = gdk_pixbuf_get_width (pixbuf); |
156 |
|
heigth = gdk_pixbuf_get_height (pixbuf); |
157 |
|
gdk_threads_leave (); |
158 |
|
setWidthHeight(env, obj, width, heigth); |
159 |
|
} |
160 |
|
|
161 |
/** |
/** |
162 |
* Returns a copy of the pixel data as a java array. |
* Returns a copy of the pixel data as a java array. |
163 |
*/ |
*/ |
178 |
height = gdk_pixbuf_get_height (pixbuf); |
height = gdk_pixbuf_get_height (pixbuf); |
179 |
rowstride = gdk_pixbuf_get_rowstride (pixbuf); |
rowstride = gdk_pixbuf_get_rowstride (pixbuf); |
180 |
|
|
|
/* Must release the GDK lock before allocating memory through the |
|
|
JVM, since some JVMs use the same lock for allocations and |
|
|
finalization. Deadlock can occur on those JVMs. */ |
|
|
gdk_threads_leave (); |
|
|
|
|
181 |
result_array = (*env)->NewIntArray (env, (width * height)); |
result_array = (*env)->NewIntArray (env, (width * height)); |
182 |
|
|
|
gdk_threads_enter (); |
|
|
|
|
183 |
dst = result_array_iter = |
dst = result_array_iter = |
184 |
(*env)->GetIntArrayElements (env, result_array, NULL); |
(*env)->GetIntArrayElements (env, result_array, NULL); |
185 |
|
|
362 |
|
|
363 |
gdk_threads_enter (); |
gdk_threads_enter (); |
364 |
|
|
365 |
|
if (width <= 0 || height <= 0) |
366 |
|
{ |
367 |
|
gdk_threads_leave (); |
368 |
|
return; |
369 |
|
} |
370 |
|
|
371 |
bgColor = ((bg_red & 0xFF) << 16) | |
bgColor = ((bg_red & 0xFF) << 16) | |
372 |
((bg_green & 0xFF) << 8) | (bg_blue & 0xFF); |
((bg_green & 0xFF) << 8) | (bg_blue & 0xFF); |
373 |
|
|
429 |
Java_gnu_java_awt_peer_gtk_GtkImage_drawPixelsScaledFlipped |
Java_gnu_java_awt_peer_gtk_GtkImage_drawPixelsScaledFlipped |
430 |
(JNIEnv *env, jobject obj, jobject gc_obj, |
(JNIEnv *env, jobject obj, jobject gc_obj, |
431 |
jint bg_red, jint bg_green, jint bg_blue, |
jint bg_red, jint bg_green, jint bg_blue, |
432 |
|
#if GTK_MINOR_VERSION > 4 |
433 |
jboolean flipx, jboolean flipy, |
jboolean flipx, jboolean flipy, |
434 |
|
#else |
435 |
|
jboolean flipx __attribute__((unused)), |
436 |
|
jboolean flipy __attribute__((unused)), |
437 |
|
#endif |
438 |
jint srcx, jint srcy, jint srcwidth, jint srcheight, |
jint srcx, jint srcy, jint srcwidth, jint srcheight, |
439 |
jint dstx, jint dsty, jint dstwidth, jint dstheight, |
jint dstx, jint dsty, jint dstwidth, jint dstheight, |
440 |
jboolean composite) |
jboolean composite) |
446 |
|
|
447 |
gdk_threads_enter (); |
gdk_threads_enter (); |
448 |
|
|
449 |
|
if (srcwidth <= 0 || srcheight <= 0 |
450 |
|
|| dstwidth <= 0 || dstheight <= 0) |
451 |
|
{ |
452 |
|
gdk_threads_leave (); |
453 |
|
return; |
454 |
|
} |
455 |
|
|
456 |
bgColor = ((bg_red & 0xFF) << 16) | |
bgColor = ((bg_red & 0xFF) << 16) | |
457 |
((bg_green & 0xFF) << 8) | (bg_blue & 0xFF); |
((bg_green & 0xFF) << 8) | (bg_blue & 0xFF); |
458 |
|
|