package com.kreative.paint.tool; import java.awt.Cursor; import java.awt.Graphics2D; import com.kreative.paint.document.draw.ShadowSettings; import com.kreative.paint.document.draw.ShapeDrawObject; public abstract class SimpleShapeTool extends AbstractPaintDrawTool implements ToolOptions.DrawSquare, ToolOptions.DrawFromCenter, ToolOptions.DrawMultiple, ToolOptions.QuickShadow { private static final Cursor curs = Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR); protected abstract ShapeDrawObject makeShape(ToolEvent e, float x1, float y1, float x2, float y2); private ShapeDrawObject makeShape1(ToolEvent e) { float sx = e.getPreviousClickedX(); float sy = e.getPreviousClickedY(); float x = e.getX(); float y = e.getY(); if (e.isShiftDown() != e.tc().drawSquare()) { float w = Math.abs(x-sx); float h = Math.abs(y-sy); float s = Math.max(w, h); if (y > sy) y = sy+s; else y = sy-s; if (x > sx) x = sx+s; else x = sx-s; } if (e.isAltDown() != e.tc().drawFromCenter()) { sx -= (x-sx); sy -= (y-sy); } return makeShape(e, sx, sy, x, y); } private ShapeDrawObject makeObject(ToolEvent e) { ShapeDrawObject sh = makeShape1(e); if (e.tc().useShadow()) { sh.setShadowSettings(new ShadowSettings( e.tc().getShadowType(), e.tc().getShadowOpacity(), e.tc().getShadowXOffset(), e.tc().getShadowYOffset() )); } return sh; } public boolean mousePressed(ToolEvent e) { e.beginTransaction(getName()); if (e.isCtrlDown() != e.tc().drawMultiple()) { ShapeDrawObject wsh = makeObject(e); if (e.isInDrawMode()) e.getDrawSurface().add(wsh); else wsh.paint(e.getPaintGraphics()); return true; } else return false; } public boolean mouseDragged(ToolEvent e) { if (e.isCtrlDown() != e.tc().drawMultiple()) { ShapeDrawObject wsh = makeObject(e); if (e.isInDrawMode()) e.getDrawSurface().add(wsh); else wsh.paint(e.getPaintGraphics()); return true; } else return false; } public boolean mouseReleased(ToolEvent e) { ShapeDrawObject wsh = makeObject(e); if (e.isInDrawMode()) e.getDrawSurface().add(wsh); else wsh.paint(e.getPaintGraphics()); e.commitTransaction(); return true; } public boolean keyPressed(ToolEvent e) { if (e.isMouseDown() && e.isCtrlDown() != e.tc().drawMultiple()) { ShapeDrawObject wsh = makeObject(e); if (e.isInDrawMode()) e.getDrawSurface().add(wsh); else wsh.paint(e.getPaintGraphics()); return true; } else return false; } public boolean keyReleased(ToolEvent e) { if (e.isMouseDown() && e.isCtrlDown() != e.tc().drawMultiple()) { ShapeDrawObject wsh = makeObject(e); if (e.isInDrawMode()) e.getDrawSurface().add(wsh); else wsh.paint(e.getPaintGraphics()); return true; } else return false; } public boolean paintIntermediate(ToolEvent e, Graphics2D g) { if (e.isMouseDown()) { ShapeDrawObject wsh = makeObject(e); wsh.paint(g); return true; } else return false; } public boolean doubleClickForOptions() { return true; } public Cursor getCursor(ToolEvent e) { return curs; } }