#include "staff-symbol-referencer.hh"
#include "stream-event.hh"
#include "warn.hh"
+#include "spanner.hh"
#include "translator.icc"
TRANSLATOR_DECLARATIONS (Dynamic_engraver);
DECLARE_ACKNOWLEDGER (accidental);
- DECLARE_ACKNOWLEDGER (script);
DECLARE_ACKNOWLEDGER (stem_tremolo);
DECLARE_ACKNOWLEDGER (note_column);
DECLARE_ACKNOWLEDGER (slur);
/*
TODO: probably broken.
*/
- script_ev_ = ev;
+ ASSIGN_EVENT_ONCE (script_ev_, ev);
}
IMPLEMENT_TRANSLATOR_LISTENER (Dynamic_engraver, span_dynamic);
{
Direction d = to_dir (ev->get_property ("span-direction"));
- accepted_spanevents_drul_[d] = ev;
- if (current_cresc_ev_ && d == START)
- accepted_spanevents_drul_[STOP] = ev;
+ if (d == START)
+ ASSIGN_EVENT_ONCE (accepted_spanevents_drul_[START], ev);
+
+ /* Cancel any ongoing crescendo, either explicitly by \! or
+ implicitly by a new crescendo. Also avoid warning if cresc is
+ cancelled both implicitly and explicitly. */
+ if ((d == STOP || current_cresc_ev_) && !accepted_spanevents_drul_[STOP])
+ ASSIGN_EVENT_ONCE (accepted_spanevents_drul_[STOP], ev);
}
void
}
else if (accepted_spanevents_drul_[STOP])
{
- accepted_spanevents_drul_[STOP]->origin ()->warning (_ ("can't find start of (de)crescendo"));
+ accepted_spanevents_drul_[STOP]->origin ()->warning (_ ("cannot find start of (de)crescendo"));
stop_ev = 0;
}
}
ly_symbol2scm ("adjacent-hairpins"),
finished_cresc_);
}
- cresc_->set_property ("grow-direction",
- scm_from_int ((start_type == "crescendo")
- ? BIGGER : SMALLER));
}
/*
finished_cresc_->set_bound (RIGHT, info.grob ());
}
-void
-Dynamic_engraver::acknowledge_script (Grob_info info)
-{
- if (!line_spanner_ || !script_)
- return;
-
- SCM p = info.grob ()->get_property ("script-priority");
-
- /*
- UGH.
-
- DynamicText doesn't really have a script-priority field.
- */
- if (scm_is_number (p)
- && scm_to_int (p)
- < scm_to_int (script_->get_property ("script-priority")))
- Side_position_interface::add_support (line_spanner_, info.grob ());
-}
-
ADD_ACKNOWLEDGER (Dynamic_engraver, accidental);
-ADD_ACKNOWLEDGER (Dynamic_engraver, script);
ADD_ACKNOWLEDGER (Dynamic_engraver, note_column);
ADD_ACKNOWLEDGER (Dynamic_engraver, slur);
ADD_ACKNOWLEDGER (Dynamic_engraver, stem_tremolo);
"alignments. The symbols are collected onto a DynamicLineSpanner grob\n"
"which takes care of vertical positioning. ",
- /* create */ "DynamicLineSpanner DynamicText Hairpin TextSpanner",
- /* accept */ "absolute-dynamic-event crescendo-event decrescendo-event",
+ /* create */
+ "DynamicLineSpanner "
+ "DynamicText "
+ "Hairpin "
+ "TextSpanner ",
+
/* read */ "",
/* write */ "");