source file of the GNU LilyPond music typesetter
- (c) 1997--2005 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+ (c) 1997--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
*/
#include "engraver.hh"
class Rhythmic_column_engraver : public Engraver
{
- Link_array<Grob> rheads_;
+ Link_array__Grob_ rheads_;
Grob *stem_;
Grob *note_column_;
Grob *dotcol_;
Grob *last_spacing_;
Grob *spacing_;
+ void add_spacing_item (Grob *);
+
TRANSLATOR_DECLARATIONS (Rhythmic_column_engraver);
protected:
-DECLARE_ACKNOWLEDGER(dot_column);
-DECLARE_ACKNOWLEDGER(stem);
-DECLARE_ACKNOWLEDGER(rhythmic_head);
- PRECOMPUTED_VIRTUAL void process_acknowledged ();
- PRECOMPUTED_VIRTUAL void stop_translation_timestep ();
+ DECLARE_ACKNOWLEDGER (dot_column);
+ DECLARE_ACKNOWLEDGER (stem);
+ DECLARE_ACKNOWLEDGER (rhythmic_head);
+ void process_acknowledged ();
+ void stop_translation_timestep ();
};
Rhythmic_column_engraver::Rhythmic_column_engraver ()
dotcol_ = 0;
}
+void
+Rhythmic_column_engraver::add_spacing_item (Grob *g)
+{
+ if (spacing_)
+ {
+ Pointer_group_interface::add_grob (spacing_,
+ ly_symbol2scm ("left-items"),
+ g);
+
+ if (last_spacing_)
+ {
+ Pointer_group_interface::add_grob (last_spacing_,
+ ly_symbol2scm ("right-items"),
+ g);
+ }
+ }
+}
void
Rhythmic_column_engraver::process_acknowledged ()
{
note_column_ = make_item ("NoteColumn", rheads_[0]->self_scm ());
spacing_ = make_item ("NoteSpacing", SCM_EOL);
- spacing_->set_object ("left-items", scm_cons (note_column_->self_scm (), SCM_EOL));
-
- if (last_spacing_)
- {
- Pointer_group_interface::add_grob (last_spacing_,
- ly_symbol2scm ("right-items"),
- note_column_);
- }
+ add_spacing_item (note_column_);
}
- for (int i = 0; i < rheads_.size (); i++)
+ for (vsize i = 0; i < rheads_.size (); i++)
{
if (!rheads_[i]->get_parent (X_AXIS))
Note_column::add_head (note_column_, rheads_[i]);
}
- rheads_.set_size (0);
+ rheads_.resize (0);
}
if (note_column_)
{
if (dotcol_
&& !dotcol_->get_parent (X_AXIS))
- {
- Note_column::set_dotcol (note_column_, dotcol_);
- }
+ Note_column::set_dotcol (note_column_, dotcol_);
if (stem_
&& !stem_->get_parent (X_AXIS))
void
Rhythmic_column_engraver::acknowledge_stem (Grob_info i)
{
- stem_ = i.grob();
+ stem_ = i.grob ();
}
void
Rhythmic_column_engraver::acknowledge_rhythmic_head (Grob_info i)
{
- rheads_.push (i.grob ());
+ rheads_.push_back (i.grob ());
}
void
stem_ = 0;
}
-
-ADD_ACKNOWLEDGER(Rhythmic_column_engraver,dot_column);
-ADD_ACKNOWLEDGER(Rhythmic_column_engraver,stem);
-ADD_ACKNOWLEDGER(Rhythmic_column_engraver,rhythmic_head);
+ADD_ACKNOWLEDGER (Rhythmic_column_engraver, dot_column);
+ADD_ACKNOWLEDGER (Rhythmic_column_engraver, stem);
+ADD_ACKNOWLEDGER (Rhythmic_column_engraver, rhythmic_head);
ADD_TRANSLATOR (Rhythmic_column_engraver,
- /* descr */ "Generates NoteColumn, an objects that groups stems, noteheads and rests.",
- /* creats*/ "NoteColumn NoteSpacing",
- /* accepts */ "",
- /* acks */ "",
- /* reads */ "",
+ /* doc */ "Generates NoteColumn, an objects that groups stems, noteheads and rests.",
+ /* create */ "NoteColumn NoteSpacing",
+ /* accept */ "",
+ /* read */ "",
/* write */ "");