001 /* 002 * $Id: LinearGradientPainter.java,v 1.3 2006/04/11 18:47:55 rbair Exp $ 003 * 004 * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle, 005 * Santa Clara, California 95054, U.S.A. All rights reserved. 006 * 007 * This library is free software; you can redistribute it and/or 008 * modify it under the terms of the GNU Lesser General Public 009 * License as published by the Free Software Foundation; either 010 * version 2.1 of the License, or (at your option) any later version. 011 * 012 * This library is distributed in the hope that it will be useful, 013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 015 * Lesser General Public License for more details. 016 * 017 * You should have received a copy of the GNU Lesser General Public 018 * License along with this library; if not, write to the Free Software 019 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 020 */ 021 022 package org.jdesktop.swingx.painter.gradient; 023 024 import java.awt.Color; 025 import java.awt.Paint; 026 import java.awt.geom.Point2D; 027 import org.apache.batik.ext.awt.LinearGradientPaint; 028 029 /** 030 * <p>A Gradient based painter used for painting "multi-stop" gradients. These are 031 * gradients that imploys more than 2 colors, where each color is defined along 032 * with a float value between 0 and 1 indicating at what point along the gradient 033 * the new color is used.</p> 034 * 035 * <p>As with BasicGradienPainter and mentioned in AbstractGradientPainter, the values 036 * given to the startPoint and endPoint of the LinearGradientPainter are crucial. They 037 * represent what distance from the origin the gradient should begin and end at, 038 * depending on the size of the component. That is, they must be specified as values between 039 * 0 and 1, where 0 means "all the way on the left/top" and 1 means "all the way on the 040 * right/bottom".</p> 041 * 042 * <p><strong>NOTE: LinearGradientPainter relies on LinearGradientPaint, which is 043 * included in the optional jar MultipleGradientPaint.jar. Be sure to have this 044 * jar on your classpath if you use this class</strong></p> 045 * 046 * @author rbair 047 */ 048 public class LinearGradientPainter extends AbstractGradientPainter { 049 public static final LinearGradientPaint ORANGE_DELIGHT = new LinearGradientPaint( 050 new Point2D.Double(0, 0), 051 new Point2D.Double(0, 1), 052 new float[] {0f, .5f, .51f, 1f}, 053 new Color[] { 054 new Color(248, 192, 75), 055 new Color(253, 152, 6), 056 new Color(243, 133, 0), 057 new Color(254, 124, 0)}); 058 public static final LinearGradientPaint BLACK_STAR = new LinearGradientPaint( 059 new Point2D.Double(0, 0), 060 new Point2D.Double(0, 1), 061 new float[] {0f, .5f, .51f, 1f}, 062 new Color[] { 063 new Color(54, 62, 78), 064 new Color(32, 39, 55), 065 new Color(74, 82, 96), 066 new Color(123, 132, 145)}); 067 public static final LinearGradientPaint BLACK_PERSPECTIVE = new LinearGradientPaint ( 068 new Point2D.Double(0, 0), 069 new Point2D.Double(0, 1), 070 new float[] {0f, .5f, 1f}, 071 new Color[] { 072 Color.BLACK, 073 new Color(110, 110, 110), 074 Color.BLACK}); 075 076 private LinearGradientPaint paint; 077 078 /** 079 * Creates a new instance of LinearGradientPainter 080 */ 081 public LinearGradientPainter() { 082 } 083 084 /** 085 * Creates a new instance of LinearGradientPainter with the given LinearGradientPaint 086 * as input 087 * 088 * @param paint the Paint to use 089 */ 090 public LinearGradientPainter(LinearGradientPaint paint) { 091 this.paint = paint; 092 } 093 094 /** 095 * Set the gradient paint to use. This may be null. If null, nothing is painted 096 * 097 * @param paint the LinearGradientPaint to use 098 */ 099 public void setGradientPaint(LinearGradientPaint paint) { 100 LinearGradientPaint old = getGradientPaint(); 101 this.paint = paint; 102 firePropertyChange("gradientPaint", old, getGradientPaint()); 103 } 104 105 /** 106 * @return the LinearGradientPaint used for painting. This may be null 107 */ 108 public LinearGradientPaint getGradientPaint() { 109 return paint; 110 } 111 112 /** 113 * @inheritDoc 114 */ 115 protected Paint calculateSizedPaint(int width, int height) { 116 LinearGradientPaint paint = getGradientPaint(); 117 if (paint == null) { 118 return null; 119 } 120 121 Point2D startPoint = paint.getStartPoint(); 122 Point2D endPoint = paint.getEndPoint(); 123 124 double x1 = isResizeHorizontal() ? startPoint.getX() * width : startPoint.getX(); 125 double y1 = isResizeVertical() ? startPoint.getY() * height : startPoint.getY(); 126 double x2 = isResizeHorizontal() ? endPoint.getX() * width : endPoint.getX(); 127 double y2 = isResizeVertical() ? endPoint.getY() * height : endPoint.getY(); 128 startPoint = new Point2D.Double(x1, y1); 129 endPoint = new Point2D.Double(x2, y2); 130 131 return new LinearGradientPaint( 132 startPoint, 133 endPoint, 134 paint.getFractions(), 135 paint.getColors(), 136 paint.getCycleMethod(), 137 paint.getColorSpace(), 138 paint.getTransform()); 139 } 140 }