Crescendo::Crescendo ()
{
- grow_dir_ =0;
- dyn_b_drul_[LEFT] = dyn_b_drul_[RIGHT] =false;
+ set_elt_property ("dynamic-drul", gh_cons (SCM_BOOL_F, SCM_BOOL_F));
}
Real absdyn_dim = paper_l ()-> get_var ("crescendo_shorten");
Real extra_left = get_broken_left_end_align ();
- if (dyn_b_drul_[LEFT])
+ SCM dir = get_elt_property("grow-dir");
+ SCM dyns = get_elt_property ("dynamic-drul");
+
+ if (!isdir_b (dir) || !gh_pair_p (dyns))
+ {
+ set_elt_property ("transparent", SCM_BOOL_T);
+ return new Molecule;
+ }
+
+ Direction gd = to_dir (dir);
+
+ bool dynleft= to_boolean (gh_car (dyns));
+ bool dynright = to_boolean (gh_cdr (dyns));
+
+ if (dynleft)
extra_left += absdyn_dim;
Real width = spanner_length()- get_broken_left_end_align ();
- if (dyn_b_drul_[LEFT])
+ if (dynleft)
{
width -= absdyn_dim;
}
- if (dyn_b_drul_[RIGHT])
+ if (dynright)
{
width -= absdyn_dim;
}
} while (flip (&d) != LEFT);
- bool continued = broken[Direction (-grow_dir_)];
+ bool continued = broken[Direction (-gd)];
Real height = paper_l()->get_var ("crescendo_height");
Real thick = paper_l ()->get_var ("crescendo_thickness");
- const char* hairpin = (grow_dir_ < 0)? "decrescendo" : "crescendo";
+ const char* hairpin = (gd < 0)? "decrescendo" : "crescendo";
Atom at (gh_list (ly_symbol2scm (hairpin),
gh_double2scm (thick),
gh_double2scm (width),