From: Mike Solomon Date: Wed, 6 Jun 2012 03:32:06 +0000 (+0200) Subject: Simultaneous Scripts, Slurs, and TupletBrackets turn off collision resolution X-Git-Tag: release/2.15.41-1~66 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=1897700783b93aa9b2259d447e596ea6a56e3541;p=lilypond.git Simultaneous Scripts, Slurs, and TupletBrackets turn off collision resolution When these three grobs occur at the same time, cyclic dependency problems arise which sometimes cause layout irregularities. This patch turns off collision resolution in tuplet-bracket.cc for this case, which solves the layout problem. The cyclic dependency warnings persist, however, for certain cases. --- diff --git a/lily/slur.cc b/lily/slur.cc index a41aada7a7..7e2cb1d1b0 100644 --- a/lily/slur.cc +++ b/lily/slur.cc @@ -400,6 +400,12 @@ Slur::auxiliary_acknowledge_extra_object (Grob_info const &info, Grob *e = info.grob (); SCM avoid = e->get_property ("avoid-slur"); + Grob *slur; + if (end_slurs.size () && !slurs.size ()) + slur = end_slurs[0]; + else + slur = slurs[0]; + if (Tie::has_interface (e) || avoid == ly_symbol2scm ("inside")) { @@ -407,16 +413,12 @@ Slur::auxiliary_acknowledge_extra_object (Grob_info const &info, add_extra_encompass (slurs[i], e); for (vsize i = end_slurs.size (); i--;) add_extra_encompass (end_slurs[i], e); + if (slur) + e->set_object ("slur", slur->self_scm ()); } else if (avoid == ly_symbol2scm ("outside") || avoid == ly_symbol2scm ("around")) { - Grob *slur; - if (end_slurs.size () && !slurs.size ()) - slur = end_slurs[0]; - else - slur = slurs[0]; - if (slur) { chain_offset_callback (e, outside_slur_callback_proc, Y_AXIS); diff --git a/lily/tuplet-bracket.cc b/lily/tuplet-bracket.cc index d566027d2a..d211dcae38 100644 --- a/lily/tuplet-bracket.cc +++ b/lily/tuplet-bracket.cc @@ -650,10 +650,7 @@ Tuplet_bracket::calc_position_and_height (Grob *me_grob, Real *offset, Real *dy) // assume that if a script is avoiding slurs, it should not get placed // under a tuplet bracket - SCM avoid = scripts[i]->get_property ("avoid-slur"); - if (unsmob_grob (scripts[i]->get_object ("slur")) - && (avoid == ly_symbol2scm ("outside") - || avoid == ly_symbol2scm ("around"))) + if (unsmob_grob (scripts[i]->get_object ("slur"))) continue; Interval script_x (scripts[i]->extent (commonx, X_AXIS));