X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fspanner.cc;h=04387ef9f702f89d4dee623f6d19d69452bc2a9b;hb=9c8bcb9a2a1fedb5459e593b18a8c550318e6800;hp=806365bc8edf7cd77102ac618e9948f9018e13fa;hpb=b638d530ac5a32a832646cdd2b680ce52d0764f0;p=lilypond.git diff --git a/lily/spanner.cc b/lily/spanner.cc index 806365bc8e..04387ef9f7 100644 --- a/lily/spanner.cc +++ b/lily/spanner.cc @@ -8,7 +8,7 @@ #include #include -#include "dimension-cache.hh" + #include "debug.hh" #include "spanner.hh" #include "paper-column.hh" @@ -52,9 +52,6 @@ Spanner::do_break_processing () if (left == right) { - /* - FIXME: this is broken. - */ /* If we have a spanner spanning one column, we must break it anyway because it might provide a parent for another item. */ @@ -62,7 +59,9 @@ Spanner::do_break_processing () do { Item* bound = left->find_prebroken_piece (d); - if (bound->line_l ()) + if (!bound) + programming_error ("no broken bound"); + else if (bound->line_l ()) { Spanner * span_p = dynamic_cast( clone ()); span_p->set_bound (LEFT, bound); @@ -135,11 +134,11 @@ Spanner::spanned_rank_iv () if (spanned_drul_[LEFT]) { - iv[LEFT] = spanned_drul_[LEFT]->column_l ()->rank_i (); + iv[LEFT] = Paper_column::rank_i (spanned_drul_[LEFT]->column_l ()); } if (spanned_drul_[RIGHT]) { - iv[RIGHT] = spanned_drul_[RIGHT]->column_l ()->rank_i (); + iv[RIGHT] = Paper_column::rank_i (spanned_drul_[RIGHT]->column_l ()); } return iv; } @@ -224,7 +223,7 @@ Spanner::find_broken_piece (Line_of_score*l) const int Spanner::compare (Spanner * const &p1, Spanner * const &p2) { - return p1->line_l ()->rank_i_ - p2->line_l ()->rank_i_; + return p1->line_l ()->rank_i_ - p2->line_l ()->rank_i_; } bool @@ -233,38 +232,6 @@ Spanner::broken_b() const return broken_into_l_arr_.size(); } -Array -Spanner::get_rods () const -{ - Array r; - return r; -} - -Array -Spanner::get_springs () const -{ - Array s; - return s; -} - -void -Spanner::do_space_processing () -{ - Array rs (get_rods ()); - for (int i=0; i < rs.size (); i++) - { - rs[i].add_to_cols (); - } - - Array ss (get_springs ()); - for (int i=0; i < ss.size (); i++) - { - if (isinf (ss[i].distance_f_)) - programming_error ("weird spring"); - else - ss[i].add_to_cols (); - } -} /* If this is a broken spanner, return the amount the left end is to be @@ -293,14 +260,24 @@ Spanner::get_broken_left_end_align () const return 0.0; } -void +SCM Spanner::do_derived_mark () { + /* + We'd be fucked if this is called before spanned_drul_[] is inited. */ + if (status_i_ == ORPHAN) + return SCM_EOL; + Direction d = LEFT; do if (spanned_drul_[d]) - scm_gc_mark (spanned_drul_[d]->self_scm_); + scm_gc_mark (spanned_drul_[d]->self_scm ()); while (flip (&d) != LEFT); + + for (int i= broken_into_l_arr_.size () ; i--;) + scm_gc_mark (broken_into_l_arr_[i]->self_scm ()); + + return SCM_EOL; } void