/* * A Java program that demonstrates a simple general-purpose drawing architecture * * Ben Bederson, April 18, 2002 */ import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import javax.swing.*; public class Application extends JFrame { static public void main(String[] args) { new Application(); } public Application() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ApplicationCanvas canvas = new ApplicationCanvas(); canvas.setPreferredSize(new Dimension(600, 600)); getContentPane().add(canvas); pack(); setVisible(true); } } class ApplicationCanvas extends JComponent implements MouseListener, MouseMotionListener { static final int MODE_SELECTION = 1; Scene scene; int mode = MODE_SELECTION; public ApplicationCanvas() { scene = new Scene(this); RectGlyph rg; rg = new RectGlyph(scene, 10, 10, 50, 50); scene.addGlyph(rg); rg = new RectGlyph(scene, 50, 50, 80, 80); rg.setColor(Color.blue); scene.addGlyph(rg); rg = new RectGlyph(scene, 100, 00, 40, 40); rg.setColor(Color.red); rg.setTransform(AffineTransform.getRotateInstance(15.0 * Math.PI / 180.0)); scene.addGlyph(rg); addMouseListener(this); addMouseMotionListener(this); } public void paintComponent(Graphics graphics) { Graphics2D g2 = (Graphics2D) graphics; scene.paint(g2); } // General mouse event handlers. // These pass on events to each mode's event handlers public void mouseClicked(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mouseMoved(MouseEvent e) {} public void mousePressed(MouseEvent e) { switch (mode) { case MODE_SELECTION: mousePressedSelection(e); break; } } public void mouseDragged(MouseEvent e) { switch (mode) { case MODE_SELECTION: mouseDraggedSelection(e); break; } } public void mouseReleased(MouseEvent e) { switch (mode) { case MODE_SELECTION: mouseReleasedSelection(e); break; } } // Selection mouse event handlers public void mousePressedSelection(MouseEvent e) { Glyph glyph = scene.pick(e.getX(), e.getY()); if (glyph == null) { scene.unselectAll(); } else { if (e.isShiftDown()) { glyph.setSelected(!glyph.isSelected()); } else { if (!glyph.isSelected()) { scene.unselectAll(); glyph.setSelected(true); } } } } public void mouseDraggedSelection(MouseEvent e) { } public void mouseReleasedSelection(MouseEvent e) { } }