]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/stem.cc
Merge branch 'master' of ssh+git://hanwen@git.sv.gnu.org/srv/git/lilypond
[lilypond.git] / lily / stem.cc
index dd247b4baa1997e2d74ea8783d13649631d91f38..862163fad9785987c6414eb58348998e557016a3 100644 (file)
@@ -406,7 +406,7 @@ Stem::duration_log (Grob *me)
   return (scm_is_number (s)) ? scm_to_int (s) : 2;
 }
 
-MAKE_SCHEME_CALLBACK(Stem, calc_positioning_done, 1);
+MAKE_SCHEME_CALLBACK (Stem, calc_positioning_done, 1);
 SCM
 Stem::calc_positioning_done (SCM smob)
 {
@@ -414,6 +414,8 @@ Stem::calc_positioning_done (SCM smob)
   if (!head_count (me))
     return SCM_BOOL_T;
 
+  me->set_property ("positioning-done", SCM_BOOL_T);
+  
   extract_grob_set (me, "note-heads", ro_heads);
   vector<Grob*> heads (ro_heads);
   vector_sort (heads, position_less);
@@ -510,7 +512,7 @@ Stem::calc_positioning_done (SCM smob)
   return SCM_BOOL_T;
 }
 
-MAKE_SCHEME_CALLBACK(Stem, calc_direction, 1);
+MAKE_SCHEME_CALLBACK (Stem, calc_direction, 1);
 SCM
 Stem::calc_direction (SCM smob)
 {
@@ -533,7 +535,7 @@ Stem::calc_direction (SCM smob)
   return scm_from_int (dir);
 }
 
-MAKE_SCHEME_CALLBACK(Stem, calc_default_direction, 1);
+MAKE_SCHEME_CALLBACK (Stem, calc_default_direction, 1);
 SCM
 Stem::calc_default_direction (SCM smob)
 {
@@ -559,13 +561,11 @@ SCM
 Stem::height (SCM smob)
 {
   Grob *me = unsmob_grob (smob);
-
+  if (!is_normal_stem (me))
+    return ly_interval2scm (Interval ());
+  
   Direction dir = get_grob_direction (me);
   
-  /* Trigger callback.
-
-  UGH. Should be automatic
-  */
   Grob *beam = get_beam (me);
   if (beam)
     {
@@ -574,11 +574,11 @@ Stem::height (SCM smob)
     }
 
   /*
-    Can't get_stencil(), since that would cache stencils too early.
+    Can't get_stencil (), since that would cache stencils too early.
     This causes problems with beams.
    */
   Stencil *stencil = unsmob_stencil (print (smob));
-  Interval iv = stencil ? stencil->extent (Y_AXIS) : Interval();
+  Interval iv = stencil ? stencil->extent (Y_AXIS) : Interval ();
   if (beam)
     {
       if (dir == CENTER)
@@ -861,7 +861,7 @@ Stem::get_stem_info (Grob *me)
   return si;
 }
 
-MAKE_SCHEME_CALLBACK(Stem, calc_stem_info, 1);
+MAKE_SCHEME_CALLBACK (Stem, calc_stem_info, 1);
 SCM
 Stem::calc_stem_info (SCM smob)
 {
@@ -912,10 +912,14 @@ Stem::calc_stem_info (SCM smob)
   Real height_of_my_trem = 0.0;
   Grob *trem = unsmob_grob (me->get_object ("tremolo-flag"));
   if (trem)
-      height_of_my_trem = trem->extent (trem, Y_AXIS).length ()
+    {
+      height_of_my_trem
+       = Stem_tremolo::vertical_length (trem)
         /* hack a bit of space around the trem. */
         + beam_translation;
+    }
 
+  
   /* UGH
      It seems that also for ideal minimum length, we must use
      the maximum beam count (for this direction):