]> git.donarmstrong.com Git - lilypond.git/blob - lily/tie-reg.cc
release: 0.0.59
[lilypond.git] / lily / tie-reg.cc
1 /*
2   tie-reg.cc -- implement Tie_register
3
4   source file of the LilyPond music typesetter
5
6   (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
7 */
8
9 #include "tie-reg.hh"
10 #include "tie.hh"
11 #include "notehead.hh"
12 #include "musical-request.hh"
13 #include "voice-element.hh"
14
15 Tie_register::Tie_register()
16 {
17     end_tie_p_ = 0;
18     tie_p_ = 0;
19     req_l_ =0;
20     end_req_l_ =0;
21     end_mom_ = -1;
22 }
23
24 void
25 Tie_register::post_move_processing()
26 {
27      if (tie_p_ && get_staff_info().when() == end_mom_) {
28         end_tie_p_ = tie_p_;
29         end_req_l_ = req_l_;
30         tie_p_ =0;
31         req_l_ =0;
32         end_mom_ = -1;
33     }
34 }
35
36 bool
37 Tie_register::acceptable_request_b(Request*r)
38 {
39     return r->musical() && r->musical()->tie();
40 }
41
42 bool
43 Tie_register::try_request(Request*r)
44 {
45     if(!acceptable_request_b(r))
46         return false;
47     if (req_l_ ) {
48         return false;
49     }
50     req_l_ = r->musical()->tie();
51     end_mom_ = r->elt_l_->duration_ + get_staff_info().when();
52     return true;
53 }
54
55 void
56 Tie_register::process_requests()
57 {
58     if (req_l_ && ! tie_p_) {
59         tie_p_ = new Tie;
60     }
61 }
62
63 void
64 Tie_register::acknowledge_element(Staff_elem_info i)
65 {
66     if (i.elem_l_->name() == Notehead::static_name()) {
67         if (tie_p_)
68             tie_p_->set_head(-1, (Notehead*)i.elem_l_);
69         
70         if (end_tie_p_) {
71             end_tie_p_->set_head(1, (Notehead*)i.elem_l_);
72             announce_element(Staff_elem_info(end_tie_p_,end_req_l_));
73         }
74     }
75 }
76
77 void
78 Tie_register::pre_move_processing()
79 {
80     if (end_tie_p_) {
81         typeset_element(end_tie_p_);
82         end_tie_p_ =0;
83         end_req_l_ =0;
84     }
85  
86 }
87
88 Tie_register::~Tie_register()
89 {
90     if (tie_p_) {
91         req_l_->warning("unended Tie");
92         delete tie_p_;
93     }
94 }
95
96 IMPLEMENT_STATIC_NAME(Tie_register);
97 ADD_THIS_REGISTER(Tie_register);