ColorModel.java (getRGBdefault): Default ColorModel has 32 bit pixels not 8 bit pixels.

2004-05-04  Ingo Proetel  <proetel@aicas.com>

	* java/awt/image/ColorModel.java (getRGBdefault): Default ColorModel has
        32 bit pixels not 8 bit pixels.
	(isCompatibleRaster): Added javadoc comment.

2004-05-04  Ingo Proetel  <proetel@aicas.com>

	* java/awt/image/ComponentSampleModel.java (setDataSamples):Do not reset
	scanline stride.

2004-05-04  Ingo Proetel  <proetel@aicas.com>

	* java/awt/ColorPaintContext.java (<init>): Added ColorModel to signature.
	(getColorModel): Return the actual color model.
	(getRaster): Implemented.
	(ColorRaster): New inner class.
	* java/awt/SystemColor.java (createContext): Use ColorModel when creating
	a PaintContext.
	* java/awt/Color.java (<init>): Make exception more verbose.
	(createContext): Use ColorModel when creating a PaintContext.

From-SVN: r81486
This commit is contained in:
Ingo Proetel
2004-05-04 19:27:11 +00:00
committed by Michael Koch
parent fae4c98f1b
commit 27c2c3ec4a
6 changed files with 144 additions and 21 deletions
+103 -11
View File
@@ -1,5 +1,5 @@
/* ColorPaintContext.java -- context for painting solid colors
Copyright (C) 2002 Free Software Foundation, Inc.
Copyright (C) 2002, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -55,15 +55,31 @@ class ColorPaintContext implements PaintContext
* SystemColor.
*/
final int color;
final ColorModel colorModel;
private ColorRaster cachedRaster;
/**
* Create the context for a given color.
*
* @param c the solid color to use
* @param c The solid color to use.
*/
ColorPaintContext(int c)
ColorPaintContext(int colorRGB)
{
color = c;
this(ColorModel.getRGBdefault(), colorRGB);
}
/**
* Create the context for a given color.
*
* @param cm The color model of this context.
* @param c The solid color to use.
*/
ColorPaintContext(ColorModel cm,int colorRGB)
{
color = colorRGB;
colorModel = cm;
}
/**
@@ -75,14 +91,13 @@ class ColorPaintContext implements PaintContext
}
/**
* Return the color model of this context. This ignores the model passed
* in the request, since colors are always in sRGB.
* Return the color model of this context.
*
* @return the context color model
*/
public ColorModel getColorModel()
{
return ColorModel.getRGBdefault();
return colorModel;
}
/**
@@ -94,10 +109,87 @@ class ColorPaintContext implements PaintContext
* @param h the height, in device space
* @return a raster for the given area and color
*/
public Raster getRaster(int x, int y, int w, int h)
public Raster getRaster(int x, int y, int width, int height)
{
// XXX Implement. Sun uses undocumented implementation class
// sun.awt.image.IntegerInterleavedRaster.
throw new Error("not implemented");
if( cachedRaster == null
|| cachedRaster.getWidth() < width
|| cachedRaster.getHeight() < height)
{
cachedRaster = new ColorRaster(colorModel, 0, 0, width, height, color);
}
return cachedRaster.createChild(0 ,0 ,width ,height ,x ,y , null);
}
/**
* A ColorRaster is a raster that is completely filled with one color. The
* data layout is taken from the color model given to the constructor.
*/
private class ColorRaster extends Raster
{
/**
* Create a raster that is compaltible with the given color model and
* filled with the given color.
* @param cm The color model for this raster.
* @param x The smallest horizontal corrdinate in the raster.
* @param y The smallest vertical coordinate in the raster.
* @param width The width of the raster.
* @param height The height of the raster.
* @param rgbPixel The RGB value of the color for this raster.
*/
ColorRaster(ColorModel cm,int x, int y, int width, int height, int rgbPixel)
{
super(cm.createCompatibleSampleModel(width,height),new Point(x,y));
Object pixel = cm.getDataElements(rgbPixel,null);
getSampleModel().setDataElements(0, 0,
width, height,
multiplyData(pixel,null,width*height),
dataBuffer);
}
private Object multiplyData(Object src, Object dest, int factor)
{
Object from;
int srcLength = 0;
if (src instanceof byte[])
{
srcLength = ((byte[])src).length;
if (dest == null) dest = new byte[factor * srcLength];
}
else if (src instanceof short[])
{
srcLength = ((short[])src).length;
if (dest == null) dest = new short[factor * srcLength];
}
else if (src instanceof int[])
{
srcLength = ((int[]) src).length;
if (dest == null) dest = new int[factor * srcLength];
}
else
{
throw new ClassCastException("Unknown data buffer type");
}
System.arraycopy(src,0,dest,0,srcLength);
int count = 1;
while(count*2 < factor)
{
System.arraycopy(dest, 0, dest, count * srcLength, count*srcLength);
count *= 2;
}
if(factor > count)
System.arraycopy(dest,0, dest, count * srcLength,
(factor - count) * srcLength );
return dest;
}
}
} // class ColorPaintContext