package open.dolphin.impl.scheam.schemastate; import java.awt.Graphics2D; import java.awt.Point; import java.awt.Stroke; import java.awt.geom.GeneralPath; import open.dolphin.impl.scheam.SchemaEditorImpl; /** * * @author pns */ public class PolygonState extends AbstractState { private final Stroke outlineStroke = properties.getOutlineStroke(); public PolygonState(SchemaEditorImpl context) { super(context); } @Override public void mouseDown(Point p) { start = p; end = null; first = true; shape = new GeneralPath(); } @Override public void mouseDragged(Point p) { end = p; if (first) { ((GeneralPath)shape).moveTo(start.x, start.y); ((GeneralPath)shape).lineTo(end.x, end.y); first = false; } else { ((GeneralPath)shape).lineTo(end.x, end.y); } canvas.repaint(); start = end; } @Override public void mouseUp(Point p) { if (shape.getBounds().width != 0 && shape.getBounds().height != 0) { undoMgr.storeDraw(); ((GeneralPath)shape).closePath(); addAreaShape((GeneralPath)shape); } // null にしておかないと undo の時などに描画されてしまう shape = null; canvas.repaint(); } /** * polygon の時は,途中経過も線の方がわかりやすい * @param g2d */ @Override public void draw(Graphics2D g2d) { if (shape != null) { if (properties.isFill()) g2d.setStroke(outlineStroke); g2d.draw(shape); } } }