diff options
| author | andreast <andreast@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-09-22 20:59:16 +0000 |
|---|---|---|
| committer | andreast <andreast@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-09-22 20:59:16 +0000 |
| commit | e8368dacaec77e18717de4e0c990004c2b2122a5 (patch) | |
| tree | e1501afe85b73d4549a17f206fa2d5c8ac3803e3 /libjava/jni | |
| parent | f468be34b43786a757a41e1df6166e3dc42f803d (diff) | |
| download | ppe42-gcc-e8368dacaec77e18717de4e0c990004c2b2122a5.tar.gz ppe42-gcc-e8368dacaec77e18717de4e0c990004c2b2122a5.zip | |
2004-09-22 Andreas Tobler <a.tobler@schweiz.ch>
* configure.ac: Introduce AC_C_BIGENDIAN_CROSS for WORDS_BIGENDIAN.
* configure: Regenerate.
* include/config.h.in: Likewise.
* jni/gtk-peer/gtkpeer.h (SWAPU32): Introduce macro to swap pixels.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c: Moved SWAPU32
macro to gtkpeer.h.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_getImagePixels): Convert
pixels from 0xBBGGRRAA to 0xAARRGGBB only on Little Endian
architectures.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c (area_updated):
Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@87889 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/jni')
4 files changed, 16 insertions, 33 deletions
diff --git a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c index e4d223c543d..3bed318826a 100644 --- a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c +++ b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c @@ -1,5 +1,5 @@ /* gnu_java_awt_peer_gtk_GdkGraphics2d.c - Copyright (C) 2003 Free Software Foundation, Inc. + Copyright (C) 2003, 2004 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -748,7 +748,7 @@ JNIEXPORT jintArray JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_getImagePix gint bits_per_sample = 8; gboolean has_alpha = TRUE; gint total_channels = 4; - jint i, px; + jint i; gdk_threads_enter(); if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return NULL; } @@ -777,23 +777,13 @@ JNIEXPORT jintArray JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics2D_getImagePix native_pixels= gdk_pixbuf_get_pixels (buf); - - /* NOTE: The pixels we got in the pixbuf are stored - in reversed order. i.e 0xBBGGRRAA. - We need to convert them to 0xAARRGGBB. */ - +#ifndef WORDS_BIGENDIAN + /* convert pixels from 0xBBGGRRAA to 0xAARRGGBB */ for (i=0; i<width * height; i++) { - - /* convert pixels from 0xBBGGRRAA to 0xAARRGGBB */ - - px = native_pixels[i]; - px = ((px >> 24) & 0xff) | ((px << 8) & 0xffffff00); - px = ((px >> 8) & 0x00ff00ff) | ((px << 8) & 0xff00ff00); - px = ((px >> 16) & 0x0000ffff) | ((px << 16) & 0xffff0000); - native_pixels[i] = px; - + native_pixels[i] = SWAPU32 ((unsigned)native_pixels[i]); } +#endif java_pixels = (*env) -> NewIntArray (env, width * height); diff --git a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c index f58c289aa40..7fdda317d78 100644 --- a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c +++ b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c @@ -99,7 +99,7 @@ area_updated (GdkPixbufLoader *loader, JNIEnv *env; union env_union e; jint stride_bytes, stride_pixels, n_channels, n_pixels; - int i, px; + int i; jintArray jpixels; jint *java_pixels; guchar *gdk_pixels; @@ -129,21 +129,13 @@ area_updated (GdkPixbufLoader *loader, gdk_pixels + (y * stride_bytes), (height * stride_bytes)); +#ifndef WORDS_BIGENDIAN + /* convert pixels from 0xBBGGRRAA to 0xAARRGGBB */ for (i = 0; i < n_pixels; ++i) { - px = java_pixels[i]; - - /* move alpha around (GdkPixbufLoader results are AGBR not GBRA, in - the lsb sense) */ - /* px = ((px >> 24) & 0xff) | ((px << 8) & 0xffffff00); */ - - /* it appears to require a full byte swap, now, not just a shift to - the A channel. why did this change? don't know. */ - px = ((px >> 8) & 0x00ff00ff) | ((px << 8) & 0xff00ff00); - px = ((px >> 16) & 0x0000ffff) | ((px << 16) & 0xffff0000); - - java_pixels[i] = px; + java_pixels[i] = SWAPU32 ((unsigned)java_pixels[i]); } +#endif g_object_unref (pixbuf); diff --git a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c index 13282e2be43..362f7a93c8f 100644 --- a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c +++ b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c @@ -1,5 +1,5 @@ /* gtkimagepainter.c - Copyright (C) 1999 Free Software Foundation, Inc. + Copyright (C) 1999, 2004 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -40,8 +40,6 @@ exception statement from your version. */ #include <libart_lgpl/art_misc.h> #include <libart_lgpl/art_rgb_affine.h> -#define SWAPU32(w) \ - (((w) << 24) | (((w) & 0xff00) << 8) | (((w) >> 8) & 0xff00) | ((w) >> 24)) JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkImagePainter_drawPixels (JNIEnv *env, jobject obj __attribute__((unused)), jobject gc_obj, diff --git a/libjava/jni/gtk-peer/gtkpeer.h b/libjava/jni/gtk-peer/gtkpeer.h index 59d49cedadc..d29b27b2aa3 100644 --- a/libjava/jni/gtk-peer/gtkpeer.h +++ b/libjava/jni/gtk-peer/gtkpeer.h @@ -1,5 +1,5 @@ /* gtkpeer.h -- Some global variables and #defines - Copyright (C) 1998, 1999 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2004 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -107,6 +107,9 @@ extern struct state_table *native_pixbufdecoder_state_table; #endif /* JVM_SUN */ +#define SWAPU32(w) \ + (((w) << 24) | (((w) & 0xff00) << 8) | (((w) >> 8) & 0xff00) | ((w) >> 24)) + struct graphics { GdkDrawable *drawable; |

