]> git.donarmstrong.com Git - lilypond.git/blob - lily/headreg.cc
61232d25b8ca9779ee3cee9037722a7de259040c
[lilypond.git] / lily / headreg.cc
1 /*
2   headreg.cc -- part of LilyPond
3
4   (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
5 */
6 #include "rest.hh"
7 #include "notehead.hh"
8 #include "headreg.hh"
9 #include "paper-def.hh"
10 #include "complex-walker.hh"
11 #include "musical-request.hh"
12
13 Notehead_register::Notehead_register()
14 {
15     note_p_ = 0;
16     set_feature(Features::dir(0));
17     post_move_processing();
18 }
19
20 bool
21 Notehead_register::try_request(Request *req_l) 
22 {
23     if (req_l->note() || req_l->rest())
24         note_req_l_=req_l->rhythmic();
25     else
26         return false;
27
28     return true;
29 }
30 void
31 Notehead_register::set_feature(Features d)
32 {
33     if(d.direction_i_ || d.initialiser_b_)
34         dir_i_ = d.direction_i_;
35 }
36
37 void
38 Notehead_register::process_requests()
39 {
40     if (!note_req_l_)
41         return;
42     
43
44     if (note_req_l_->note()) {
45         Notehead*n_p = new Notehead(8); // ugh
46         note_p_ = n_p;
47         n_p->set_rhythmic(note_req_l_->rhythmic());
48         n_p->position = note_req_l_->note()->height() +
49             *get_staff_info().c0_position_i_;
50     } else {
51         note_p_ = new Rest ( note_req_l_->rhythmic()->duration_);
52         if (note_req_l_->rhythmic()->duration_.type_i_ <= 2)
53             note_p_->translate(
54                 Offset(0,
55                        6 * paper()->internote()));
56     }
57     Staff_elem_info itinf(note_p_,note_req_l_);
58     announce_element(itinf);
59 }
60
61 void
62 Notehead_register::pre_move_processing()
63 {
64     if (note_p_) {
65         if (dir_i_ && note_p_->name() == Rest::static_name())
66             note_p_->translate(Offset(0, 4*dir_i_ * paper()->internote()));
67         typeset_element(note_p_);
68         note_p_ = 0;
69     }
70 }
71 void
72 Notehead_register::post_move_processing()
73 {
74     note_req_l_ = 0;
75 }
76
77 IMPLEMENT_STATIC_NAME(Notehead_register);