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 interface RenderedMessageListener
      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() message
      g - Graphics context of the Score
      p - the drawing anchor of the sending object. Presumably you want to draw relative to this
      zoom - the current zoom of the score layout