]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/item.cc
release: 1.1.42
[lilypond.git] / lily / item.cc
index c1a8812ce83a35fecb6f8a69af9ee27c1898fb88..f74418df8db64f2e18cc3af1184d24ff4cb0e77d 100644 (file)
@@ -175,7 +175,7 @@ Item::Item (Item const &s)
 void
 Item::handle_prebroken_dependents ()
 {
-  Item * parent =  dynamic_cast<Item*> (parent_lX_AXIS));
+  Item * parent =  dynamic_cast<Item*> (parent_l (X_AXIS));
   if (breakable_b () && parent)
     {
        if(!(broken_to_drul_[LEFT] || broken_to_drul_[RIGHT]))
@@ -187,8 +187,27 @@ Item::handle_prebroken_dependents ()
          Item * broken_self = find_prebroken_piece (d);
          Item * broken_parent = parent->find_prebroken_piece (d);
 
-         broken_self->dim_cache_[X_AXIS].parent_l_ =
-           &broken_parent->dim_cache_[X_AXIS];
+         broken_self->dim_cache_[X_AXIS]->parent_l_ =
+           broken_parent->dim_cache_[X_AXIS];
+
+         /*
+           ugh. Should do this is after breaking?
+          */
+         if (!broken_self->parent_l (Y_AXIS))
+           {
+             Score_element * yparent =dynamic_cast<Score_element*>(parent_l (Y_AXIS));
+             Item *yparenti = dynamic_cast<Item*> (yparent);
+             Item *broken_yparent = yparenti ?
+               yparenti->find_prebroken_piece (d) : 0;
+             
+             if (!yparent)
+               programming_error ("Vertical refpoint lost!");
+             else if (yparenti)
+               {
+                 broken_self->dim_cache_[Y_AXIS]->parent_l_ =
+                   broken_yparent->dim_cache_[Y_AXIS];
+               }
+           }
        }
       while ((flip (&d))!=LEFT);
     }