]> git.donarmstrong.com Git - lilypond.git/commitdiff
Fix 787 for real this time (works for more than 2 scripts stacked)
authorCarl Sorensen <c_sorensen@byu.edu>
Sun, 29 Nov 2009 04:41:17 +0000 (21:41 -0700)
committerCarl Sorensen <c_sorensen@byu.edu>
Sun, 29 Nov 2009 04:42:16 +0000 (21:42 -0700)
input/regression/script-stack-order.ly
lily/script-column.cc

index ce6452082c3c0fa2c951420e88405b421d8c086a..8e400557b380c797f0d7862093aebc8e43bcb2c7 100644 (file)
@@ -9,7 +9,4 @@ order determines the order. Objects specified first are closest to the note.
 
 \layout { ragged-right = ##t}
 
-\relative c'' { c4^"inner up"^"outer up"_"inner down"_"outer down" c c c}
-
-
-
+\relative c'' { c4^"up 1"^"up 2"^"up 3"_"down 1"_"down 2"_"down 3" c c c}
index 25c602eca53bc7642e0e2d1ead00f3698eb8e460..23e1b69b1185542d1d5e1fee1f8540bebc4885ba 100644 (file)
@@ -140,6 +140,8 @@ Script_column::order_grobs (vector<Grob*> grobs)
       ss = scm_stable_sort_x (ss, ly_grob_script_priority_less_proc);
 
       Grob *last = 0;
+      Grob *first = unsmob_grob (scm_car (ss));
+      SCM default_outside_staff = first->get_property("outside-staff-priority");
       for (SCM s = ss; scm_is_pair (s); s = scm_cdr (s))
        {
          Grob *g = unsmob_grob (scm_car (s));
@@ -155,11 +157,21 @@ Script_column::order_grobs (vector<Grob*> grobs)
                     missing or equal to last
                   */
                   SCM g_outside_staff = g->get_property ("outside-staff-priority");
-                 if ((!scm_is_number (g_outside_staff)) ||
-                      (fabs (scm_to_double (g_outside_staff) -
-                             scm_to_double(last_outside_staff)) < 0.001))
+                 if (!scm_is_number (g_outside_staff))
                      g->set_property ("outside-staff-priority",
                                     scm_from_double (scm_to_double (last_outside_staff) + 0.1));
+                  else if (fabs (scm_to_double (g_outside_staff) -
+                             scm_to_double(default_outside_staff)) < 0.001)
+                    {
+                      SCM last_script = last->get_property ("script-priority");
+                      SCM g_script = g->get_property("script-priority");
+                     g->set_property (
+                          "outside-staff-priority",
+                         scm_from_double (scm_to_double (last_outside_staff) +
+                            scm_to_double (g_script) -
+                            scm_to_double (last_script)));
+                    }
+                  default_outside_staff = g_outside_staff;
                }
              else
                Side_position_interface::add_support (g, last);