#include "self-alignment-interface.hh"
#include "side-position-interface.hh"
#include "staff-symbol-referencer.hh"
-#include "stream-event.hh"
#include "warn.hh"
#include "translator.icc"
Spanner *finished_line_spanner_;
Spanner *finished_cresc_;
- Stream_event *script_ev_;
- Stream_event *current_cresc_ev_;
+ Music *script_ev_;
+ Music *current_cresc_ev_;
- Drul_array<Stream_event *> accepted_spanevents_drul_;
+ Drul_array<Music *> accepted_spanevents_drul_;
vector<Note_column*> pending_columns_;
vector<Grob*> pending_elements_;
DECLARE_ACKNOWLEDGER (stem_tremolo);
DECLARE_ACKNOWLEDGER (note_column);
DECLARE_ACKNOWLEDGER (slur);
- DECLARE_TRANSLATOR_LISTENER (absolute_dynamic);
- DECLARE_TRANSLATOR_LISTENER (span_dynamic);
protected:
virtual void finalize ();
+ virtual bool try_music (Music *event);
void stop_translation_timestep ();
void process_music ();
};
accepted_spanevents_drul_[STOP] = 0;
}
-IMPLEMENT_TRANSLATOR_LISTENER (Dynamic_engraver, absolute_dynamic);
-void
-Dynamic_engraver::listen_absolute_dynamic (Stream_event *ev)
-{
- /*
- TODO: probably broken.
- */
- script_ev_ = ev;
-}
-
-IMPLEMENT_TRANSLATOR_LISTENER (Dynamic_engraver, span_dynamic);
-void
-Dynamic_engraver::listen_span_dynamic (Stream_event *ev)
+bool
+Dynamic_engraver::try_music (Music *m)
{
- Direction d = to_dir (ev->get_property ("span-direction"));
+ if (m->is_mus_type ("absolute-dynamic-event"))
+ {
+ /*
+ TODO: probably broken.
+ */
+ script_ev_ = m;
+ return true;
+ }
+ else if (m->is_mus_type ("decrescendo-event")
+ || m->is_mus_type ("crescendo-event"))
+ {
+ Direction d = to_dir (m->get_property ("span-direction"));
- accepted_spanevents_drul_[d] = ev;
- if (current_cresc_ev_ && d == START)
- accepted_spanevents_drul_[STOP] = ev;
+ accepted_spanevents_drul_[d] = m;
+ if (current_cresc_ev_ && d == START)
+ accepted_spanevents_drul_[STOP] = m;
+ return true;
+ }
+ return false;
}
void
{
if (!line_spanner_)
{
- Stream_event *rq = accepted_spanevents_drul_[START];
+ Music *rq = accepted_spanevents_drul_[START];
line_spanner_ = make_spanner ("DynamicLineSpanner", rq ? rq->self_scm () : SCM_EOL);
if (script_ev_)
rq = script_ev_;
Axis_group_interface::add_element (line_spanner_, script_);
}
- Stream_event *stop_ev = accepted_spanevents_drul_ [STOP]
+ Music *stop_ev = accepted_spanevents_drul_ [STOP]
? accepted_spanevents_drul_[STOP] : script_ev_;
if (accepted_spanevents_drul_[STOP] || script_ev_)
if (current_cresc_ev_)
{
string msg = _ ("already have a decrescendo");
- if (current_cresc_ev_->in_event_class ("crescendo-event"))
+ if (current_cresc_ev_->is_mus_type ("decrescendo-event"))
msg = _ ("already have a crescendo");
accepted_spanevents_drul_[START]->origin ()->warning (msg);
/*
TODO: Use symbols.
*/
+
+ string start_type
+ = ly_symbol2string (current_cresc_ev_->get_property ("name"));
- SCM start_sym = current_cresc_ev_->get_property ("class");
- string start_type;
-
- if (start_sym == ly_symbol2scm ("decrescendo-event"))
+ if (start_type == "DecrescendoEvent")
start_type = "decrescendo";
- else if (start_sym == ly_symbol2scm ("crescendo-event"))
+ else if (start_type == "CrescendoEvent")
start_type = "crescendo";
- else
- {
- programming_error ("unknown dynamic spanner type");
- return;
- }
+
+
/*
UGH. TODO: should read from original event, so appearance