/*
* @(#)ColorSwatch.java
*
* $Date: 2014-06-06 20:04:49 +0200 (P, 06 jún. 2014) $
*
* Copyright (c) 2011 by Jeremy Wood.
* All rights reserved.
*
* The copyright of this software is owned by Jeremy Wood.
* You may not use, copy or modify this software, except in
* accordance with the license agreement you entered into with
* Jeremy Wood. For details see accompanying license terms.
*
* This software is probably, but not necessarily, discussed here:
* https://javagraphics.java.net/
*
* That site should also contain the most recent official version
* of this software. (See the SVN repository for more details.)
*/
package com.bric.swing;
import com.bric.blog.ResourceSample;
import com.bric.plaf.PlafPaintUtils;
import javax.swing.*;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.TexturePaint;
import java.awt.image.BufferedImage;
/** This is a square, opaque panel used to indicate
* a certain color.
* <P>The color is assigned with the <code>setForeground()</code> method.
* <P>Also the user can right-click this panel and select 'Copy' to send
* a 100x100 image of this color to the clipboard. (This feature was
* added at the request of a friend who paints; she wanted to select a
* color and then quickly print it off, and then mix her paints to match
* that shade.)
*
*
* <!-- ======== START OF AUTOGENERATED SAMPLES ======== -->
* <p><img src="https://javagraphics.java.net/resources/samples/ColorSwatch/sample.png" alt="new com.bric.swing.ColorSwatch( java.awt.Color.blue, 50 )">
* <!-- ======== END OF AUTOGENERATED SAMPLES ======== -->
*/
@ResourceSample( sample = "new com.bric.swing.ColorSwatch( java.awt.Color.blue, 50 )")
public class ColorSwatch extends JPanel {
private static final long serialVersionUID = 1L;
JPopupMenu menu;
JMenuItem copyItem;
// Laszlo: Commented out - would only confuse Pixelitor users
// MouseListener mouseListener = new MouseAdapter() {
// @Override
// public void mousePressed(MouseEvent e) {
// checkPopup(e);
// }
//
// public void checkPopup(MouseEvent e) {
// if(e.isPopupTrigger()) {
// if(menu==null) {
// menu = new JPopupMenu();
// copyItem = new JMenuItem(ColorPicker.strings.getObject("Copy").toString());
// menu.add(copyItem);
// copyItem.addActionListener(actionListener);
// }
// menu.show(ColorSwatch.this,e.getX(),e.getY());
// }
// }
//
// @Override
// public void mouseReleased(MouseEvent e) {
// checkPopup(e);
// }
// };
// ActionListener actionListener = new ActionListener() {
// public void actionPerformed(ActionEvent e) {
// Object src = e.getSource();
// if(src==copyItem) {
// BufferedImage image = new BufferedImage(100,100,BufferedImage.TYPE_INT_RGB);
// Graphics2D g = image.createGraphics();
// g.setColor(getBackground());
// g.fillRect(0, 0, image.getWidth(), image.getHeight());
// g.dispose();
// Transferable contents = new ImageTransferable(image);
// Toolkit.getDefaultToolkit().getSystemClipboard().setContents(contents, null);
// }
// }
// };
int w;
public ColorSwatch(int width) {
w = width;
setPreferredSize(new Dimension(width,width));
setMinimumSize(new Dimension(width,width));
// addMouseListener(mouseListener);
}
public ColorSwatch(Color color,int width) {
this(width);
setForeground(color);
}
private static TexturePaint checkerPaint = null;
private static TexturePaint getCheckerPaint() {
if(checkerPaint==null) {
int t = 8;
BufferedImage bi = new BufferedImage(t*2,t*2,BufferedImage.TYPE_INT_RGB);
Graphics g = bi.createGraphics();
g.setColor(Color.white);
g.fillRect(0,0,2*t,2*t);
g.setColor(Color.lightGray);
g.fillRect(0,0,t,t);
g.fillRect(t,t,t,t);
checkerPaint = new TexturePaint(bi,new Rectangle(0,0,bi.getWidth(),bi.getHeight()));
}
return checkerPaint;
}
@Override
public void paint(Graphics g0) {
super.paint(g0); //may be necessary for some look-and-feels?
Graphics2D g = (Graphics2D)g0;
Color c = getForeground();
int w2 = Math.min(getWidth(), w);
int h2 = Math.min(getHeight(), w);
Rectangle r = new Rectangle(getWidth()/2-w2/2,getHeight()/2-h2/2, w2, h2);
if(c.getAlpha()<255) {
TexturePaint checkers = getCheckerPaint();
g.setPaint(checkers);
g.fillRect(r.x, r.y, r.width, r.height);
}
g.setColor(c);
g.fillRect(r.x, r.y, r.width, r.height);
PlafPaintUtils.drawBevel(g, r);
}
}