This fixes one of the regressions - transparent Images.

2006-05-30  Sven de Marothy  <[EMAIL PROTECTED]>

        * gnu/java/awt/peer/gtk/CairoSurface.java:
        (CairoSurface): Convert pixels properly.
        * gnu/java/awt/peer/gtk/ComponentGraphics.java
        Remove commented-out lines.


Index: gnu/java/awt/peer/gtk/CairoSurface.java
===================================================================
RCS file: /sources/classpath/classpath/gnu/java/awt/peer/gtk/CairoSurface.java,v
retrieving revision 1.3
diff -U3 -r1.3 CairoSurface.java
--- gnu/java/awt/peer/gtk/CairoSurface.java	30 May 2006 21:42:56 -0000	1.3
+++ gnu/java/awt/peer/gtk/CairoSurface.java	30 May 2006 23:59:45 -0000
@@ -166,12 +166,22 @@
     // Copy the pixel data from the GtkImage.
     int[] data = image.getPixels();
 
-    // Swap ordering, since Gtk is weird.
+    // Swap ordering from GdkPixbuf to Cairo
     for(int i = 0; i < data.length; i++ )
       {
-	int temp = (data[i] & 0x000000FF) << 16;
-	data[i] = (data[i] & 0xFFFFFF00) | ((data[i] & 0x00FF0000) >> 16);
-	data[i] = (data[i] & 0xFF00FFFF) | temp;
+	int alpha = (data[i] & 0xFF000000) >> 24;
+	if( alpha == 0 ) // I do not know why we need this, but it works.
+	  data[i] = 0;
+	else
+	  {
+	    int r = (((data[i] & 0x00FF0000) >> 16) );
+	    int g = (((data[i] & 0x0000FF00) >> 8) );
+	    int b = ((data[i] & 0x000000FF) );
+	    data[i] = (( alpha << 24 ) & 0xFF000000) 
+	      | (( b << 16 ) & 0x00FF0000)
+	      | (( g << 8 )  & 0x0000FF00)
+	      | ( r  & 0x000000FF);
+	  }
       }
 
     setPixels( data );
Index: gnu/java/awt/peer/gtk/ComponentGraphics.java
===================================================================
RCS file: /sources/classpath/classpath/gnu/java/awt/peer/gtk/ComponentGraphics.java,v
retrieving revision 1.4
diff -U3 -r1.4 ComponentGraphics.java
--- gnu/java/awt/peer/gtk/ComponentGraphics.java	30 May 2006 21:42:56 -0000	1.4
+++ gnu/java/awt/peer/gtk/ComponentGraphics.java	30 May 2006 23:59:45 -0000
@@ -72,8 +72,6 @@
     setup( cairo_t );
     setBackground(component.awtComponent.getBackground());
     setClip(component.awtComponent.getBounds());
-//     setColor( new Color( 255, 255, 255, 255 ) );
-//     fill(component.awtComponent.getBounds());
     setColor(component.awtComponent.getForeground());
   }
 

Reply via email to