From: Carl Sorensen Date: Sun, 29 Nov 2009 04:41:17 +0000 (-0700) Subject: Fix 787 for real this time (works for more than 2 scripts stacked) X-Git-Tag: release/2.13.9-1~57 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=b35c6ca4db1e46975f25cba4a2ed3a7bb771dfff;p=lilypond.git Fix 787 for real this time (works for more than 2 scripts stacked) --- diff --git a/input/regression/script-stack-order.ly b/input/regression/script-stack-order.ly index ce6452082c..8e400557b3 100644 --- a/input/regression/script-stack-order.ly +++ b/input/regression/script-stack-order.ly @@ -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} diff --git a/lily/script-column.cc b/lily/script-column.cc index 25c602eca5..23e1b69b11 100644 --- a/lily/script-column.cc +++ b/lily/script-column.cc @@ -140,6 +140,8 @@ Script_column::order_grobs (vector 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 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);