- if (current_cresc_ev_)
- {
- String msg = _ ("already have a decrescendo");
- if (current_cresc_ev_->is_mus_type ("decrescendo-event"))
- msg = _ ("already have a crescendo");
-
- accepted_spanevents_drul_[START]->origin ()->warning (msg);
- current_cresc_ev_->origin ()->warning (_ ("cresc starts here"));
- }
- else
- {
- current_cresc_ev_ = accepted_spanevents_drul_[START];
-
- if (Direction d = to_dir (current_cresc_ev_->get_property ("direction")))
- set_grob_direction (line_spanner_, d);
-
- /*
- TODO: Use symbols.
- */
-
- String start_type
- = ly_symbol2string (current_cresc_ev_->get_property ("name"));
-
- /*
- ugh. Use push/pop?
- */
- if (start_type == "DecrescendoEvent")
- start_type = "decrescendo";
- else if (start_type == "CrescendoEvent")
- start_type = "crescendo";
-
- SCM s = get_property ((start_type + "Spanner").to_str0 ());
- if (!scm_is_symbol (s) || s == ly_symbol2scm ("hairpin"))
- {
- cresc_ = make_spanner ("Hairpin", accepted_spanevents_drul_[START]->self_scm ());
- if (finished_cresc_)
- {
- Pointer_group_interface::add_grob (finished_cresc_,
- ly_symbol2scm ("adjacent-hairpins"),
- cresc_);
-
- Pointer_group_interface::add_grob (cresc_,
- ly_symbol2scm ("adjacent-hairpins"),
- finished_cresc_);
- }
- cresc_->set_property ("grow-direction",
- scm_from_int ((start_type == "crescendo")
- ? BIGGER : SMALLER));
- }
-
- /*
- This is a convenient (and legacy) interface to TextSpanners
- for use in (de)crescendi.
- Hmm.
- */
- else
- {
- cresc_ = make_spanner ("DynamicTextSpanner", accepted_spanevents_drul_[START]->self_scm ());
- cresc_->set_property ("style", s);
- context ()->set_property ((start_type
- + "Spanner").to_str0 (), SCM_EOL);
- s = get_property ((start_type + "Text").to_str0 ());
- /*
- FIXME: use get_markup () to check type.
- */
- if (scm_is_string (s) || scm_is_pair (s))
- {
- cresc_->set_property ("edge-text",
- scm_cons (s, scm_makfrom0str ("")));
- context ()->set_property ((start_type + "Text").to_str0 (),
- SCM_EOL);
- }
- }
-
- if (script_)
- {
- cresc_->set_bound (LEFT, script_);
- add_bound_item (line_spanner_, cresc_->get_bound (LEFT));
- }
-
- Axis_group_interface::add_element (line_spanner_, cresc_);
- }