source file of the GNU LilyPond music typesetter
- (c) 2000--2005 Jan Nieuwenhuizen <janneke@gnu.org>
+ (c) 2000--2007 Jan Nieuwenhuizen <janneke@gnu.org>
*/
#include "engraver.hh"
-#include "group-interface.hh"
+#include "pointer-group-interface.hh"
#include "stem.hh"
#include "rhythmic-head.hh"
#include "side-position-interface.hh"
#include "staff-symbol-referencer.hh"
#include "context.hh"
+#include "spanner.hh"
+#include "item.hh"
+
/**
Create line-spanner grobs for lines that connect note heads.
TRANSLATOR_DECLARATIONS (Note_head_line_engraver);
protected:
- virtual void acknowledge_grob (Grob_info);
- virtual void process_acknowledged_grobs ();
- virtual void stop_translation_timestep ();
+ DECLARE_ACKNOWLEDGER (rhythmic_head);
+ void process_acknowledged ();
+ void stop_translation_timestep ();
private:
Spanner *line_;
}
void
-Note_head_line_engraver::acknowledge_grob (Grob_info info)
+Note_head_line_engraver::acknowledge_rhythmic_head (Grob_info info)
{
- if (Rhythmic_head::has_interface (info.grob_))
+ head_ = info.grob ();
+ if (to_boolean (get_property ("followVoice")))
{
- head_ = info.grob_;
- if (to_boolean (get_property ("followVoice")))
+ Context *tr = context ();
+ while (tr && !tr->is_alias (ly_symbol2scm ("Staff")))
+ tr = tr->get_parent_context ();
+
+ if (tr
+ && tr->is_alias (ly_symbol2scm ("Staff")) && tr != last_staff_)
{
- Context *tr = context ();
- while (tr && !tr->is_alias (ly_symbol2scm ("Staff")))
- tr = tr->get_parent_context ();
-
- if (tr
- && tr->is_alias (ly_symbol2scm ("Staff")) && tr != last_staff_)
- {
- if (last_head_)
- follow_ = true;
- last_staff_ = tr;
- }
+ if (last_head_)
+ follow_ = true;
+ last_staff_ = tr;
}
}
}
void
-Note_head_line_engraver::process_acknowledged_grobs ()
+Note_head_line_engraver::process_acknowledged ()
{
if (!line_ && follow_ && last_head_ && head_)
{
head_ = 0;
}
+#include "translator.icc"
+ADD_ACKNOWLEDGER (Note_head_line_engraver, rhythmic_head);
ADD_TRANSLATOR (Note_head_line_engraver,
- /* descr */ "Engrave a line between two note heads, for example a glissando. If "
+ /* doc */ "Engrave a line between two note heads, for example a glissando. If "
" followVoice is set, staff switches also generate a line.",
- /* creats*/ "Glissando VoiceFollower",
- /* accepts */ "glissando-event",
- /* acks */ "rhythmic-head-interface",
- /* reads */ "followVoice",
+ /* create */ "Glissando VoiceFollower",
+ /* read */ "followVoice",
/* write */ "");