This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Patch: java-awt fixes merged


Hi list,


I just commited the attached patch to trunk to merge fixes by Ingo 
Prötel from GNU classpath.


Michael


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.

Index: java/awt/Color.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/awt/Color.java,v
retrieving revision 1.10
diff -u -r1.10 Color.java
--- java/awt/Color.java	13 Aug 2003 03:19:24 -0000	1.10
+++ java/awt/Color.java	4 May 2004 19:16:57 -0000
@@ -319,7 +319,12 @@
   {
     if ((red & 255) != red || (green & 255) != green || (blue & 255) != blue
         || (alpha & 255) != alpha)
-      throw new IllegalArgumentException("Bad RGB values");
+      throw new IllegalArgumentException("Bad RGB values"
+                                        +" red=0x"+Integer.toHexString(red)
+                                        +" green=0x"+Integer.toHexString(green)
+                                        +" blue=0x"+Integer.toHexString(blue)
+                                        +" alpha=0x"+Integer.toHexString(alpha)  );
+
     value = (alpha << 24) | (red << 16) | (green << 8) | blue;
     falpha = 1;
     cs = null;
@@ -950,7 +955,7 @@
    * object, regardless of the parameters. Subclasses, however, may have a
    * mutable result.
    *
-   * @param cm the requested color model, ignored
+   * @param cm the requested color model
    * @param deviceBounds the bounding box in device coordinates, ignored
    * @param userBounds the bounding box in user coordinates, ignored
    * @param xform the bounds transformation, ignored
@@ -962,8 +967,8 @@
                                     AffineTransform xform,
                                     RenderingHints hints)
   {
-    if (context == null)
-      context = new ColorPaintContext(value);
+    if (context == null || !context.getColorModel().equals(cm))
+      context = new ColorPaintContext(cm,value);
     return context;
   }
 
Index: java/awt/ColorPaintContext.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/awt/ColorPaintContext.java,v
retrieving revision 1.1
diff -u -r1.1 ColorPaintContext.java
--- java/awt/ColorPaintContext.java	9 Aug 2002 04:26:13 -0000	1.1
+++ java/awt/ColorPaintContext.java	4 May 2004 19:16:57 -0000
@@ -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 @@
    * 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 @@
   }
 
   /**
-   * 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 @@
    * @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)
+  {
+   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
   {
-    // XXX Implement. Sun uses undocumented implementation class
-    // sun.awt.image.IntegerInterleavedRaster.
-    throw new Error("not implemented");
+    
+    /**
+     * 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
Index: java/awt/SystemColor.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/awt/SystemColor.java,v
retrieving revision 1.4
diff -u -r1.4 SystemColor.java
--- java/awt/SystemColor.java	9 Aug 2002 04:26:14 -0000	1.4
+++ java/awt/SystemColor.java	4 May 2004 19:16:57 -0000
@@ -427,7 +427,7 @@
    * as the system color is solid, the context does not need any of the
    * passed parameters to do its job.
    *
-   * @param cm the requested color model, ignored
+   * @param cm the requested color model
    * @param deviceBounds the bounding box in device coordinates, ignored
    * @param userBounds the bounding box in user coordinates, ignored
    * @param xform the bounds transformation, ignored
@@ -441,8 +441,8 @@
   {
     Toolkit.getDefaultToolkit().loadSystemColors(colors);
     int color = colors[value] | ALPHA_MASK;
-    if (context == null || color != context.color)
-      context = new ColorPaintContext(color);
+    if (context == null || color != context.color || !context.getColorModel().equals(cm))
+      context = new ColorPaintContext(cm,color);
     return context;
   }    
 
Index: java/awt/image/ColorModel.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/awt/image/ColorModel.java,v
retrieving revision 1.13
diff -u -r1.13 ColorModel.java
--- java/awt/image/ColorModel.java	25 Jun 2003 11:23:33 -0000	1.13
+++ java/awt/image/ColorModel.java	4 May 2004 19:16:58 -0000
@@ -166,7 +166,7 @@
    */
   public static ColorModel getRGBdefault()
   {
-    return new DirectColorModel(8, 0xff0000, 0xff00, 0xff, 0xff000000);
+    return new DirectColorModel(32, 0xff0000, 0xff00, 0xff, 0xff000000);
   }
 
   public final boolean hasAlpha()
@@ -597,7 +597,11 @@
     return null;
   }
     
-  // Typically overridden
+  /**
+   * Checks if the given raster has a compatible data-layout (SampleModel).
+   * @param raster The Raster to test.
+   * @return true if raster is compatible.
+   */ 
   public boolean isCompatibleRaster(Raster raster)
   {
     SampleModel sampleModel = raster.getSampleModel();
Index: java/awt/image/ComponentSampleModel.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/awt/image/ComponentSampleModel.java,v
retrieving revision 1.4
diff -u -r1.4 ComponentSampleModel.java
--- java/awt/image/ComponentSampleModel.java	22 Jan 2002 22:40:10 -0000	1.4
+++ java/awt/image/ComponentSampleModel.java	4 May 2004 19:16:58 -0000
@@ -349,7 +349,7 @@
     if (scanlineStride == rowSize)
       {
 	// Collapse scan lines:
-	scanlineStride = rowSize *= h;
+	rowSize *= h;
 	h = 1;
       }
 

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]