Package com.softsynth.jmsl.score.util
Class SimpleGraphicsRenderedMessageListener
java.lang.Object
com.softsynth.jmsl.score.util.SimpleGraphicsRenderedMessageListener
- All Implemented Interfaces:
RenderedMessageListener
public class SimpleGraphicsRenderedMessageListener extends java.lang.Object implements RenderedMessageListener
You may build your own RenderedMessageListener to be notified of arbitrary messages you add to measures, staves, and notes
This example only recognizes messages beginning with "drawline", "setcolor", and "drawarc"
You can of course make up your own graphics command set and respond to messages however you like
Note that this callback happens as the last step of notrre rendering
Source follows:
public class SimpleGraphicsRenderedMessageListener implements RenderedMessageListener { private boolean error; private double parseDouble(StringTokenizer t) { if (error) { return -1; } double value = 0; if (t.hasMoreTokens()) { String v = t.nextToken(); try { value = new Double(v).doubleValue(); } catch (NumberFormatException e) { System.err.println("ERROR: SimpleGraphicsRenderedMessageListener, not a number: " + v); error = true; } } else { System.err.println("ERROR: SimpleGraphicsRenderedMessageListener, ran out of numbers! "); error = true; } return value; } public synchronized void execute(String message, Score score, Object container, RenderedMessageBean bean, Graphics g, Point2D p, double zoom) { error = false; StringTokenizer t = new StringTokenizer(message, " "); String cmd = t.nextToken(); if (cmd.equalsIgnoreCase("drawline")) { double x1 = parseDouble(t); double y1 = parseDouble(t); double x2 = parseDouble(t); double y2 = parseDouble(t); if (!error) { double px = p.getX() + zoom * bean.getXoffset(); double py = p.getY() + zoom * bean.getYoffset(); ((Graphics2D) g).draw(new Line2D.Double(px + x1 * zoom, py + y1 * zoom, px + x2 * zoom, py + y2 * zoom)); } } else if (cmd.equalsIgnoreCase("setcolor")) { int red = (int) parseDouble(t); int green = (int) parseDouble(t); int blue = (int) parseDouble(t); if (!error) { g.setColor(new Color(red, green, blue)); } } else if (cmd.equalsIgnoreCase("drawarc")) { double x = parseDouble(t); double y = parseDouble(t); double width = parseDouble(t); double height = parseDouble(t); double startAngle = parseDouble(t); double arcAngle = parseDouble(t); if (!error) { double px = p.getX() + zoom * bean.getXoffset(); double py = p.getY() + zoom * bean.getYoffset(); ((Graphics2D) g).draw(new Arc2D.Double(px + x * zoom, py + y * zoom, width * zoom, height zoom, startAngle, arcAngle, Arc2D.OPEN)); } } } }
- Author:
- Nick Didkovsky, (c) 2005 Nick Didkovsky, nick@didkovsky.com
- See Also:
RenderedMessagesTest
-
Constructor Summary
Constructors Constructor Description SimpleGraphicsRenderedMessageListener()
-
Method Summary
Modifier and Type Method Description void
execute(java.lang.String message, Score score, java.lang.Object container, RenderedMessageBean bean, java.awt.Graphics g, java.awt.geom.Point2D p, double zoom)
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Constructor Details
-
SimpleGraphicsRenderedMessageListener
public SimpleGraphicsRenderedMessageListener()
-
-
Method Details
-
execute
public void execute(java.lang.String message, Score score, java.lang.Object container, RenderedMessageBean bean, java.awt.Graphics g, java.awt.geom.Point2D p, double zoom)- Specified by:
execute
in interfaceRenderedMessageListener
- Parameters:
message
- an arbitrary message sent by the object when it is rendered. Could be something easily interpretable like "drawline 0 0 10 20" for example or something personal like "drawsquiggle 3.14159 dada"score
- the JMSL Score containing the sending object.container
- Could be Measure, Staff, or Note. It's the object that contained the bean.bean
- the bean itself that sent the execute() messageg
- Graphics context of the Scorep
- the drawing anchor of the sending object. Presumably you want to draw relative to thiszoom
- the current zoom of the score layout
-