class Beam_engraver : public Engraver
{
public:
- DECLARE_ACKNOWLEDGER (stem);
- DECLARE_ACKNOWLEDGER (rest);
+ void acknowledge_stem (Grob_info);
+ void acknowledge_rest (Grob_info);
+ void listen_beam (Stream_event *);
protected:
Stream_event *start_ev_;
virtual bool valid_start_point ();
virtual bool valid_end_point ();
- DECLARE_TRANSLATOR_LISTENER (beam);
public:
TRANSLATOR_DECLARATIONS (Beam_engraver);
};
return valid_start_point ();
}
-Beam_engraver::Beam_engraver ()
+Beam_engraver::Beam_engraver (Context *c)
+ : Engraver (c)
{
beam_ = 0;
finished_beam_ = 0;
prev_start_ev_ = 0;
}
-IMPLEMENT_TRANSLATOR_LISTENER (Beam_engraver, beam);
void
Beam_engraver::listen_beam (Stream_event *ev)
{
stem->set_property ("duration-log", scm_from_int (durlog));
Moment stem_location = now - beam_start_mom_ + beam_start_location_;
beam_info_->add_stem (stem_location,
- std::max (durlog - 2, 0),
+ max (durlog - 2, 0),
Stem::is_invisible (stem),
stem_duration->factor (),
(to_boolean (stem->get_property ("tuplet-start"))));
Beam::add_stem (beam_, stem);
}
-ADD_ACKNOWLEDGER (Beam_engraver, stem);
-ADD_ACKNOWLEDGER (Beam_engraver, rest);
+
+void
+Beam_engraver::boot ()
+{
+ ADD_LISTENER (Beam_engraver, beam);
+ ADD_ACKNOWLEDGER (Beam_engraver, stem);
+ ADD_ACKNOWLEDGER (Beam_engraver, rest);
+}
ADD_TRANSLATOR (Beam_engraver,
/* doc */
{
public:
TRANSLATOR_DECLARATIONS (Grace_beam_engraver);
-
- DECLARE_TRANSLATOR_LISTENER (beam);
+ TRANSLATOR_INHERIT (Beam_engraver);
protected:
virtual bool valid_start_point ();
virtual bool valid_end_point ();
};
-Grace_beam_engraver::Grace_beam_engraver ()
+Grace_beam_engraver::Grace_beam_engraver (Context *c)
+ : Beam_engraver (c)
{
}
return beam_ && valid_start_point ();
}
-/*
- Ugh, C&P code.
- */
-IMPLEMENT_TRANSLATOR_LISTENER (Grace_beam_engraver, beam);
void
-Grace_beam_engraver::listen_beam (Stream_event *ev)
+Grace_beam_engraver::boot ()
{
- Direction d = to_dir (ev->get_property ("span-direction"));
-
- if (d == START && valid_start_point ())
- start_ev_ = ev;
- else if (d == STOP && valid_end_point ())
- stop_ev_ = ev;
+ ADD_LISTENER (Grace_beam_engraver, beam);
+ ADD_ACKNOWLEDGER (Grace_beam_engraver, stem);
+ ADD_ACKNOWLEDGER (Grace_beam_engraver, rest);
}
-ADD_ACKNOWLEDGER (Grace_beam_engraver, stem);
-ADD_ACKNOWLEDGER (Grace_beam_engraver, rest);
-
ADD_TRANSLATOR (Grace_beam_engraver,
/* doc */
"Handle @code{Beam} events by engraving beams. If omitted,"