--- /home/cpdev/src/classpath/gnu/java/awt/peer/gtk/GdkGraphics2D.java	2005-07-02 21:03:02.000000000 +0000
+++ gnu/java/awt/peer/gtk/GdkGraphics2D.java	2005-06-30 05:34:03.000000000 +0000
@@ -99,10 +99,6 @@
 
   static 
   {
-    if (! Configuration.GTK_CAIRO_ENABLED)
-      throw new Error("Grahics2D not implemented. "
-		      + "Cairo was not found or disabled at configure time");
-
     if (Configuration.INIT_LOAD_LIBRARY)
       System.loadLibrary("gtkpeer");
 
@@ -201,7 +197,7 @@
     initState(width, height);
 
     setColor(Color.black);
-    setBackground(new Color(0, 0, 0, 0));
+    setBackground(Color.black);
     setPaint(getColor());
     setFont(new Font("SansSerif", Font.PLAIN, 12));
     setTransform(new AffineTransform());
@@ -255,7 +251,7 @@
     initState(this.pixelBuffer, bimage.getWidth(), bimage.getHeight());
 
     setColor(Color.black);
-    setBackground(new Color(0, 0, 0, 0));
+    setBackground(Color.black);
     setPaint(getColor());
     setFont(new Font("SansSerif", Font.PLAIN, 12));
     setTransform(new AffineTransform());
@@ -290,8 +286,8 @@
   private native void cairoRestore();
   private native void cairoSetMatrix(double[] m);
   private native void cairoSetOperator(int cairoOperator);
-  private native void cairoSetRGBAColor(double red, double green,
-                                        double blue, double alpha);
+  private native void cairoSetRGBColor(double red, double green, double blue);
+  private native void cairoSetAlpha(double alpha);
   private native void cairoSetFillRule(int cairoFillRule);
   private native void cairoSetLineWidth(double width);
   private native void cairoSetLineCap(int cairoLineCap);
@@ -498,10 +494,9 @@
       {
         int height = bimage.getHeight();
         int width = bimage.getWidth();
-        int index = 0;
         for (int y = 0; y < height; ++y)
           for (int x = 0; x < width; ++x)
-            bimage.setRGB(x, y, pixelBuffer[index++]);
+            bimage.setRGB(x, y, pixelBuffer[y*width+height]);
       }
   }
 
@@ -511,22 +506,21 @@
     if (img == null)
       return false;
 
-    // FIXME: I'll fix this, /Sven
-//     if (img instanceof GtkOffScreenImage
-//         && img.getGraphics() instanceof GdkGraphics2D
-//         && (xform == null || xform.getType() == AffineTransform.TYPE_IDENTITY
-//         || xform.getType() == AffineTransform.TYPE_TRANSLATION))
-//       {
-// 	// we are being asked to flush a double buffer from Gdk
-// 	GdkGraphics2D g2 = (GdkGraphics2D) img.getGraphics();
-// 	gdkDrawDrawable(g2, (int) xform.getTranslateX(),
-// 	                (int) xform.getTranslateY());
-
-// 	updateBufferedImage();
-
-// 	return true;
-//       }
-//     else
+    if (img instanceof GtkOffScreenImage
+        && img.getGraphics() instanceof GdkGraphics2D
+        && (xform == null || xform.getType() == AffineTransform.TYPE_IDENTITY
+        || xform.getType() == AffineTransform.TYPE_TRANSLATION))
+      {
+	// we are being asked to flush a double buffer from Gdk
+	GdkGraphics2D g2 = (GdkGraphics2D) img.getGraphics();
+	gdkDrawDrawable(g2, (int) xform.getTranslateX(),
+	                (int) xform.getTranslateY());
+
+	updateBufferedImage();
+
+	return true;
+      }
+    else
       {
 	// In this case, xform is an AffineTransform that transforms bounding
 	// box of the specified image from image space to user space. However
@@ -545,7 +539,7 @@
 		// draw an image which has actually been loaded 
 		// into memory fully
 		BufferedImage b = (BufferedImage) img;
-		return drawRaster(b.getColorModel(), b.getTile(0, 0),
+		return drawRaster(b.getColorModel(), b.getData(),
 		                  invertedXform, bgcolor);
 	      }
 	    else
@@ -808,8 +802,9 @@
 
     fg = c;
     paint = c;
-    cairoSetRGBAColor(fg.getRed() / 255.0, fg.getGreen() / 255.0,
-                      fg.getBlue() / 255.0, fg.getAlpha() / 255.0);
+    cairoSetRGBColor(fg.getRed() / 255.0, fg.getGreen() / 255.0,
+                     fg.getBlue() / 255.0);
+    cairoSetAlpha((fg.getAlpha() & 255) / 255.0);
   }
 
   public Color getColor()
@@ -914,8 +909,9 @@
 
   public void clearRect(int x, int y, int width, int height)
   {
-    cairoSetRGBAColor(bg.getRed() / 255.0, bg.getGreen() / 255.0,
-                      bg.getBlue() / 255.0, 1.0);
+    cairoSetRGBColor(bg.getRed() / 255.0, bg.getGreen() / 255.0,
+                     bg.getBlue() / 255.0);
+    cairoSetAlpha(1.0);
     cairoNewPath();
     cairoRectangle(x, y, width, height);
     cairoFill();
