/* * Created on Sep 3, 2006 by Nick * */ package jmsltestsuite; import java.awt.*; import java.awt.event.*; import javax.swing.JFrame; import com.didkovsky.portview.PVButton; import com.didkovsky.portview.PVPanel; import com.didkovsky.portview.swing.ViewFactorySwing; import com.softsynth.jmsl.*; import com.softsynth.jmsl.score.*; import com.softsynth.jmsl.view.PVPanelAdapter; /** * Draw on top of a score using call back * * @author Nick Didkovsky, (c) 2006 Nick Didkovsky, didkovn@mail.rockefeller.edu * */ public class DrawOnScore extends JFrame implements ScoreCanvasListener, ActionListener { int width = 800; int height = 200; Score score; PVButton launchButton; void createScore() { score = new Score(1, width, height); score.getScoreCanvas().addScoreCanvasListener(this); score.addMeasure(4, 4); System.out.println("score size= " + score.size()); getContentPane().add(score.getScoreCanvas().getComponent()); launchButton = JMSL.getViewFactory().createButton("Launch"); PVPanel p = new PVPanelAdapter(); p.add(launchButton.getComponent()); getContentPane().add(BorderLayout.SOUTH, p.getComponent()); launchButton.addActionListener(this); } public void scoreCanvasClicked(ScoreCanvas canvas, Point p, MouseEvent e) { // TODO Auto-generated method stub } public void scoreCanvasRectangleSelected(ScoreCanvas canvas, Point p1, Point p2) { System.out.println("score rectangle selected " + p1 + ", " + p2); } public void scoreCanvasKeyTyped(ScoreCanvas canvas, KeyEvent keyEvent) { // TODO Auto-generated method stub } public void scoreCanvasKeyReleased(ScoreCanvas canvas, KeyEvent keyEvent) { // TODO Auto-generated method stub } /** launch MusicJobs that generate score material and draw on top of score */ void launch() { MusicJob j = new MusicJob() { public double repeat(double time) throws InterruptedException { addMeasureWithNotes(); score.render(score.size() - 1, time, true); return time + 0.6; } }; j.setRepeats(1000); j.launch(JMSL.now()); } private void addMeasureWithNotes() { Measure m = score.addMeasure(4, 4); score.setCurrentMeasureNumber(m.getMeasureIndex()); for (int i = 0; i < 16; i++) { Note note = score.addNote(0.25, 60 + (m.getMeasureIndex() * i) % 24, 64, 0.25); note.setBeamedOut(true); } } public void actionPerformed(ActionEvent e) { Object source = e.getSource(); if (source == launchButton) { launch(); } } /** * Called immediately before ScoreCanvas draws the completed offscreen display image to the * canvas's graphics context. You may add drawing on top of the score by drawing in this method */ public void scoreCanvasDisplayedImageReady(Score score, ScoreCanvas canvas, Image displayedImage) { Color c = new Color(JMSLRandom.choose(100), JMSLRandom.choose(200), JMSLRandom.choose(100)); Graphics gr = displayedImage.getGraphics(); gr.setColor(c); gr.drawString("This text was drawn on top of the score in scoreCanvasDisplayedImageReady()", JMSLRandom .choose(width / 2), height / 2 + JMSLRandom.choose(height / 2)); } public void scoreCanvasReady(ScoreCanvas canvas) { } public static void main(String[] args) { JMSL.setViewFactory(new ViewFactorySwing()); Score.useSharedCanvas(false); DrawOnScore drawOnScore = new DrawOnScore(); drawOnScore.createScore(); drawOnScore.pack(); drawOnScore.setVisible(true); drawOnScore.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } public void scoreCanvasDragged(ScoreCanvas canvas, Point p, MouseEvent e) { // TODO Auto-generated method stub } public void scoreCanvasReleased(ScoreCanvas canvas, Point p, MouseEvent e) { // TODO Auto-generated method stub } public void scoreCanvasPressed(ScoreCanvas canvas, Point p, MouseEvent e) { // TODO Auto-generated method stub } }