import objectdraw.*; import java.awt.*; /** * Draws broccoli recursively. */ public class BroccoliEvents extends FrameWindowController { private static final int WINDOW_SIZE = 600; // coordinates for start of broccoli (base point) // and length of the first (longest) stem private static final Location BOTTOM_BROCCOLI_STEM = new Location(300, 500); private static final double STEM_LENGTH = 100; // Broccoli object to be drawn and moved private Broccoli veggie; // whether broccoli was pressed private boolean broccoliPressed; // Where mouse was before last mouse event private Location lastLocation; // create the broccoli public void begin() { resize(WINDOW_SIZE, WINDOW_SIZE); veggie = new Broccoli(BOTTOM_BROCCOLI_STEM, STEM_LENGTH, Math.PI / 2.0, canvas); broccoliPressed = false; } // Get ready to move broccoli public void onMousePress(Location point) { if (veggie.contains(point)) { broccoliPressed = true; lastLocation = point; } } // Get ready to move broccoli public void onMouseRelease(Location point) { broccoliPressed = false; } // Drag the broccoli around public void onMouseDrag(Location point) { if (broccoliPressed) { veggie.move(point.getX() - lastLocation.getX(), point.getY() - lastLocation.getY()); lastLocation = point; } } }