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 );
}