]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/stem.cc
release: 1.3.88
[lilypond.git] / lily / stem.cc
index 9332b6532d515b313947d1107719c438c44d69d2..68c93dad18b1b2bb2c18ff6c4bb19eea17108a20 100644 (file)
@@ -94,13 +94,13 @@ Stem::stem_end_position (Score_element*me)
 Direction
 Stem::get_direction (Score_element*me)
 {
-  Direction d = Directional_element_interface (me).get ();
+  Direction d = Directional_element_interface::get (me);
 
   if (!d)
     {
        d = get_default_dir (me);
        // urg, AAARGH!
-       Directional_element_interface (me).set (d);
+       Directional_element_interface::set (me, d);
     }
   return d ;
 }
@@ -260,7 +260,8 @@ Stem::get_default_stem_end_position (Score_element*me)
     }
   else
     {
-      s = scm_eval (ly_symbol2scm ((type_str + "stem-length").ch_C()));
+      s = scm_eval2 (ly_symbol2scm ((type_str + "stem-length").ch_C()),
+                    SCM_EOL);
       for (SCM q = s; q != SCM_EOL; q = gh_cdr (q))
        a.push (gh_scm2double (gh_car (q)));
                
@@ -270,7 +271,8 @@ Stem::get_default_stem_end_position (Score_element*me)
 
 
   a.clear ();
-  s = scm_eval (ly_symbol2scm ((type_str + "stem-shorten").ch_C()));
+  s = scm_eval2 (ly_symbol2scm ((type_str + "stem-shorten").ch_C()),
+                SCM_EOL);
   for (SCM q = s; q != SCM_EOL; q = gh_cdr (q))
     a.push (gh_scm2double (gh_car (q)));
 
@@ -287,7 +289,7 @@ Stem::get_default_stem_end_position (Score_element*me)
   if (!dir)
     {
       dir = get_default_dir (me);
-      Directional_element_interface (me).set (dir);
+      Directional_element_interface::set (me, dir);
     }
   
   /* 
@@ -470,7 +472,7 @@ Stem::brew_molecule (SCM smob)
   
   if (!invisible_b (me))
     {
-      Real stem_width = me->paper_l ()->get_var ("stemthickness");
+      Real stem_width = gh_scm2double (me->get_elt_property ("thickness")) * me->paper_l ()->get_var ("stafflinethickness");
       Molecule ss =me->lookup_l ()->filledbox (Box (Interval (-stem_width/2, stem_width/2),
                                                 Interval (stem_y[DOWN]*dy, stem_y[UP]*dy)));
       mol.add_molecule (ss);
@@ -497,7 +499,7 @@ Stem::off_callback (Score_element * me, Axis)
       if (to_boolean (me->get_elt_property ("stem-centered")))
        return head_wid.center ();
       
-      Real rule_thick = me->paper_l ()->get_var ("stemthickness");
+      Real rule_thick = gh_scm2double (me->get_elt_property ("thickness")) * me->paper_l ()->get_var ("stafflinethickness");
       Direction d = get_direction (me);
       r = head_wid[d] - d * rule_thick ;
     }
@@ -520,7 +522,7 @@ Stem::calc_stem_info (Score_element*me)
 {
   Score_element * beam = beam_l (me);
 
-  Direction beam_dir = Directional_element_interface (beam).get ();
+  Direction beam_dir = Directional_element_interface::get (beam);
   if (!beam_dir)
     {
       programming_error ("Beam dir not set.");
@@ -530,10 +532,14 @@ Stem::calc_stem_info (Score_element*me)
 
   Real staff_space = Staff_symbol_referencer::staff_space (me);
   Real half_space = staff_space / 2;
-  Real interbeam_f = me->paper_l ()->interbeam_f (Beam::get_multiplicity (beam));
-  Real thick = gh_scm2double (beam->get_elt_property ("beam-thickness"));
   int multiplicity = Beam::get_multiplicity (beam);
 
+
+  SCM space_proc = beam->get_elt_property ("beam-space-function");
+  SCM space = gh_call1 (space_proc, gh_int2scm (multiplicity));
+  Real interbeam_f = gh_scm2double (space) * staff_space;
+
+  Real thick = gh_scm2double (beam->get_elt_property ("beam-thickness"));
   Stem_info info; 
   info.idealy_f_ = chord_start_f (me);
 
@@ -547,14 +553,15 @@ Stem::calc_stem_info (Score_element*me)
   SCM s;
   String type_str = grace_b ? "grace-" : "";
   
-  s = scm_eval (ly_symbol2scm ((type_str + "beamed-stem-minimum-length").ch_C()));
+  s = scm_eval2 (ly_symbol2scm ((type_str + "beamed-stem-minimum-length").ch_C()), SCM_EOL);
   a.clear ();
   for (SCM q = s; q != SCM_EOL; q = gh_cdr (q))
     a.push (gh_scm2double (gh_car (q)));
 
 
   Real minimum_length = a[multiplicity <? (a.size () - 1)] * staff_space;
-  s = scm_eval (ly_symbol2scm ((type_str + "beamed-stem-length").ch_C()));
+  s = scm_eval2 (ly_symbol2scm ((type_str + "beamed-stem-length").ch_C()),
+                SCM_EOL);
 
   a.clear();
   for (SCM q = s; q != SCM_EOL; q = gh_cdr (q))
@@ -562,7 +569,7 @@ Stem::calc_stem_info (Score_element*me)
 
   Real stem_length =  a[multiplicity <? (a.size () - 1)] * staff_space;
 
-  if (!beam_dir || (beam_dir == Directional_element_interface (me).get ()))
+  if (!beam_dir || (beam_dir == Directional_element_interface::get (me)))
     /* normal beamed stem */
     {
       if (multiplicity)