package io.github.jgkamat.ViPaint.Tools.KeyModeTools; import javafx.scene.canvas.GraphicsContext; import javafx.scene.input.KeyCode; /** * A simple class that draws ovals * * @author Jay Kamat * @version 1.0 */ public class Oval implements KeyModeTool { private double startx, starty; @Override public void onEnterMode(Cursor c, KeyToolEvent e, GraphicsContext g) { if(e.isLowercase()) { startx = c.getCenterX(); starty = c.getCenterY(); } else { startx = c.getX(); starty = c.getY(); } g.setLineWidth(c.getStroke()); } @Override public void onMoveInMode(Cursor c, KeyToolEvent e, GraphicsContext g) { if(e.isLowercase()) { g.strokeOval(Math.min(startx, c.getCenterX()), Math.min(starty, c.getCenterY()), Math.abs(startx - c.getCenterX()), Math.abs(starty - c.getCenterY())); } else { g.fillOval(Math.min(startx, c.getX()), Math.min(starty, c.getY()), Math.max(startx + c.getWidth() - c.getX(), c.getX() + c.getWidth() - startx), Math.max(starty + c.getHeight() - c.getY(), c.getY() + c.getHeight() - starty)); } } @Override public void onExitMode(Cursor c, KeyToolEvent e, GraphicsContext g) { onMoveInMode(c, e, g); } @Override public KeyCode getDefaultKey() { return KeyCode.O; } @Override public String getName() { return "Oval"; } @Override public boolean hasPreview() { return true; } @Override public String getHelp() { return "The Oval tool is used to draw filled and sketched Ovals.\n\n" + "Press O for a filled oval, and o for a hollow one.\n" + " Then move around" + "with h,j,k, and l, and press <ESC> to complete the drawing."; } }