Another step in the grand scheme of image things.

2006-08-09  Sven de Marothy  <[EMAIL PROTECTED]>

        * gnu/java/awt/peer/gtk/CairoSurface.java
        Change class to extend WritableRaster and not DataBuffer.
        (CairoDataBuffer): New inner class.
        * gnu/java/awt/peer/gtk/BufferedImageGraphics.java
        * gnu/java/awt/peer/gtk/CairoGraphics2D.java
        * gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java
        Accomodate the above change.
        

Index: gnu/java/awt/peer/gtk/BufferedImageGraphics.java
===================================================================
RCS file: /sources/classpath/classpath/gnu/java/awt/peer/gtk/BufferedImageGraphics.java,v
retrieving revision 1.8
diff -U3 -r1.8 BufferedImageGraphics.java
--- gnu/java/awt/peer/gtk/BufferedImageGraphics.java	17 Jul 2006 22:41:03 -0000	1.8
+++ gnu/java/awt/peer/gtk/BufferedImageGraphics.java	8 Aug 2006 22:25:56 -0000
@@ -48,6 +48,7 @@
 import java.awt.geom.AffineTransform;
 import java.awt.geom.Rectangle2D;
 import java.awt.image.BufferedImage;
+import java.awt.image.Raster;
 import java.awt.image.DataBuffer;
 import java.awt.image.DataBufferInt;
 import java.awt.image.ColorModel;
@@ -128,17 +129,17 @@
 
     cairo_t = surface.newCairoContext();
 
-    DataBuffer db = bi.getRaster().getDataBuffer();
+    Raster raster = bi.getRaster();
     int[] pixels;
     // get pixels
 
