2 clef.cc -- implement Clef_register
4 source file of the LilyPond music typesetter
6 (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>,
7 Mats Bengtsson <matsb@s3.kth.se>
10 #include "clef-reg.hh"
11 #include "clef-item.hh"
13 #include "commandrequest.hh"
14 #include "time-description.hh"
15 #include "staff-column.hh"
17 Clef_register::Clef_register()
21 /* ugly hack to prevent segfault (daddy_reg_l_ == 0 at construction) */
26 Clef_register::set_type(String s
)
29 if (clef_type_str_
== "violin") {
31 } else if (clef_type_str_
== "alto") {
33 } else if (clef_type_str_
== "tenor") {
35 } else if (clef_type_str_
== "bass") {
39 *get_staff_info().c0_position_i_
= c0_position_i_
;
45 Clef_register::read_req(Clef_change_req
*c_l
)
47 if (!set_type(c_l
->clef_str_
))
48 error("unknown clef type ", c_l
->defined_ch_c_l_
);
52 Clef_register::try_request(Request
* r_l
)
54 Command_req
* creq_l
= r_l
->command();
55 if (!creq_l
|| !creq_l
->clefchange())
58 clef_req_l_
= creq_l
->clefchange();
60 // do it now! Others have to read c0_pos.
61 read_req(creq_l
->clefchange());
66 Clef_register::process_requests()
68 const Time_description
*time_l
= get_staff_info().time_c_l_
;
69 if (!clef_req_l_
&& (!time_l
->whole_in_measure_
|| !time_l
->when_
)) {
70 clef_p_
= new Clef_item
;
71 clef_p_
->change
= false;
72 } else if (clef_req_l_
) {
73 clef_p_
= new Clef_item
;
74 clef_p_
->change
= true;
78 announce_element(Staff_elem_info(clef_p_
,
84 Clef_register::pre_move_processing()
88 if (clef_p_
->change
) {
89 Clef_item
* post_p
= new Clef_item(*clef_p_
);
90 post_p
->change
= false;
91 typeset_breakable_item(new Clef_item(*clef_p_
),
94 typeset_breakable_item(0, 0, clef_p_
);
100 Clef_register::post_move_processing()
103 /* not in ctor, since the reg might not be linked in.*/
104 if (clef_type_str_
== "") {