X-Git-Url: https://git.donarmstrong.com/lilypond.git?a=blobdiff_plain;f=lily%2Fslur.cc;h=9b6d75caf10793ce464b7998181fc3c82c33fd94;hb=04f01c7e890bd4f1b358378e5911fb7c117c3802;hp=1fa1ad288531e0ac6f9f703910428a5d9d2780ea;hpb=ce5315498fcaaf17d5eb1b320014e96defbb7dfb;p=lilypond.git diff --git a/lily/slur.cc b/lily/slur.cc index 1fa1ad2885..9b6d75caf1 100644 --- a/lily/slur.cc +++ b/lily/slur.cc @@ -1,7 +1,7 @@ /* slur.cc -- implement Slur - source file of the LilyPond music typesetter + source file of the GNU LilyPond music typesetter (c) 1996, 1997 Han-Wen Nienhuys */ @@ -53,27 +53,38 @@ Slur::do_pre_processing() left_col_l_ = encompass_arr_[0]->pcol_l_; } -Spanner* -Slur::do_break_at(PCol*l, PCol*r) const +void +Slur::do_break_at(PCol*l, PCol*r) { assert(l->line_l_ == r->line_l_); - Slur*ret = new Slur(*this); - ret->encompass_arr_.set_size(0); - for (int i =0; i < encompass_arr_.size(); i++) { - if (encompass_arr_[i]->pcol_l_->line_l_==l->line_l_) - ret->encompass_arr_.push(encompass_arr_[i]); + Array old_encompass_arr = encompass_arr_; + encompass_arr_.set_size(0); + for (int i =0; i < old_encompass_arr.size(); i++) { + if (old_encompass_arr[i]->pcol_l_->line_l_==l->line_l_) + encompass_arr_.push(old_encompass_arr[i]); } +} - return ret; +void +Slur::do_substitute_dependency(Score_elem*o, Score_elem*n) +{ + int i; + while((i = encompass_arr_.find_i((Note_column*)o->item())) >=0) { + if (n) + encompass_arr_[i] = (Note_column*)n->item(); + else + encompass_arr_.del(i); + } } + void Slur::do_post_processing() { if (!dir_i_) set_default_dir(); - Real inter_f = paper()->internote(); + Real inter_f = paper()->internote_f(); if (encompass_arr_[0]->stem_l_) left_pos_i_ = rint(encompass_arr_[0]->stem_l_->height()[dir_i_]/inter_f); else