001: /*
002: * Copyright (c) 2004 JETA Software, Inc. All rights reserved.
003: *
004: * Redistribution and use in source and binary forms, with or without modification,
005: * are permitted provided that the following conditions are met:
006: *
007: * o Redistributions of source code must retain the above copyright notice,
008: * this list of conditions and the following disclaimer.
009: *
010: * o Redistributions in binary form must reproduce the above copyright notice,
011: * this list of conditions and the following disclaimer in the documentation
012: * and/or other materials provided with the distribution.
013: *
014: * o Neither the name of JETA Software nor the names of its contributors may
015: * be used to endorse or promote products derived from this software without
016: * specific prior written permission.
017: *
018: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
019: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
020: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
021: * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
022: * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
023: * INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
024: * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
025: * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
026: * INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
027: * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
028: */
029:
030: package com.jeta.forms.store.properties;
031:
032: import java.awt.Color;
033: import java.awt.PaintContext;
034: import java.awt.Rectangle;
035: import java.awt.RenderingHints;
036: import java.awt.color.ColorSpace;
037: import java.awt.geom.AffineTransform;
038: import java.awt.geom.Rectangle2D;
039: import java.awt.image.ColorModel;
040:
041: /**
042: * A <code>ColorProxy</code> is a Color that can change based on the current
043: * look and feel. This proxy has a <code>ColorProperty</code> delegate that it
044: * uses as a basis for the color. ColorProxys are important for effects that
045: * need to change color based on the L&F. For example, in some gradients it is
046: * desirable to fade out to the current background color. This gives a
047: * transparent effect. However, the background color changes based on the L&F,
048: * so we need to employ ColorProxys to change color to match the background in
049: * these cases.
050: *
051: * @author Jeff Tassin
052: */
053: public class ColorProxy extends Color {
054: private ColorProperty m_color_prop;
055:
056: /**
057: * Creates an uninitialized <code>ColorProxy</code> object.
058: */
059: public ColorProxy() {
060: super (255, 255, 255);
061:
062: }
063:
064: /**
065: * Creates a <code>ColorProxy</code> object with the specified
066: * ColorProperty delegate.
067: *
068: * @param cprop
069: * a ColorProperty that this object uses to get the current
070: * color.
071: */
072: public ColorProxy(ColorProperty cprop) {
073: super (255, 255, 255);
074: m_color_prop = new ColorProperty();
075: m_color_prop.setValue(cprop);
076: }
077:
078: /**
079: * Returns the ColorProperty delegate associated with this object.
080: */
081: public ColorProperty getColorProperty() {
082: return m_color_prop;
083: }
084:
085: /**
086: * Sets the ColorProperty delegate associated with this object.
087: */
088: public void setColorProperty(ColorProperty prop) {
089: m_color_prop = prop;
090: }
091:
092: /**
093: * Returns the underlying Color of the ColorProperty delegate.
094: */
095: public Color getColor() {
096: Color c = m_color_prop.getColor();
097: if (c == null)
098: c = Color.white;
099: return c;
100: }
101:
102: /**
103: * java.awt.Color override. Forward the call to the delegate.
104: */
105: public int getRed() {
106: return getColor().getRed();
107: }
108:
109: /**
110: * java.awt.Color. Forward the call to the delegate.
111: */
112: public int getGreen() {
113: return getColor().getGreen();
114: }
115:
116: /**
117: * java.awt.Color. Forward the call to the delegate.
118: */
119: public int getBlue() {
120: return getColor().getBlue();
121: }
122:
123: /**
124: * java.awt.Color. Forward the call to the delegate.
125: */
126: public int getAlpha() {
127: return getColor().getAlpha();
128: }
129:
130: /**
131: * java.awt.Color. Forward the call to the delegate.
132: */
133: public int getRGB() {
134: return getColor().getRGB();
135: }
136:
137: /**
138: * java.awt.Color. Forward the call to the delegate.
139: */
140: public Color brighter() {
141: return getColor().brighter();
142: }
143:
144: /**
145: * java.awt.Color. Forward the call to the delegate.
146: */
147: public Color darker() {
148: return getColor().darker();
149: }
150:
151: /**
152: * java.awt.Color. Forward the call to the delegate.
153: */
154: public int hashCode() {
155: return getColor().hashCode();
156: }
157:
158: /**
159: * java.awt.Color. Forward the call to the delegate.
160: */
161: public boolean equals(Object obj) {
162: if (obj instanceof Color) {
163: return obj.equals(getColor());
164: } else if (obj instanceof ColorProxy) {
165: return ((ColorProxy) obj).getColor().equals(getColor());
166: } else {
167: return false;
168: }
169: }
170:
171: /**
172: * java.awt.Color. Forward the call to the delegate.
173: */
174: public String toString() {
175: return getColor().toString();
176: }
177:
178: /**
179: * java.awt.Color. Forward the call to the delegate.
180: */
181: public float[] getRGBComponents(float[] compArray) {
182: return getColor().getRGBComponents(compArray);
183: }
184:
185: /**
186: * java.awt.Color. Forward the call to the delegate.
187: */
188: public float[] getRGBColorComponents(float[] compArray) {
189: return getColor().getRGBColorComponents(compArray);
190: }
191:
192: /**
193: * java.awt.Color. Forward the call to the delegate.
194: */
195: public float[] getComponents(float[] compArray) {
196: return getColor().getComponents(compArray);
197: }
198:
199: /**
200: * java.awt.Color. Forward the call to the delegate.
201: */
202: public float[] getColorComponents(float[] compArray) {
203: return getColor().getColorComponents(compArray);
204: }
205:
206: /**
207: * java.awt.Color. Forward the call to the delegate.
208: */
209: public float[] getComponents(ColorSpace cspace, float[] compArray) {
210: return getColor().getComponents(cspace, compArray);
211: }
212:
213: /**
214: * java.awt.Color. Forward the call to the delegate.
215: */
216: public float[] getColorComponents(ColorSpace cspace,
217: float[] compArray) {
218: return getColor().getColorComponents(cspace, compArray);
219: }
220:
221: /**
222: * java.awt.Color. Forward the call to the delegate.
223: */
224: public ColorSpace getColorSpace() {
225: return getColor().getColorSpace();
226: }
227:
228: /**
229: * java.awt.Color. Forward the call to the delegate.
230: */
231: public synchronized PaintContext createContext(ColorModel cm,
232: Rectangle r, Rectangle2D r2d, AffineTransform xform,
233: RenderingHints hints) {
234: return getColor().createContext(cm, r, r2d, xform, hints);
235: }
236:
237: /**
238: * java.awt.Color. Forward the call to the delegate.
239: */
240: public int getTransparency() {
241: return getColor().getTransparency();
242: }
243:
244: }
|