]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/spacing-spanner.cc
Merge branch 'master' of ssh+git://hanwen@git.sv.gnu.org/srv/git/lilypond
[lilypond.git] / lily / spacing-spanner.cc
index 19739adf6a5ee8ddd520932c33c80750a93f3d99..512bfe4166a71565a5464b42d1a42630ebf05d5b 100644 (file)
@@ -216,15 +216,25 @@ set_column_rods (vector<Grob*> const &cols, Real padding)
 
   for (vsize i = 1; i < cols.size (); i++)
     {
+      assert (distances.size () == i-1);
+
       Item *r = dynamic_cast<Item*> (cols[i]);
       Item *rb = r->find_prebroken_piece (LEFT);
 
       if (Separation_item::is_empty (r) && (!rb || Separation_item::is_empty (rb)))
-       continue;
+       {
+         distances.push_back (0);
+         continue;
+       }
 
       Skyline_pair *skys = Skyline_pair::unsmob (r->get_property ("horizontal-skylines"));
       Real right_stickout = skys ? (*skys)[LEFT].max_height () : 0.0;
 
+      /* min rather than max because right-stickout will be negative if the right-hand column
+        sticks out a lot to the left */
+      right_stickout = min (right_stickout,
+                           Separation_item::conditional_skyline (r, cols[i-1]).max_height ());
+
       Drul_array<Item*> r_cols (r, rb);
       Drul_array<Real> cur_dist (0.0, 0.0);
 
@@ -327,7 +337,16 @@ Spacing_spanner::musical_column_spacing (Grob *me,
            This is probably a waste of time in the case of polyphonic
            music.  */
          if (Note_spacing::has_interface (wish))
-           springs.push_back (Note_spacing::get_spacing (wish, right_col, base_note_space, options->increment_));
+           {
+             Real inc = options->increment_;
+             if (Grob *gsp = unsmob_grob (left_col->get_object ("grace-spacing")))
+               {
+                 Spacing_options grace_opts;
+                 grace_opts.init_from_grob (gsp);
+                 inc = grace_opts.increment_;
+               }
+             springs.push_back (Note_spacing::get_spacing (wish, right_col, base_note_space, inc));
+           }
        }
 
       if (springs.empty ())