]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/spacing-loose-columns.cc
Merge branch 'master' of ssh+git://hanwen@git.sv.gnu.org/srv/git/lilypond
[lilypond.git] / lily / spacing-loose-columns.cc
index 13a37071c04e69af72df52a1b5f2439241f5085e..4102ecdecc2009dfade508156a291c8b53b3cd94 100644 (file)
@@ -15,6 +15,7 @@
 #include "spacing-spanner.hh"
 #include "warn.hh"
 #include "moment.hh"
+#include "spacing-options.hh"
 
 /* Find the loose columns in POSNS, and drape them around the columns
    specified in BETWEEN-COLS.  */
@@ -65,9 +66,34 @@ set_loose_columns (System *which, Column_x_positions const *posns)
          loose = right = re->get_column ();
        }
 
-      if (!right->get_system ())
+      if (right->get_system ())
+       ; /* do nothing */
+      else if (right->find_prebroken_piece (LEFT)
+              && right->find_prebroken_piece (LEFT)->get_system () == which)
        right = right->find_prebroken_piece (LEFT);
+      else if (Paper_column::get_rank (which->get_bound (RIGHT)) < Paper_column::get_rank (right))
+       
+       right = which->get_bound (RIGHT);
+      else
+       {
+         clique.back ()->programming_error ("Loose column does not have right side to attach to.");
+         System *base_system = dynamic_cast<System*> (which->original ());
+         int j = Paper_column::get_rank (clique.back ()) + 1;
+         int end_rank = Paper_column::get_rank (which->get_bound (RIGHT));
+         extract_grob_set (base_system, "columns", base_cols);
+         for (; j < end_rank; j++)
+           {
+             if (base_cols[j]->get_system () == which)
+               right = dynamic_cast<Item*> ((Grob*)base_cols[j]);
+           }
+       }
+      
 
+      if (!right)
+       {
+         programming_error ("Can't attach loose column sensibly. Attaching to end of system.");
+         right = which->get_bound (RIGHT);
+       }
       Grob *common = right->common_refpoint (left, X_AXIS);
 
       clique.push_back (right);