]> git.donarmstrong.com Git - lilypond.git/commitdiff
Simultaneous Scripts, Slurs, and TupletBrackets turn off collision resolution
authorMike Solomon <mike@apollinemike.com>
Wed, 6 Jun 2012 03:32:06 +0000 (05:32 +0200)
committerMike Solomon <mike@apollinemike.com>
Wed, 6 Jun 2012 03:32:06 +0000 (05:32 +0200)
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
lily/tuplet-bracket.cc

index a41aada7a7e5c31ef9e0aaadefe74a79d9486ad3..7e2cb1d1b02b4b82859f813eb043b3afbe6669a1 100644 (file)
@@ -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);
index d566027d2af5d2e82dc89c12e6e85cef7e0f4494..d211dcae38f55b39c91cb9095791816eb07396cc 100644 (file)
@@ -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));