package jmsltestsuite; import java.awt.Frame; import java.awt.Graphics; import java.awt.Image; import java.awt.Point; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.Vector; import com.softsynth.jmsl.score.Score; import com.softsynth.jmsl.score.ScoreCanvas; import com.softsynth.jmsl.score.ScoreCanvasListener; /** * Use the new scoreCanvasDragged() callback in ScoreCanvasListener to draw onto a Score with the * mouse. Hold the ALT key down and drag the mouse around. * * @author Nick Didkovsky (c) 2006 All Rights reserved * */ public class DrawWithMouseOnScore { public static void main(String[] args) { Score score = new Score(2, 800, 400); score.addMeasure(); Frame sf = new Frame("Hold the ALT key down and drag the mouse around. N Didkovsky 12/06"); sf.add(score.getScoreCanvas().getComponent()); sf.pack(); sf.setVisible(true); sf.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); score.getScoreCanvas().addScoreCanvasListener(new ScoreCanvasListener() { boolean dragging = false; Vector pointsToDraw = new Vector(); public void scoreCanvasClicked(ScoreCanvas canvas, Point p, MouseEvent e) { System.out.println("canvas clicked at " + e); } public void scoreCanvasRectangleSelected(ScoreCanvas canvas, Point p1, Point p2) { System.out.println("score rectangle selected " + p1 + ", " + p2); } public void scoreCanvasReady(ScoreCanvas canvas) { // TODO Auto-generated method stub } public void scoreCanvasKeyTyped(ScoreCanvas canvas, KeyEvent keyEvent) { System.out.println("keyTyped" + keyEvent); } public void scoreCanvasKeyReleased(ScoreCanvas canvas, KeyEvent keyEvent) { // TODO Auto-generated method stub } public void scoreCanvasDisplayedImageReady(Score score, ScoreCanvas canvas, Image displayedImage) { System.out.println("scoreCanvasDisplayedIMageReady"); Graphics g = displayedImage.getGraphics(); if (dragging && pointsToDraw != null) { for (int i = 0; i < pointsToDraw.size() - 1; i++) { Point p1 = (Point) pointsToDraw.elementAt(i); Point p2 = (Point) pointsToDraw.elementAt(i + 1); g.drawLine(p1.x, p1.y, p2.x, p2.y); } } } public void scoreCanvasDragged(ScoreCanvas canvas, Point p, MouseEvent e) { System.out.println("Score canvas dragged " + e + ", " + p); if ((e.getModifiers() & InputEvent.ALT_MASK) != 0) { dragging = true; pointsToDraw.addElement(new Point(p)); } } public void scoreCanvasReleased(ScoreCanvas canvas, Point p, MouseEvent e) { System.out.println("Score canvas released " + e + ", " + p); dragging = false; } public void scoreCanvasPressed(ScoreCanvas canvas, Point p, MouseEvent e) { System.out.println("Mouse pressed"); pointsToDraw.removeAllElements(); } }); score.getScoreCanvas().addKeyListener(new KeyListener() { public void keyTyped(KeyEvent arg0) { System.out.println("keyTyped" + arg0); } public void keyPressed(KeyEvent arg0) { System.out.println("keyPressed" + arg0); } public void keyReleased(KeyEvent arg0) { System.out.println("keyReleased" + arg0); } }); } }