mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			230 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			230 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			Java
		
	
	
	
| /* GradientPaint.java --
 | |
|    Copyright (C) 2002, 2005, Free Software Foundation, Inc.
 | |
| 
 | |
| This file is part of GNU Classpath.
 | |
| 
 | |
| GNU Classpath is free software; you can redistribute it and/or modify
 | |
| it under the terms of the GNU General Public License as published by
 | |
| the Free Software Foundation; either version 2, or (at your option)
 | |
| any later version.
 | |
| 
 | |
| GNU Classpath is distributed in the hope that it will be useful, but
 | |
| WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | |
| General Public License for more details.
 | |
| 
 | |
| You should have received a copy of the GNU General Public License
 | |
| along with GNU Classpath; see the file COPYING.  If not, write to the
 | |
| Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 | |
| 02110-1301 USA.
 | |
| 
 | |
| Linking this library statically or dynamically with other modules is
 | |
| making a combined work based on this library.  Thus, the terms and
 | |
| conditions of the GNU General Public License cover the whole
 | |
| combination.
 | |
| 
 | |
| As a special exception, the copyright holders of this library give you
 | |
| permission to link this library with independent modules to produce an
 | |
| executable, regardless of the license terms of these independent
 | |
| modules, and to copy and distribute the resulting executable under
 | |
| terms of your choice, provided that you also meet, for each linked
 | |
| independent module, the terms and conditions of the license of that
 | |
| module.  An independent module is a module which is not derived from
 | |
| or based on this library.  If you modify this library, you may extend
 | |
| this exception to your version of the library, but you are not
 | |
| obligated to do so.  If you do not wish to do so, delete this
 | |
| exception statement from your version. */
 | |
| 
 | |
| 
 | |
| package java.awt;
 | |
| 
 | |
| import java.awt.geom.AffineTransform;
 | |
| import java.awt.geom.Point2D;
 | |
| import java.awt.geom.Rectangle2D;
 | |
| import java.awt.image.ColorModel;
 | |
| import gnu.java.awt.GradientPaintContext;
 | |
| 
 | |
| /**
 | |
|  * A paint object that can be used to color a region by blending two colors.
 | |
|  * Instances of this class are immutable.
 | |
|  */
 | |
| public class GradientPaint implements Paint
 | |
