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.effects;
031:
032: import java.awt.Graphics2D;
033: import java.awt.image.BufferedImage;
034: import java.io.IOException;
035:
036: import com.jeta.forms.gui.beans.JETABean;
037: import com.jeta.forms.gui.effects.Paintable;
038: import com.jeta.forms.gui.effects.Painter;
039: import com.jeta.forms.gui.effects.TexturePainter;
040: import com.jeta.forms.store.JETAObjectInput;
041: import com.jeta.forms.store.JETAObjectOutput;
042: import com.jeta.forms.store.properties.IconProperty;
043: import com.jeta.forms.store.properties.JETAProperty;
044: import com.jeta.open.i18n.I18N;
045:
046: /**
047: * Property for storing settings for a texture fill effect. A texture is an
048: * image that is repeated to fill a background. See:
049: * {@link com.jeta.forms.gui.effects.TexturePainter}
050: *
051: * @author Jeff Tassin
052: */
053: public class TextureProperty extends JETAProperty implements
054: PaintSupport {
055: static final long serialVersionUID = 6397209471447777696L;
056:
057: /**
058: * The version for this class
059: */
060: public static final int VERSION = 1;
061:
062: /**
063: * The icon for our texture
064: */
065: private IconProperty m_icon;
066:
067: /**
068: * A buffered image that contains the icon
069: */
070: private transient BufferedImage m_buffered_image;
071:
072: /**
073: * A cached painter
074: */
075: private transient TexturePainter m_painter;
076:
077: /**
078: * Creates an uninitialized <code>TextureProperty</code> instance.
079: */
080: public TextureProperty() {
081:
082: }
083:
084: /**
085: * PaintSupport implementation. Creates a TexturePainter that renders a
086: * textured background.
087: */
088: public Painter createPainter() {
089: if (m_painter == null)
090: m_painter = new TexturePainter(this );
091:
092: return m_painter;
093: }
094:
095: /**
096: * Returns a buffered image of the icon associated with this texture.
097: *
098: * @return a bufferedimage of this property's icon.
099: */
100: public BufferedImage getBufferedImage() {
101: if (m_buffered_image == null && m_icon != null) {
102: int width = m_icon.getIconWidth();
103: int height = m_icon.getIconHeight();
104: m_buffered_image = new BufferedImage(width, height,
105: BufferedImage.TYPE_INT_RGB);
106: Graphics2D bg = m_buffered_image.createGraphics();
107: bg.drawImage(m_icon.imageIcon().getImage(), 0, 0, bg
108: .getColor(), null);
109: bg.dispose();
110: }
111: return m_buffered_image;
112: }
113:
114: /**
115: * Returns the icon that is the basis for this texture.
116: *
117: * @return the icon that is the basis for this texture
118: */
119: public IconProperty getIconProperty() {
120: return m_icon;
121: }
122:
123: /**
124: * Sets the icon that is the basis for this texture.
125: *
126: * @param icon
127: * the icon
128: */
129: public void setIconProperty(IconProperty icon) {
130: m_icon = icon;
131: m_buffered_image = null;
132: m_painter = null;
133: }
134:
135: /**
136: * Sets this property to that of another TextureProperty.
137: *
138: * @param prop
139: * a TextureProperty object
140: */
141: public void setValue(Object prop) {
142: if (prop instanceof TextureProperty) {
143: TextureProperty tp = (TextureProperty) prop;
144: m_icon = tp.m_icon;
145: m_painter = null;
146: } else {
147: assert (false);
148: }
149: }
150:
151: /**
152: * Updates the bean. Gets the underlying Java bean component associated with
153: * this property and if that component implements the Paintable interface,
154: * sets the background painter.
155: */
156: public void updateBean(JETABean jbean) {
157: TexturePainter painter = (TexturePainter) createPainter();
158: if (jbean != null) {
159: java.awt.Component comp = jbean.getDelegate();
160: if (comp instanceof Paintable) {
161: ((Paintable) comp).setBackgroundPainter(painter);
162: }
163: }
164: }
165:
166: /**
167: * @return a string representation of this proprety
168: */
169: public String toString() {
170: return I18N.getLocalizedMessage("Texture");
171: }
172:
173: /**
174: * JETAPersistable Implementation
175: */
176: public void read(JETAObjectInput in) throws ClassNotFoundException,
177: IOException {
178: super .read(in.getSuperClassInput());
179: int version = in.readVersion();
180: m_icon = (IconProperty) in.readObject("icon");
181: }
182:
183: /**
184: * Externalizable Implementation
185: */
186: public void write(JETAObjectOutput out) throws IOException {
187: super .write(out.getSuperClassOutput(JETAProperty.class));
188: out.writeVersion(VERSION);
189: out.writeObject("icon", m_icon);
190: }
191:
192: }
|