package open.dolphin.impl.schema;
import java.awt.*;
import java.awt.geom.Line2D;
import java.awt.geom.Rectangle2D;
/**
*
* @author Minagawa, Kazushi
*/
public class Line2DHolder implements DrawingHolder {
private final Line2D.Double line2D;
private final Stroke stroke;
private final Paint paint;
private final AlphaComposite ac;
private boolean p1;
private boolean p2;
public Line2DHolder(Line2D.Double line2D, Stroke stroke, Paint paint, AlphaComposite ac) {
this.line2D = line2D;
this.stroke = stroke;
this.paint = paint;
this.ac = ac;
}
@Override
public boolean contains(Point p) {
p1 = false;
p2 = false;
Rectangle2D r = getRectangle2D(p);
if (isAtP1(r)) {
p1 = true;
return true;
}
if (isAtP2(r)) {
p2 = true;
return true;
}
return line2D.intersects(r);
}
@Override
public void draw(Graphics2D g2d) {
Stroke saveStroke = g2d.getStroke();
Paint savePaint = g2d.getPaint();
Composite saveComposite = g2d.getComposite();
g2d.setStroke(stroke);
g2d.setPaint(paint);
g2d.setComposite(ac);
g2d.draw(line2D);
g2d.setStroke(saveStroke);
g2d.setPaint(savePaint);
g2d.setComposite(saveComposite);
}
@Override
public void translate(double x, double y) {
double x1 = line2D.getX1();
double y1 = line2D.getY1();
double x2 = line2D.getX2();
double y2 = line2D.getY2();
if (p1) {
x1 = line2D.getX1() + x;
y1 = line2D.getY1() + y;
} else if (p2) {
x2 = line2D.getX2() + x;
y2 = line2D.getY2() + y;
} else {
x1 = line2D.getX1() + x;
y1 = line2D.getY1() + y;
x2 = line2D.getX2() + x;
y2 = line2D.getY2() + y;
}
line2D.setLine(x1, y1, x2, y2);
}
private boolean isAtP1(Rectangle2D r) {
return r.contains(line2D.getP1());
}
private boolean isAtP2(Rectangle2D r) {
return r.contains(line2D.getP2());
}
private Rectangle2D getRectangle2D(Point p) {
Rectangle2D r = new Rectangle2D.Double();
r.setFrameFromDiagonal(p.getX() - 3,p.getY() -3, p.getX() +3, p.getY() + 3);
return r;
}
}