| {
 | |
|   private final float x1;
 | |
|   private final float y1;
 | |
|   private final Color c1;
 | |
|   private final float x2;
 | |
|   private final float y2;
 | |
|   private final Color c2;
 | |
|   private final boolean cyclic;
 | |
| 
 | |
|   /**
 | |
|    * Creates a new acyclic <code>GradientPaint</code>.
 | |
|    *
 | |
|    * @param x1  the x-coordinate of the anchor point for color 1.
 | |
|    * @param y1  the y-coordinate of the anchor point for color 1.
 | |
|    * @param c1  color 1 (<code>null</code> not permitted).
 | |
|    * @param x2  the x-coordinate of the anchor point for color 2.
 | |
|    * @param y2  the y-coordinate of the anchor point for color 2.
 | |
|    * @param c2  the second color (<code>null</code> not permitted).
 | |
|    */
 | |
|   public GradientPaint(float x1, float y1, Color c1,
 | |
|                        float x2, float y2, Color c2)
 | |
|   {
 | |
|     this(x1, y1, c1, x2, y2, c2, false);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Creates a new acyclic <code>GradientPaint</code>.
 | |
|    *
 | |
|    * @param p1  anchor point 1 (<code>null</code> not permitted).
 | |
|    * @param c1  color 1 (<code>null</code> not permitted).
 | |
|    * @param p2  anchor point 2 (<code>null</code> not permitted).
 | |
|    * @param c2  color 2 (<code>null</code> not permitted).
 | |
|    */
 | |
|   public GradientPaint(Point2D p1, Color c1, Point2D p2, Color c2)
 | |
|   {
 | |
|     this((float) p1.getX(), (float) p1.getY(), c1,
 | |
|          (float) p2.getX(), (float) p2.getY(), c2, false);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Creates a new cyclic or acyclic <code>GradientPaint</code>.
 | |
|    *
 | |
|    * @param x1  the x-coordinate of the anchor point for color 1.
 | |
|    * @param y1  the y-coordinate of the anchor point for color 1.
 | |
|    * @param c1  color 1 (<code>null</code> not permitted).
 | |
|    * @param x2  the x-coordinate of the anchor point for color 2.
 | |
|    * @param y2  the y-coordinate of the anchor point for color 2.
 | |
|    * @param c2  the second color (<code>null</code> not permitted).
 | |
|    * @param cyclic  a flag that controls whether the gradient is cyclic or
 | |
|    *                acyclic.
 | |
|    */
 | |
|   public GradientPaint(float x1, float y1, Color c1,
 | |
|                        float x2, float y2, Color c2, boolean cyclic)
 | |
|   {
 | |
|     if (c1 == null || c2 == null)
 | |
|       throw new NullPointerException();
 | |
|     this.x1 = x1;
 | |
|     this.y1 = y1;
 | |
|     this.c1 = c1;
 | |
|     this.x2 = x2;
 | |
|     this.y2 = y2;
 | |
|     this.c2 = c2;
 | |
|     this.cyclic = cyclic;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Creates a new cyclic or acyclic <code>GradientPaint</code>.
 | |
|    *
 | |
|    * @param p1  anchor point 1 (<code>null</code> not permitted).
 | |
|    * @param c1  color 1 (<code>null</code> not permitted).
 | |
|    * @param p2  anchor point 2 (<code>null</code> not permitted).
 | |
|    * @param c2  color 2 (<code>null</code> not permitted).
 | |
|    * @param cyclic  a flag that controls whether the gradient is cyclic or
 | |
|    *                acyclic.
 | |
|    */
 | |
|   public GradientPaint(Point2D p1, Color c1, Point2D p2, Color c2,
 | |
|                        boolean cyclic)
 | |
|   {
 | |
|     this((float) p1.getX(), (float) p1.getY(), c1,
 | |
|          (float) p2.getX(), (float) p2.getY(), c2, cyclic);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns a point with the same coordinates as the anchor point for color 1.
 | |
|    * Note that if you modify this point, the <code>GradientPaint</code> remains
 | |
|    * unchanged.
 | |
|    *
 | |
|    * @return A point with the same coordinates as the anchor point for color 1.
 | |
|    */
 | |
|   public Point2D getPoint1()
 | |
|   {
 | |
|     return new Point2D.Float(x1, y1);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns the first color.
 | |
|    *
 | |
|    * @return The color (never <code>null</code>).
 | |
|    */
 | |
|   public Color getColor1()
 | |
|   {
 | |
|     return c1;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns a point with the same coordinates as the anchor point for color 2.
 | |
|    * Note that if you modify this point, the <code>GradientPaint</code> remains
 | |
|    * unchanged.
 | |
|    *
 | |
|    * @return A point with the same coordinates as the anchor point for color 2.
 | |
|    */
 | |
|   public Point2D getPoint2()
 | |
|   {
 | |
|     return new Point2D.Float(x2, y2);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns the second color.
 | |
|    *
 | |
|    * @return The color (never <code>null</code>).
 | |
|    */
 | |
|   public Color getColor2()
 | |
|   {
 | |
|     return c2;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns <code>true</code> if this <code>GradientPaint</code> instance is
 | |
|    * cyclic, and <code>false</code> otherwise.
 | |
|    *
 | |
|    * @return A boolean.
 | |
|    */
 | |
|   public boolean isCyclic()
 | |
|   {
 | |
|     return cyclic;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns the {@link PaintContext} used to generate the color pattern.
 | |
|    *
 | |
|    * @param cm  the color model, used as a hint (ignored in this
 | |
|    *            implementation).
 | |
|    * @param deviceBounds  the device space bounding box of the painted area.
 | |
|    * @param userBounds  the user space bounding box of the painted area.
 | |
|    * @param xform  the transformation from user space to device space.
 | |
|    * @param hints  any hints for choosing between rendering alternatives.
 | |
|    *
 | |
|    * @return The context for performing the paint
 | |
|    */
 | |
|   public PaintContext createContext(ColorModel cm, Rectangle deviceBounds,
 | |
|                                     Rectangle2D userBounds,
 | |
|                                     AffineTransform xform,
 | |
|                                     RenderingHints hints)
 | |
|   {
 | |
|     Point2D xp1 = xform.transform(getPoint1(), null);
 | |
|     Point2D xp2 = xform.transform(getPoint2(), null);
 | |
|     return new GradientPaintContext((float) xp1.getX(), (float) xp1.getY(), c1,
 | |
|             (float) xp2.getX(), (float) xp2.getY(), c2, cyclic);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Returns the transparency code for this <code>GradientPaint</code> instance.
 | |
|    * This is derived from the two {@link Color} objects used in creating this
 | |
|    * object:  if both colors are opaque, this method returns
 | |
|    * {@link Transparency#OPAQUE}, otherwise it returns
 | |
|    * {@link Transparency#TRANSLUCENT}.
 | |
|    *
 | |
|    * @return {@link Transparency#OPAQUE} or {@link Transparency#TRANSLUCENT}.
 | |
|    */
 | |
|   public int getTransparency()
 | |
|   {
 | |
|     if (c1.getAlpha() == 255 && c2.getAlpha() == 255)
 | |
|       return Transparency.OPAQUE;
 | |
|     else
 | |
|       return Transparency.TRANSLUCENT;
 | |
|   }
 | |
| 
 | |
| } // class GradientPaint
 |