-    if(db instanceof CairoSurface)
-      pixels = ((CairoSurface)db).getPixels(imageWidth * imageHeight);
+    if(raster instanceof CairoSurface)
+      pixels = ((CairoSurface)raster).getPixels(imageWidth * imageHeight);
     else
       {
 	if( hasFastCM )
 	  {
-	    pixels = ((DataBufferInt)db).getData();
+	    pixels = ((DataBufferInt)raster.getDataBuffer()).getData();
 	    if( !hasAlpha )
 	      for(int i = 0; i < pixels.length; i++)
 		pixels[i] &= 0xFFFFFFFF;
Index: gnu/java/awt/peer/gtk/CairoGraphics2D.java
===================================================================
RCS file: /sources/classpath/classpath/gnu/java/awt/peer/gtk/CairoGraphics2D.java,v
retrieving revision 1.36
diff -U3 -r1.36 CairoGraphics2D.java
--- gnu/java/awt/peer/gtk/CairoGraphics2D.java	6 Aug 2006 21:00:54 -0000	1.36
+++ gnu/java/awt/peer/gtk/CairoGraphics2D.java	8 Aug 2006 22:25:56 -0000
@@ -1269,7 +1269,7 @@
       }
 
     BufferedImage b = (BufferedImage) img;
-    DataBuffer db;
+    Raster raster;
     double[] i2u = new double[6];
     int width = b.getWidth();
     int height = b.getHeight();
@@ -1278,9 +1278,9 @@
     // use the cached CairoSurface that BIG is drawing onto
     
     if( BufferedImageGraphics.bufferedImages.get( b ) != null )
-      db = (DataBuffer)BufferedImageGraphics.bufferedImages.get( b );
+      raster = (Raster)BufferedImageGraphics.bufferedImages.get( b );
     else
-      db = b.getRaster().getDataBuffer();
+      raster = b.getRaster();
 
     invertedXform.getMatrix(i2u);
 
@@ -1288,9 +1288,9 @@
     if (comp instanceof AlphaComposite)
       alpha = ((AlphaComposite) comp).getAlpha();
 
-    if(db instanceof CairoSurface)
+    if(raster instanceof CairoSurface)
       {
-	((CairoSurface)db).drawSurface(nativePointer, i2u, alpha);
+	((CairoSurface)raster).drawSurface(nativePointer, i2u, alpha);
         updateColor();
 	return true;
       }
Index: gnu/java/awt/peer/gtk/CairoSurface.java
===================================================================
RCS file: /sources/classpath/classpath/gnu/java/awt/peer/gtk/CairoSurface.java,v
retrieving revision 1.15
diff -U3 -r1.15 CairoSurface.java
--- gnu/java/awt/peer/gtk/CairoSurface.java	22 Jul 2006 21:45:17 -0000	1.15
+++ gnu/java/awt/peer/gtk/CairoSurface.java	8 Aug 2006 22:25:56 -0000
@@ -46,6 +46,7 @@
 import java.awt.image.BufferedImage;
 import java.awt.image.ColorModel;
 import java.awt.image.DirectColorModel;
+import java.awt.image.SinglePixelPackedSampleModel;
 import java.nio.ByteOrder;
 import java.util.Hashtable;
 
@@ -54,7 +55,7 @@
  *
  * @author Sven de Marothy
  */
-public class CairoSurface extends DataBuffer
+public class CairoSurface extends WritableRaster
 {
   int width = -1, height = -1;
 
@@ -68,7 +69,6 @@
    */
   long bufferPointer;
 
-
   static ColorModel nativeModel = new DirectColorModel(32,
 						       0x00FF0000,
 						       0x0000FF00,
@@ -138,18 +138,22 @@
    */
   public CairoSurface(int width, int height)
   {
-    super(DataBuffer.TYPE_INT, width * height);
+    super( new SinglePixelPackedSampleModel
+	   (DataBuffer.TYPE_INT, width, height,
+	    new int[]{ 0x000000FF, 0x0000FF00, 0x00FF0000, 0xFF000000 }),
+	   null, new Point(0, 0) );
 
     if(width <= 0 || height <= 0)
       throw new IllegalArgumentException("Image must be at least 1x1 pixels.");
-
+    
     this.width = width;
     this.height = height;
-
     create(width, height, width);
 
     if(surfacePointer == 0 || bufferPointer == 0)
       throw new Error("Could not allocate bitmap.");
+
+    dataBuffer = new CairoDataBuffer();
   }
 
   /**
@@ -158,18 +162,7 @@
    */
   CairoSurface(GtkImage image)
   {
-    super(DataBuffer.TYPE_INT, image.width * image.height);
-
-    if(image.width <= 0 || image.height <= 0)
-      throw new IllegalArgumentException("Image must be at least 1x1 pixels.");
-
-    width = image.width;
-    height = image.height;
-
-    create(width, height, width);
-
-    if(surfacePointer == 0 || bufferPointer == 0)
-      throw new Error("Could not allocate bitmap.");
+    this(image.width, image.height);
 
     // Copy the pixel data from the GtkImage.
     int[] data = image.getPixels();
@@ -260,32 +253,35 @@
    */    
   public static BufferedImage getBufferedImage(CairoSurface surface)
   {
-    WritableRaster raster = Raster.createPackedRaster
-      (surface, surface.width, surface.height, surface.width, 
-       new int[]{ 0x000000FF, 0x0000FF00, 0x00FF0000, 0xFF000000 },
-       new Point(0,0));
-
-    return new BufferedImage(nativeModel, raster, true, new Hashtable());
+    return new BufferedImage(nativeModel, surface, true, new Hashtable());
   }
 
-  /**
-   * DataBank.getElem implementation
-   */
-  public int getElem(int bank, int i)
+  private class CairoDataBuffer extends DataBuffer
   {
-    if(bank != 0 || i < 0 || i >= width*height)
-      throw new IndexOutOfBoundsException(i+" size: "+width*height);
-    return nativeGetElem(bufferPointer, i);
-  }
+    public CairoDataBuffer()
+    {
+      super(DataBuffer.TYPE_INT, width * height);
+    }
+
+    /**
+     * DataBuffer.getElem implementation
+     */
+    public int getElem(int bank, int i)
+    {
+      if(bank != 0 || i < 0 || i >= width * height)
+	throw new IndexOutOfBoundsException(i+" size: "+width * height);
+      return nativeGetElem(bufferPointer, i);
+    }
   
-  /**
-   * DataBank.setElem implementation
-   */
-  public void setElem(int bank, int i, int val)
-  {
-    if(bank != 0 || i < 0 || i >= width*height)
-      throw new IndexOutOfBoundsException(i+" size: "+width*height);
-    nativeSetElem(bufferPointer, i, val);
+    /**
+     * DataBuffer.setElem implementation
+     */
+    public void setElem(int bank, int i, int val)
+    {
+      if(bank != 0 || i < 0 || i >= width*height)
+	throw new IndexOutOfBoundsException(i+" size: "+width * height);
+      nativeSetElem(bufferPointer, i, val);
+    }
   }
 
   /**
Index: gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java
===================================================================
RCS file: /sources/classpath/classpath/gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java,v
retrieving revision 1.14
diff -U3 -r1.14 GdkGraphicsEnvironment.java
--- gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java	15 Jul 2006 08:02:23 -0000	1.14
+++ gnu/java/awt/peer/gtk/GdkGraphicsEnvironment.java	8 Aug 2006 22:25:56 -0000
@@ -44,7 +44,7 @@
 import java.awt.GraphicsEnvironment;
 import java.awt.HeadlessException;
 import java.awt.image.BufferedImage;
-import java.awt.image.DataBuffer;
+import java.awt.image.Raster;
 import java.util.Locale;
 
 public class GdkGraphicsEnvironment extends GraphicsEnvironment
@@ -103,9 +103,9 @@
 
   public Graphics2D createGraphics (BufferedImage image)
   {
-    DataBuffer db = image.getRaster().getDataBuffer();
-    if(db instanceof CairoSurface)
-      return ((CairoSurface)db).getGraphics();
+    Raster raster = image.getRaster();
+    if(raster instanceof CairoSurface)
+      return ((CairoSurface)raster).getGraphics();
 
     return new BufferedImageGraphics( image );
   }

Reply via email to