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)
20 assert (!right_head_l_);
21 right_head_l_ = head_l;
25 assert (!left_head_l_);
26 left_head_l_ = head_l;
28 add_dependency (head_l);
39 Tie::set_default_dir()
41 int m= (left_head_l_->position_i_ + right_head_l_->position_i_) /2 ;
42 dir_i_ = (m < 5)? -1:1; // ugh
47 Tie::do_add_processing()
49 assert (left_head_l_ && right_head_l_);
50 left_col_l_ = left_head_l_ -> pcol_l_;
51 right_col_l_ = right_head_l_ -> pcol_l_;
55 This is already getting hairy. Should use Note_head *heads[2]
58 Tie::do_post_processing()
60 assert (left_head_l_ || right_head_l_);
61 left_pos_i_ = (left_head_l_)?
62 left_head_l_->position_i_ : right_head_l_->position_i_;
63 right_pos_i_ = (right_head_l_) ?
64 right_head_l_->position_i_ : left_head_l_->position_i_;
66 if ( right_head_l_ && right_head_l_->extremal_i_)
68 right_pos_i_ += 2*dir_i_;
74 if (left_head_l_ && left_head_l_->extremal_i_)
76 left_pos_i_ += 2*dir_i_;
83 right_pos_i_ = left_pos_i_;
85 left_pos_i_ = right_pos_i_;
91 Tie::do_substitute_dependency (Score_elem*o, Score_elem*n)
93 Note_head *new_l =n?(Note_head*)n->item():0;
94 if (o->item() == left_head_l_)
96 else if (o->item() == right_head_l_)
97 right_head_l_ = new_l;
102 IMPLEMENT_IS_TYPE_B1(Tie,Bow);