summaryrefslogtreecommitdiffstats
path: root/libjava/jni
diff options
context:
space:
mode:
authorandreast <andreast@138bc75d-0d04-0410-961f-82ee72b054a4>2004-09-22 20:59:16 +0000
committerandreast <andreast@138bc75d-0d04-0410-961f-82ee72b054a4>2004-09-22 20:59:16 +0000
commite8368dacaec77e18717de4e0c990004c2b2122a5 (patch)
treee1501afe85b73d4549a17f206fa2d5c8ac3803e3 /libjava/jni
parentf468be34b43786a757a41e1df6166e3dc42f803d (diff)
downloadppe42-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')
-rw-r--r--libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c22
-rw-r--r--libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c18
-rw-r--r--libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c4
-rw-r--r--libjava/jni/gtk-peer/gtkpeer.h5
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;
OpenPOWER on IntegriCloud