]> git.donarmstrong.com Git - lilypond.git/blob - src/register.cc
release: 0.0.26
[lilypond.git] / src / register.cc
1 #include "voice.hh"
2 #include "request.hh"
3 #include "register.hh"
4 #include "notehead.hh"
5 #include "complexwalker.hh"
6 #include "localkeyitem.hh"
7
8 Staff_elem_info::Staff_elem_info(Staff_elem*s_l, Request*r_l,
9                                  Request_register *reg_l)
10 {
11     elem_p_ = s_l;
12     voice_l_ = r_l->elt_l_->voice_l_;
13     req_l_ = r_l;
14     group = 0;
15     origin_reg_l_ = reg_l;
16 }
17 Staff_elem_info::Staff_elem_info()
18 {
19     elem_p_ = 0;
20     voice_l_ = 0;
21     group = 0;
22     origin_reg_l_ = 0;
23     req_l_ = 0;
24 }
25 /****************/
26
27 Request_register::Request_register()
28 {
29     walk_l_=0;
30 }
31
32 Request_register::Request_register(Complex_walker*w_l)
33 {
34     walk_l_=w_l;    
35 }
36
37 void
38 Request_register::pre_move_processing()
39 {    
40     do_pre_move_process();
41     accepted_req_arr_.set_size(0);
42 }
43 void
44 Request_register::post_move_processing()
45 {    
46     do_post_move_process();
47 }
48
49
50 /****************/
51
52 Local_key_register::Local_key_register(Complex_walker*w)
53     : Request_register(w)
54 {
55     key_item_p_ = 0;    
56 }
57 bool
58 Local_key_register::try_request(Request*)
59
60 {
61     return false;
62 }
63
64 void
65 Local_key_register::process_request()
66 {
67 }
68 void
69 Local_key_register::do_pre_move_process()
70 {
71     if (key_item_p_) {
72         walk_l_->typeset_element(key_item_p_);
73         key_item_p_ = 0;
74     }
75 }
76 void
77 Local_key_register::acknowledge_element(Staff_elem_info info)
78 {    
79     if (info.req_l_->melodic()) {
80         Melodic_req * melodic_l_ = info.req_l_->melodic();
81
82         if( melodic_l_->forceacc ||
83             walk_l_->local_key_.oct(melodic_l_->octave).acc(melodic_l_->notename)
84             != melodic_l_->accidental) {
85             Item * support_l_ = info.elem_p_->item();
86         
87
88             if (!key_item_p_) {
89                 key_item_p_ = new Local_key_item(-2);
90                 key_item_p_->c0_position = walk_l_->clef_.c0_pos;
91             }
92             
93             key_item_p_->add(melodic_l_);
94             key_item_p_->add(support_l_);
95             walk_l_->local_key_.oct(melodic_l_->octave)
96                 .set(melodic_l_->notename, melodic_l_->accidental);
97         }
98     }
99 }