]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/crescendo.cc
release: 1.3.18
[lilypond.git] / lily / crescendo.cc
index 972846498a9e6a1be2692d9a144addab1aa45a04..ecd51f5d5b393e0a69733dfc069b597385a35ad1 100644 (file)
@@ -17,8 +17,7 @@
 
 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));
 }
 
 
@@ -29,18 +28,32 @@ Crescendo::do_brew_molecule_p () const
   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;
     }
@@ -59,11 +72,11 @@ Crescendo::do_brew_molecule_p () const
   } 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),