/*
Copyright 2006 Eric Hakenholz
This file is part of C.a.R. software.
C.a.R. is a free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, version 3 of the License.
C.a.R. is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
package eric;
import eric.GUI.palette.JIcon;
import java.awt.AlphaComposite;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Stroke;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.util.Vector;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComponent;
import eric.JEricPanel;
import net.java.dev.colorchooser.ColorChooser;
import net.java.dev.colorchooser.Palette;
/**
*
* @author erichake
*/
public class JColorPicker extends JButton {
/**
*
*/
ColorChooser CC=null;
int D, IN, STRK;
public static Color DefaultC=Color.GRAY;
Color CurrentC=DefaultC;
boolean isSelected=false, isEntered=false, isDisabled=false;
Vector group;
int[] x={0, 10, 0};
int[] y={0, 10, 10};
@Override
public void paintComponent(final java.awt.Graphics g) {
final Graphics2D g2=(Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2.setRenderingHint(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BICUBIC);
g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL,
RenderingHints.VALUE_STROKE_PURE);
AlphaComposite ac;
if (isDisabled) {
ac=AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.2f);
g2.setComposite(ac);
g2.setColor(new Color(100, 100, 100));
g2.fillRect(IN, IN, D-2*IN, D-2*IN);
return;
}
if (isSelected) {
ac=AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.2f);
g2.setComposite(ac);
g2.setColor(new Color(0, 0, 100));
g2.fillRect(0, 0, D, D);
}
if (isEntered) {
ac=AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.1f);
g2.setComposite(ac);
g2.setColor(new Color(0, 0, 80));
final Stroke stroke=new BasicStroke(3f);
g2.setStroke(stroke);
g2.drawRect(2, 2, D-4, D-4);
}
g2.setColor(CurrentC);
g2.setComposite(AlphaComposite.Src);
g2.setStroke(new BasicStroke(STRK, BasicStroke.CAP_SQUARE, 0));
g2.clearRect(IN, IN, D-2*IN, D-2*IN);
ac=AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.4f);
g2.setComposite(ac);
g2.fillRect(IN, IN, D-2*IN, D-2*IN);
g2.setComposite(AlphaComposite.Src);
g2.drawRect(IN, IN, D-2*IN, D-2*IN);
final int sze=6;
x[0]=D-sze;
y[0]=D;
x[1]=D;
y[1]=D-sze;
x[2]=D;
y[2]=D;
g2.setComposite(AlphaComposite.SrcOver);
g2.setColor(new Color(50, 50, 50));
g2.fillPolygon(x, y, 3);
}
public JColorPicker(final int d, final int inset, final int stroke,
final Vector mygroup) {
super();
group=mygroup;
if (group!=null) {
group.add(this);
}
D=d;
IN=inset;
STRK=stroke;
setLayout(new javax.swing.BoxLayout(this, javax.swing.BoxLayout.X_AXIS));
fixsize(this, d, d);
setBorder(BorderFactory.createEmptyBorder());
setContentAreaFilled(false);
setFocusable(false);
CC=new ColorChooser() {
/**
*
*/
@Override
public void paintComponent(final java.awt.Graphics g) {
}
};
CC.setBorder(BorderFactory.createEmptyBorder());
CC.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent arg0) {
final Color mc=CC.getColor();
CurrentC=new Color(mc.getRed(), mc.getGreen(), mc.getBlue());
doChange();
}
});
CC.addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseDragged(final MouseEvent e) {
final Color mc=CC.getTransientColor();
if (mc!=null) {
CurrentC=new Color(mc.getRed(), mc.getGreen(), mc.getBlue());
doChange();
}
}
});
CC.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(final MouseEvent arg0) {
}
@Override
public void mousePressed(final MouseEvent arg0) {
Select();
afterSelect();
}
@Override
public void mouseEntered(final MouseEvent arg0) {
setPalettes();
isEntered=true;
repaint();
}
@Override
public void mouseExited(final MouseEvent arg0) {
isEntered=false;
repaint();
}
});
CC.setToolTipText("");
this.add(CC);
}
public void setDisabled(final boolean b) {
isDisabled=b;
if (b) {
this.remove(CC);
} else {
this.add(CC);
}
}
@Override
public String getName() {
return "scolor";
}
public void setPalettes() {
}
public void setUsedColors(final Vector V) {
Color[] cols;
String[] strs;
if (V.size()==0) {
cols=new Color[1];
strs=new String[1];
cols[0]=Color.WHITE;
strs[0]="";
} else {
cols=new Color[V.size()];
strs=new String[V.size()];
for (int i=0; i