Hello all,

Assen pointed out that this code could be optimized a bit more.

Here the result.

Would some Little Endian hackers please test if it still works ?

Thanks to Assen.

Ok for head if it works on LE too?

Andreas

2006-07-22  Andreas Tobler  <[EMAIL PROTECTED]>

        * gnu/java/awt/peer/gtk/CairoSurface.java: Optimize pixel swap code a
        bit more.

Index: gnu/java/awt/peer/gtk/CairoSurface.java
===================================================================
RCS file: /cvsroot/classpath/classpath/gnu/java/awt/peer/gtk/CairoSurface.java,v
retrieving revision 1.14
diff -u -r1.14 CairoSurface.java
--- gnu/java/awt/peer/gtk/CairoSurface.java 21 Jul 2006 22:51:38 -0000 1.14
+++ gnu/java/awt/peer/gtk/CairoSurface.java     22 Jul 2006 12:58:48 -0000
@@ -180,19 +180,13 @@
        for (int i = 0; i < data.length; i++ )
          {
            // On a big endian system we get a RRGGBBAA data array.
-           int alpha = (data[i] & 0xFF);
+           int alpha = data[i] & 0xFF;
if( alpha == 0 ) // I do not know why we need this, but it works.
              data[i] = 0;
            else
              {
-               int r = (((data[i] & 0xFF000000) >> 24));
-               int g = (((data[i] & 0x00FF0000) >> 16));
-               int b = (((data[i] & 0x0000FF00) >> 8));
                // Cairo needs a ARGB32 native array.
-               data[i] = (( alpha << 24 ) & 0xFF000000)
-                 | (( r << 16 ) & 0x00FF0000)
-                 | (( g << 8 )  & 0x0000FF00)
-                 | ( b  & 0x000000FF);
+               data[i] = (data[i] >>> 8) | (alpha << 24);
              }
          }
       }
@@ -201,19 +195,16 @@
        for (int i = 0; i < data.length; i++ )
          {
            // On a little endian system we get a AABBGGRR data array.
-           int alpha = (data[i] & 0xFF000000) >> 24;
+           int alpha = data[i] & 0xFF000000;
if( alpha == 0 ) // I do not know why we need this, but it works.
              data[i] = 0;
            else
              {
-               int b = (((data[i] & 0x00FF0000) >> 16));
-               int g = (((data[i] & 0x0000FF00) >> 8));
-               int r = ((data[i] & 0x000000FF));
+               int b = (data[i] & 0xFF0000) >> 16;
+               int g = (data[i] & 0xFF00);
+               int r = (data[i] & 0xFF) << 16;
                // Cairo needs a ARGB32 native array.
-               data[i] = (( alpha << 24 ) & 0xFF000000)
-                 | (( r << 16 ) & 0x00FF0000)
-                 | (( g << 8 )  & 0x0000FF00)
-                 | ( b  & 0x000000FF);
+               data[i] = alpha | r | g | b;
              }
          }
       }

Reply via email to