]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/tie.cc
* lily/beam.cc (get_default_dir): take extreme note head as input
[lilypond.git] / lily / tie.cc
index 4b0404d690ca4e02755f058414082f123bebc728..e0c17aa912c3124f4cb16eb07d38eeaf9511f4cc 100644 (file)
@@ -96,17 +96,27 @@ Tie::get_position (Grob *me)
 Direction
 Tie::get_default_dir (Grob *me)
 {
-  Item *sl = head (me, LEFT) ? Rhythmic_head::get_stem (head (me, LEFT)) : 0;
-  Item *sr = head (me, RIGHT) ? Rhythmic_head::get_stem (head (me, RIGHT)) : 0;
-  if (sl && sr)
+  Drul_array<Grob*> stems;
+  Direction d = LEFT;
+  do
+    {
+      Grob *stem = head (me, d) ? Rhythmic_head::get_stem (head (me, d)) : 0;
+      if (stem)
+       stem = Stem::is_invisible (stem) ? 0 : stem;
+
+      stems[d] = stem;
+    }
+  while (flip (&d)!= LEFT);
+  
+  if (stems[LEFT] && stems[RIGHT])
     {
-      if (get_grob_direction (sl) == UP
-         && get_grob_direction (sr) == UP)
+      if (get_grob_direction (stems[LEFT]) == UP
+         && get_grob_direction (stems[RIGHT]) == UP)
        return DOWN;
     }
-  else if (sl || sr)
+  else if (stems[LEFT] || stems[RIGHT])
     {
-      Item *s = sl ? sl : sr;
+      Grob *s = stems[LEFT] ? stems[LEFT] : stems[RIGHT];
       return -get_grob_direction (s);
     }