package open.dolphin.impl.scheam.schemastate; import java.awt.*; import java.awt.event.MouseEvent; import java.awt.geom.Area; import java.awt.geom.Ellipse2D; import java.awt.geom.GeneralPath; import open.dolphin.impl.scheam.SchemaEditorImpl; import open.dolphin.impl.scheam.holder.AreaHolder; import open.dolphin.impl.scheam.holder.PathHolder; /** * * @author pns */ public class EraserState extends AbstractState { private GeneralPath gpath; private final Stroke eraserStroke = properties.getEraserStroke(); public EraserState(SchemaEditorImpl context) { super(context); } @Override public void mouseDown(Point p) { start = p; end = null; first = true; gpath = null; } @Override public void mouseDragged(Point p) { end = p; if (first) { gpath = new GeneralPath(); gpath.moveTo(start.x, start.y); gpath.lineTo(end.x, end.y); first = false; } else { gpath.lineTo(end.x, end.y); } canvas.repaint(); start = end; } @Override public void mouseUp(Point p) { undoMgr.storeDraw(); end = p; // ドラッグした場合 if (gpath != null) { PathHolder sh = new PathHolder(new GeneralPath(gpath), eraserStroke, Color.WHITE, AlphaComposite.SrcOver); addShape(sh); gpath = null; } } @Override public void mouseClicked(MouseEvent e) { // クリックの場合 Ellipse2D whiteSpot = new Ellipse2D.Double(); whiteSpot.setFrameFromCenter(start.x, start.y, start.x+8.0f, start.y+8.0f); AreaHolder sh = new AreaHolder(new Area(whiteSpot), eraserStroke, Color.WHITE, AlphaComposite.SrcOver, true); addShape(sh); canvas.repaint(); } @Override public void draw(Graphics2D g2d) { if (gpath == null) return; g2d.setStroke(eraserStroke); g2d.setComposite(AlphaComposite.SrcOver); g2d.setPaint(Color.WHITE); g2d.draw(gpath); } }