2 note-head-line-engraver.cc -- implement Note_head_line_engraver
4 source file of the GNU LilyPond music typesetter
6 (c) 2000--2006 Jan Nieuwenhuizen <janneke@gnu.org>
10 #include "international.hh"
11 #include "rhythmic-head.hh"
13 #include "stream-event.hh"
16 #include "translator.icc"
19 Create line-spanner grobs for glissandi lines that connect note
22 class Glissando_engraver
: public Engraver
25 TRANSLATOR_DECLARATIONS (Glissando_engraver
);
28 DECLARE_TRANSLATOR_LISTENER (glissando
);
29 DECLARE_ACKNOWLEDGER (rhythmic_head
);
30 virtual void finalize ();
32 void stop_translation_timestep ();
33 void process_music ();
40 Glissando_engraver::Glissando_engraver ()
42 last_line_
= line_
= 0;
46 IMPLEMENT_TRANSLATOR_LISTENER (Glissando_engraver
, glissando
);
48 Glissando_engraver::listen_glissando (Stream_event
*ev
)
50 ASSIGN_EVENT_ONCE (event_
, ev
);
54 Glissando_engraver::process_music ()
57 line_
= make_spanner ("Glissando", event_
->self_scm ());
61 Glissando_engraver::acknowledge_rhythmic_head (Grob_info info
)
63 Grob
*g
= info
.grob ();
65 line_
->set_bound (LEFT
, g
);
68 last_line_
->set_bound (RIGHT
, g
);
72 Glissando_engraver::stop_translation_timestep ()
74 if (last_line_
&& last_line_
->get_bound (RIGHT
))
79 programming_error ("overwriting glissando");
87 Glissando_engraver::finalize ()
91 string msg
= _ ("unterminated glissando");
94 event_
->origin ()->warning (msg
);
103 ADD_ACKNOWLEDGER (Glissando_engraver
, rhythmic_head
);
104 ADD_TRANSLATOR (Glissando_engraver
,
105 /* doc */ "Engrave a glissandi",
106 /* create */ "Glissando",
107 /* accept */ "glissando-event",
108 /* read */ "followVoice",