2 tie.cc -- implement Tie
4 source file of the GNU LilyPond music typesetter
6 (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
9 #include "paper-def.hh"
11 #include "note-head.hh"
16 Tie::set_head(int x_pos, Note_head * head_l)
19 assert(!right_head_l_);
20 right_head_l_ = head_l;
22 assert(!left_head_l_);
23 left_head_l_ = head_l;
25 add_dependency(head_l);
36 Tie::set_default_dir()
38 int m= (left_head_l_->position_i_ + right_head_l_->position_i_) /2 ;
39 dir_i_ = (m < 5)? -1:1; // ugh
44 Tie::do_add_processing()
46 assert(left_head_l_ && right_head_l_);
47 left_col_l_ = left_head_l_ -> pcol_l_;
48 right_col_l_ = right_head_l_ -> pcol_l_;
52 This is already getting hairy. Should use Note_head *heads[2]
55 Tie::do_post_processing()
57 assert(left_head_l_ || right_head_l_);
58 left_pos_i_ = (left_head_l_)?
59 left_head_l_->position_i_ : right_head_l_->position_i_;
60 right_pos_i_ = (right_head_l_) ?
61 right_head_l_->position_i_ : left_head_l_->position_i_;
63 if ( right_head_l_ && right_head_l_->extremal_i_) {
64 right_pos_i_ += 2*dir_i_;
69 if (left_head_l_ && left_head_l_->extremal_i_) {
70 left_pos_i_ += 2*dir_i_;
76 right_pos_i_ = left_pos_i_;
78 left_pos_i_ = right_pos_i_;
84 Tie::do_substitute_dependency(Score_elem*o, Score_elem*n)
86 Note_head *new_l =n?(Note_head*)n->item():0;
87 if (o->item() == left_head_l_)
89 else if (o->item() == right_head_l_)
90 right_head_l_ = new_l;
95 IMPLEMENT_IS_TYPE_B1(Tie,Bow);