001 package com.croftsoft.core.animation.painter;
002
003 import java.awt.Color;
004 import java.awt.Graphics2D;
005 import java.awt.Shape;
006 import java.io.Serializable;
007 import javax.swing.JComponent;
008
009 import com.croftsoft.core.animation.ComponentPainter;
010
011 /*********************************************************************
012 * Fills an area of the JComponent with a Color.
013 *
014 * <p>
015 * Useful for setting the background Color of a Component. Note that
016 * if you are also using an opaque (non-transparent) background Image,
017 * using a background Color could be a waste of CPU cycles if it is
018 * completely covered by the background Image.
019 * </p>
020 *
021 * <p>
022 * Semi-transparent Colors may be useful for darkening or color
023 * tinting a scene.
024 * </p>
025 *
026 * @version
027 * 2003-08-05
028 * @since
029 * 2002-02-18
030 * @author
031 * <a href="https://www.croftsoft.com/">David Wallace Croft</a>
032 *********************************************************************/
033
034 public final class ColorPainter
035 implements ComponentPainter, Serializable
036 //////////////////////////////////////////////////////////////////////
037 //////////////////////////////////////////////////////////////////////
038 {
039
040 private static final long serialVersionUID = 0L;
041
042 //
043
044 private Color color;
045
046 private Shape shape;
047
048 //////////////////////////////////////////////////////////////////////
049 //////////////////////////////////////////////////////////////////////
050
051 /*********************************************************************
052 * Main constructor.
053 *
054 * @param color
055 *
056 * If null, the component background color will be used.
057 *
058 * @param shape
059 *
060 * If null, the entire component will be colored.
061 *********************************************************************/
062 public ColorPainter (
063 Color color,
064 Shape shape )
065 //////////////////////////////////////////////////////////////////////
066 {
067 this.color = color;
068
069 this.shape = shape;
070 }
071
072 public ColorPainter ( Color color )
073 //////////////////////////////////////////////////////////////////////
074 {
075 this.color = color;
076 }
077
078 public ColorPainter ( )
079 //////////////////////////////////////////////////////////////////////
080 {
081 }
082
083 //////////////////////////////////////////////////////////////////////
084 // accessor methods
085 //////////////////////////////////////////////////////////////////////
086
087 public Color getColor ( )
088 //////////////////////////////////////////////////////////////////////
089 {
090 return color;
091 }
092
093 public Shape getShape ( )
094 //////////////////////////////////////////////////////////////////////
095 {
096 return shape;
097 }
098
099 //////////////////////////////////////////////////////////////////////
100 // mutator methods
101 //////////////////////////////////////////////////////////////////////
102
103 public void setColor ( Color color )
104 //////////////////////////////////////////////////////////////////////
105 {
106 this.color = color;
107 }
108
109 public void setShape ( Shape shape )
110 //////////////////////////////////////////////////////////////////////
111 {
112 this.shape = shape;
113 }
114
115 //////////////////////////////////////////////////////////////////////
116 //////////////////////////////////////////////////////////////////////
117
118 public void paint (
119 JComponent component,
120 Graphics2D graphics )
121 //////////////////////////////////////////////////////////////////////
122 {
123 if ( color == null )
124 {
125 graphics.setColor ( component.getBackground ( ) );
126 }
127 else
128 {
129 graphics.setColor ( color );
130 }
131
132 if ( shape == null )
133 {
134 graphics.fillRect ( 0, 0, Integer.MAX_VALUE, Integer.MAX_VALUE );
135 }
136 else
137 {
138 // graphics.fill(Shape) does not like Integer.MAX_VALUE
139
140 graphics.fill ( shape );
141 }
142 }
143
144 //////////////////////////////////////////////////////////////////////
145 //////////////////////////////////////////////////////////////////////
146 }