package jmsltestsuite; import java.awt.*; import java.awt.event.*; import java.util.Vector; import javax.swing.JFrame; import com.didkovsky.portview.swing.ViewFactorySwing; import com.softsynth.jmsl.JMSL; import com.softsynth.jmsl.score.*; /** * 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) { JMSL.setViewFactory(new ViewFactorySwing()); Score score = new Score(2, 800, 400); score.addMeasure(); JFrame sf = new JFrame("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"); // nice antialiasing for drawing Graphics2D g2d = (Graphics2D) displayedImage.getGraphics(); RenderingHints hints = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); hints.put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); g2d.setRenderingHints(hints); 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); g2d.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); int modifiers = e.getModifiers(); // check if alt mask is on, but make sure shift key is not down (alt shift click transposes notes in JMSL Score) if ((modifiers & InputEvent.ALT_MASK) != 0 && (modifiers & InputEvent.SHIFT_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); } }); } }