package uk.org.squirm3.derivative; import java.awt.Color; import java.awt.Paint; import java.awt.PaintContext; import java.awt.Rectangle; import java.awt.RenderingHints; import java.awt.geom.AffineTransform; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.awt.image.ColorModel; /** * This file is part of Organic Builder and is a derivative work from an * oreilly's example. * * @author from oreilly, Bertrand Dechoux * * see "http://www.oreilly.com/pub/a/oreilly/ask_tim/2001/codepolicy.html" * see "http://examples.oreilly.com/java2d/examples/RoundGradientPaint.java" */ public class RoundGradientPaint implements Paint { protected Point2D mPoint; protected Point2D mRadius; protected Color mPointColor, mBackgroundColor; public RoundGradientPaint(final double x, final double y, final Color pointColor, final Point2D radius, final Color backgroundColor) { if (radius.distance(0, 0) <= 0) { throw new IllegalArgumentException("Radius must be greater than 0."); } mPoint = new Point2D.Double(x, y); mPointColor = pointColor; mRadius = radius; mBackgroundColor = backgroundColor; } @Override public PaintContext createContext(final ColorModel cm, final Rectangle deviceBounds, final Rectangle2D userBounds, final AffineTransform xform, final RenderingHints hints) { final Point2D transformedPoint = xform.transform(mPoint, null); final Point2D transformedRadius = xform.deltaTransform(mRadius, null); return new RoundGradientContext(transformedPoint, mPointColor, transformedRadius, mBackgroundColor); } @Override public int getTransparency() { final int a1 = mPointColor.getAlpha(); final int a2 = mBackgroundColor.getAlpha(); return (a1 & a2) == 0xff ? OPAQUE : TRANSLUCENT; } }