]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/spanner.cc
unsmob_pitch -> Pitch::unsmob and related
[lilypond.git] / lily / spanner.cc
index 5d0485f46e4007bc519a242415957a90fc02e92e..80741e4b9582353ea4b25390fedbe627e8d600bc 100644 (file)
@@ -183,6 +183,10 @@ Spanner::get_bound (Direction d) const
 /*
   Set the items that this spanner spans. If D == LEFT, we also set the
   X-axis parent of THIS to S.
+
+  For example, when a slur crosses a line break, it's broken into two
+  pieces.  The second piece shouldn't be positioned relative to the
+  original NoteColumn, but rather to the PaperColumn after the break.
 */
 void
 Spanner::set_bound (Direction d, Grob *s)
@@ -200,7 +204,14 @@ Spanner::set_bound (Direction d, Grob *s)
      We check for System to prevent the column -> line_of_score
      -> column -> line_of_score -> etc situation */
   if (d == LEFT && !dynamic_cast<System *> (this))
-    set_parent (i, X_AXIS);
+    /*
+      If the X-parent is a spanner, it will be split across linebreaks, too,
+      so we shouldn't have to overwrite it with the bound. Also, we need
+      original parent for alignment.
+      This happens e.g. for MultiMeasureRestNumbers and PercentRepeatCounters.
+    */
+    if (!dynamic_cast <Spanner *> (this->get_parent (X_AXIS)))
+      set_parent (i, X_AXIS);
 
   /*
     Signal that this column needs to be kept alive. They need to be
@@ -353,7 +364,7 @@ MAKE_SCHEME_CALLBACK (Spanner, set_spacing_rods, 1);
 SCM
 Spanner::set_spacing_rods (SCM smob)
 {
-  Grob *me = unsmob_grob (smob);
+  Grob *me = Grob::unsmob (smob);
   SCM num_length = me->get_property ("minimum-length");
   if (scm_is_number (num_length))
     {
@@ -457,7 +468,7 @@ Spanner::calc_normalized_endpoints (SCM smob)
 Spanner *
 unsmob_spanner (SCM s)
 {
-  return dynamic_cast<Spanner *> (unsmob_grob (s));
+  return dynamic_cast<Spanner *> (Grob::unsmob (s));
 }
 
 MAKE_SCHEME_CALLBACK (Spanner, bounds_width, 1);