]> git.donarmstrong.com Git - lilypond.git/blob - src/register.cc
release: 0.0.27
[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_regs_l_ = 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
22     group_regs_l_ = 0;
23     origin_reg_l_ = 0;
24     req_l_ = 0;
25 }
26 /****************/
27
28 Request_register::Request_register()
29 {
30     walk_l_=0;
31 }
32
33 Request_register::Request_register(Complex_walker*w_l)
34 {
35     walk_l_=w_l;    
36 }
37
38 void
39 Request_register::pre_move_processing()
40 {    
41     do_pre_move_process();
42     accepted_req_arr_.set_size(0);
43 }
44 void
45 Request_register::post_move_processing()
46 {    
47     do_post_move_process();
48 }
49
50
51 /****************/
52
53 Local_key_register::Local_key_register(Complex_walker*w)
54     : Request_register(w)
55 {
56     key_item_p_ = 0;    
57 }
58 bool
59 Local_key_register::try_request(Request*)
60
61 {
62     return false;
63 }
64
65 void
66 Local_key_register::process_request()
67 {
68 }
69 void
70 Local_key_register::do_pre_move_process()
71 {
72     if (key_item_p_) {
73         walk_l_->typeset_element(key_item_p_);
74         key_item_p_ = 0;
75     }
76 }
77 void
78 Local_key_register::acknowledge_element(Staff_elem_info info)
79 {    
80     if (info.req_l_->melodic()) {
81         Melodic_req * melodic_l_ = info.req_l_->melodic();
82
83         if( melodic_l_->forceacc ||
84             walk_l_->local_key_.oct(melodic_l_->octave).acc(melodic_l_->notename)
85             != melodic_l_->accidental) {
86             Item * support_l_ = info.elem_p_->item();
87         
88
89             if (!key_item_p_) {
90                 key_item_p_ = new Local_key_item(walk_l_->clef_.c0_pos);
91                 key_item_p_->c0_position = walk_l_->clef_.c0_pos;
92             }
93             
94             key_item_p_->add(melodic_l_);
95             key_item_p_->add(support_l_);
96             walk_l_->local_key_.oct(melodic_l_->octave)
97                 .set(melodic_l_->notename, melodic_l_->accidental);
98         }
99     }
100 }