]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/slur.cc
release: 0.0.65
[lilypond.git] / lily / slur.cc
index 1fa1ad288531e0ac6f9f703910428a5d9d2780ea..9b6d75caf10793ce464b7998181fc3c82c33fd94 100644 (file)
@@ -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 <hanwen@stack.nl>
 */
@@ -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<Note_column*> 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