From 1897700783b93aa9b2259d447e596ea6a56e3541 Mon Sep 17 00:00:00 2001 From: Mike Solomon Date: Wed, 6 Jun 2012 05:32:06 +0200 Subject: [PATCH] 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. --- lily/slur.cc | 14 ++++++++------ lily/tuplet-bracket.cc | 5 +---- 2 files changed, 9 insertions(+), 10 deletions(-) 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)); -- 2.39.5