]> git.donarmstrong.com Git - lilypond.git/blob - lily/headreg.cc
release: 0.0.50
[lilypond.git] / lily / headreg.cc
1 /*
2   headreg.cc -- part of LilyPond
3
4   (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
5 */
6
7 #include "notehead.hh"
8 #include "head-reg.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     Notehead*n_p = new Notehead(8);     // ugh
44     note_p_ = n_p;
45     n_p->set_rhythmic(note_req_l_->rhythmic());
46
47     if (note_req_l_->note()) {
48         n_p->position = note_req_l_->note()->height() +
49             *get_staff_info().c0_position_i_l_;
50     } else if (note_req_l_->rest()) {
51         n_p->rest_b_ = true;
52         if (note_req_l_->rhythmic()->duration_.type_i_ <= 2)
53             note_p_->translate(
54                 Offset(0,
55                        6 * paper()->internote()));
56     }
57     
58     Staff_elem_info itinf(note_p_,note_req_l_);
59     announce_element(itinf);
60 }
61
62 void
63 Notehead_register::pre_move_processing()
64 {
65     if (note_p_) {
66         if (dir_i_ && note_p_->rest_b_ && note_p_->balltype <= 2) {
67             note_p_->position +=4*dir_i_ ;
68         }
69         typeset_element(note_p_);
70         note_p_ = 0;
71     }
72 }
73 void
74 Notehead_register::post_move_processing()
75 {
76     note_req_l_ = 0;
77 }
78
79 IMPLEMENT_STATIC_NAME(Notehead_register);
80 ADD_THIS_REGISTER(Notehead_register);