package com.kreative.paint.tool;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.geom.Point2D;
import java.awt.image.BufferedImage;
import com.kreative.paint.Canvas;
import com.kreative.paint.Layer;
import com.kreative.paint.PaintContext;
import com.kreative.paint.document.draw.DrawObject;
import com.kreative.paint.util.CursorUtils;
public class EyedropperTool extends AbstractPaintDrawTool {
private static final int K = 0xFF000000;
private static final Image icon = ToolUtilities.makeIcon(
16, 16,
new int[] {
0,0,0,0,0,0,0,0,0,0,0,0,K,K,K,0,
0,0,0,0,0,0,0,0,0,0,0,K,K,K,K,K,
0,0,0,0,0,0,0,0,0,0,0,K,K,K,K,K,
0,0,0,0,0,0,0,0,K,K,K,K,K,K,K,K,
0,0,0,0,0,0,0,0,0,K,K,K,K,K,K,0,
0,0,0,0,0,0,0,0,K,0,K,K,K,0,0,0,
0,0,0,0,0,0,0,K,0,0,0,K,K,0,0,0,
0,0,0,0,0,0,K,0,0,0,K,0,K,0,0,0,
0,0,0,0,0,K,0,0,0,K,0,0,0,0,0,0,
0,0,0,0,K,0,0,0,K,0,0,0,0,0,0,0,
0,0,0,K,0,0,0,K,0,0,0,0,0,0,0,0,
0,0,K,0,0,0,K,0,0,0,0,0,0,0,0,0,
0,K,0,0,0,K,0,0,0,0,0,0,0,0,0,0,
0,K,0,0,K,0,0,0,0,0,0,0,0,0,0,0,
K,0,K,K,0,0,0,0,0,0,0,0,0,0,0,0,
0,K,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
}
);
public ToolCategory getCategory() {
return ToolCategory.PAINT;
}
protected Image getBWIcon() {
return icon;
}
public boolean mousePressed(ToolEvent e) {
if (e.isInDrawMode()) {
Canvas c = e.getCanvas();
PaintContext pc = e.getPaintContext();
for (int i = c.size()-1; i >= 0; i--) {
Layer layer = c.get(i);
if (layer.isViewable()) {
Point2D.Float lp = new Point2D.Float(e.getCanvasX()-layer.getX(), e.getCanvasY()-layer.getY());
for (int j = layer.size()-1; j >= 0; j--) {
DrawObject obj = layer.get(j);
if (obj.contains(lp)) {
if (e.isAltDown()) {
if (e.isShiftDown()) {
pc.setDrawComposite(obj.getPaintSettings().drawComposite);
pc.setDrawPaint(obj.getPaintSettings().drawPaint);
pc.setFillComposite(obj.getPaintSettings().fillComposite);
pc.setFillPaint(obj.getPaintSettings().fillPaint);
pc.setStroke(obj.getPaintSettings().drawStroke);
} else {
pc.setDrawComposite(obj.getPaintSettings().drawComposite);
pc.setDrawPaint(obj.getPaintSettings().drawPaint);
pc.setStroke(obj.getPaintSettings().drawStroke);
}
} else {
pc.setFillComposite(obj.getPaintSettings().fillComposite);
pc.setFillPaint(obj.getPaintSettings().fillPaint);
}
return false;
}
}
}
}
return false;
} else {
BufferedImage tmp = new BufferedImage(8, 8, BufferedImage.TYPE_INT_ARGB);
Graphics2D tg = tmp.createGraphics();
e.getCanvas().paint(tg, -(int)Math.floor(e.getCanvasX()), -(int)Math.floor(e.getCanvasY()));
tg.dispose();
PaintContext pc = e.getPaintContext();
if (e.isAltDown()) {
if (e.isShiftDown()) {
pc.setDrawComposite(AlphaComposite.SrcOver);
pc.setDrawPaint(new Color(tmp.getRGB(0, 0), true));
pc.setFillComposite(AlphaComposite.SrcOver);
pc.setFillPaint(new Color(tmp.getRGB(0, 0), true));
} else {
pc.setDrawComposite(AlphaComposite.SrcOver);
pc.setDrawPaint(new Color(tmp.getRGB(0, 0), true));
}
} else {
pc.setFillComposite(AlphaComposite.SrcOver);
pc.setFillPaint(new Color(tmp.getRGB(0, 0), true));
}
return false;
}
}
public boolean mouseDragged(ToolEvent e) {
return mousePressed(e);
}
public boolean mouseReleased(ToolEvent e) {
return mousePressed(e);
}
public Cursor getCursor(ToolEvent e) {
return CursorUtils.CURSOR_DROPPER;
}
}