/*
* ColorSwatch.java
* 2007-03-03
*/
//cb.aloe.decor;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import javax.swing.Icon;
/**
* An icon for painting a square swatch of a specified Color.
*
* @author Christopher Bach
*/
public class ColorSwatch implements Icon {
private Color ourSwatchColor = Color.white;
private Color ourBorderColor = Color.black;
private boolean ourBorderPainted = true;
private boolean ourSwatchIsMultiColor = false;
private boolean ourSwatchIsVoid = false;
private int ourSwatchSize = 14;
/**
* Creates a standard 14 x 14 swatch with a black border and white background.
*/
public ColorSwatch() {
}
/**
* Creates a swatch of the specified size with a black border and white
* background.
*/
public ColorSwatch(int size) {
setSwatchSize(size);
}
/**
* Creates a swatch of the specified size with a black border and white
* background and determines whether or n not the border should be painted.
*/
public ColorSwatch(int size, boolean borderPainted) {
setSwatchSize(size);
setBorderPainted(borderPainted);
}
/**
*
*/
public ColorSwatch(Color color) {
setColor(color);
}
/**
*
*/
public ColorSwatch(int size, Color color) {
setSwatchSize(size);
setColor(color);
}
/**
*
*/
public ColorSwatch(int size, Color color, Color borderColor) {
setSwatchSize(size);
setColor(color);
setBorderColor(borderColor);
setBorderPainted(true);
}
/**
* Sets the size of this swatch.
*/
public void setSwatchSize(int size) {
if (size > 0)
ourSwatchSize = size;
else
ourSwatchSize = 14;
}
/**
* Returns the size of this swatch.
*/
public int getSwatchSize() {
return ourSwatchSize;
}
/**
* Determines whether or not this swatch's border should be painted.
*/
public void setBorderPainted(boolean borderPainted) {
ourBorderPainted = borderPainted;
}
/**
* Returns whether or not this swatch's border is painted.
*/
public boolean isBorderPainted() {
return ourBorderPainted;
}
/**
* Sets the color of this swatch's border.
*/
public void setBorderColor(Color color) {
ourBorderColor = color;
}
/**
* Returns the color of this swatch's border.
*/
public Color getBorderColor() {
return ourBorderColor;
}
/**
* Sets the color that this swatch represents.
*/
public void setColor(Color color) {
ourSwatchIsMultiColor = false;
ourSwatchColor = color;
}
/**
* Returns the color that this swatch represents.
*/
public Color getColor() {
return ourSwatchColor;
}
/**
* Sets this swatch to represent more than one color.
*/
public void setMultiColor() {
ourSwatchIsMultiColor = true;
}
/**
* Returns whether or not this swatch represents more than one color.
*/
public boolean isMultiColor() {
return ourSwatchIsMultiColor;
}
/**
* Determines whether or not this swatch is void. If the swatch is void, it
* will not be painted at all.
*/
public void setVoid(boolean isVoid) {
// When true, this icon will not be painted at all.
ourSwatchIsVoid = isVoid;
}
/**
* Returns whether this swatch is void. If the swatch is void, it will not be
* painted at all.
*/
public boolean isVoid() {
return ourSwatchIsVoid;
}
// // Icon implementation ////
/**
* Returns the width of this Icon.
*/
public int getIconWidth() {
return ourSwatchSize;
}
/**
* Returns the height of this Icon.
*/
public int getIconHeight() {
return ourSwatchSize;
}
/**
* Paints this Icon into the provided graphics context.
*/
public void paintIcon(Component c, Graphics g, int x, int y) {
if (ourSwatchIsVoid)
return;
Color oldColor = g.getColor();
if (ourSwatchIsMultiColor) {
g.setColor(Color.white);
g.fillRect(x, y, ourSwatchSize, ourSwatchSize);
g.setColor(ourBorderColor);
for (int i = 0; i < ourSwatchSize; i += 2) {
g.drawLine(x + i, y, x + i, y + ourSwatchSize);
}
}
else if (ourSwatchColor != null) {
g.setColor(ourSwatchColor);
g.fillRect(x, y, ourSwatchSize, ourSwatchSize);
}
else {
g.setColor(Color.white);
g.fillRect(x, y, ourSwatchSize, ourSwatchSize);
g.setColor(ourBorderColor);
g.drawLine(x, y, x + ourSwatchSize, y + ourSwatchSize);
g.drawLine(x, y + ourSwatchSize, x + ourSwatchSize, y);
}
if (ourBorderPainted) {
g.setColor(ourBorderColor);
g.drawRect(x, y, ourSwatchSize, ourSwatchSize);
}
g.setColor(oldColor);
}
}