]> git.donarmstrong.com Git - lilypond.git/blob - lily/dynamic-reg.cc
release: 0.0.45
[lilypond.git] / lily / dynamic-reg.cc
1 /*
2   dynamic-reg.cc -- implement Dynamic_register
3
4   source file of the LilyPond music typesetter
5
6   (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
7 */
8
9 #include "dynamic-reg.hh"
10 #include "musical-request.hh"
11 #include "text-item.hh"
12 #include "lookup.hh"
13 #include "paper-def.hh"
14
15 Dynamic_register::Dynamic_register()
16 {
17     dir_i_ =0;
18     post_move_processing();
19     dynamic_p_ =0;
20 }
21
22 void
23 Dynamic_register::post_move_processing()
24 {
25     dynamic_req_l_ = 0;
26 }
27
28 bool    
29 Dynamic_register::try_request(Request * r)
30 {
31     Musical_req * m = r->musical();
32     if (!m || !m->dynamic())
33         return false;
34     assert(!dynamic_req_l_);
35     dynamic_req_l_ = m->dynamic();
36     return true;
37 }
38 void
39 Dynamic_register::process_requests()
40 {
41     if(dynamic_req_l_){
42         if (dynamic_req_l_->absdynamic()) {
43             Text_def * td_p = new Text_def;
44             td_p->align_i_ = 0;
45             String loud =Dynamic_req::loudness_str(
46                 dynamic_req_l_->absdynamic()->loudness_);
47             
48             td_p->text_str_ = paper()->lookup_l()->dynamic(loud).tex;
49             
50
51             td_p->style_str_ = "dynamic";
52             
53             dynamic_p_ = new Text_item(td_p, 10 ); // TODO!
54             announce_element(Staff_elem_info(dynamic_p_, dynamic_req_l_));
55         }
56     }
57 }
58
59 void
60 Dynamic_register::pre_move_processing()
61 {
62     if (dynamic_p_) {
63         typeset_element(dynamic_p_);
64         dynamic_p_ = 0;
65     }
66 }
67
68 bool
69 Dynamic_register::acceptable_request_b(Request*r)const
70 {
71     Musical_req * m = r->musical();
72     return  (m && m->dynamic());
73 }
74
75 void
76 Dynamic_register::set_feature(Features i)
77 {
78     dir_i_ = i.direction_i_;
79 }
80
81 IMPLEMENT_STATIC_NAME(Dynamic_register);