2 a2-engraver.cc -- implement A2_engraver
4 source file of the GNU LilyPond music typesetter
6 (c) 2000 Jan Nieuwenhuizen <janneke@gnu.org>
11 #include "note-head.hh"
13 #include "translator-group.hh"
14 #include "side-position-interface.hh"
15 #include "directional-element-interface.hh"
17 class A2_engraver : public Engraver
21 VIRTUAL_COPY_CONS (Translator);
24 virtual void do_process_music ();
25 virtual void acknowledge_element (Score_element_info);
26 //virtual void process_acknowledged ();
28 virtual void do_pre_move_processing ();
34 ADD_THIS_TRANSLATOR (A2_engraver);
36 A2_engraver::A2_engraver ()
42 A2_engraver::do_process_music ()
46 SCM a2 = get_property ("a2");
47 SCM solo = get_property ("solo");
48 SCM solo2 = get_property ("solo2");
50 if (solo == SCM_BOOL_T || a2 == SCM_BOOL_T || solo2 == SCM_BOOL_T)
52 text_p_ = new Item (get_property ("basicTextScriptProperties"));
53 Side_position::set_axis (text_p_, Y_AXIS);
54 announce_element (text_p_, 0);
61 if (solo == SCM_BOOL_T)
63 text = ly_str02scm ("Solo");
65 else if (solo2 == SCM_BOOL_T)
67 text = ly_str02scm ("Solo II");
70 else if (a2 == SCM_BOOL_T)
72 text = ly_str02scm ("\\`a 2");
75 Side_position::set_direction (text_p_, dir);
76 text_p_->set_elt_property ("text", text);
83 A2_engraver::acknowledge_element (Score_element_info i)
87 if (Note_head::has_interface (i.elem_l_))
89 Score_element*t = text_p_;
90 Side_position::add_support (t, i.elem_l_);
91 if (Side_position::get_axis (t) == X_AXIS
92 && !t->parent_l (Y_AXIS))
93 t->set_parent (i.elem_l_, Y_AXIS);
95 if (Stem::has_interface (i.elem_l_))
97 Side_position::add_support (text_p_, i.elem_l_);
99 SCM a2 = get_property ("a2");
100 SCM solo = get_property ("solo");
101 SCM solo2 = get_property ("solo2");
103 SCM first = get_property ("first");
104 SCM second = get_property ("second");
106 if (solo != SCM_BOOL_T
107 && solo2 != SCM_BOOL_T
110 if (first == SCM_BOOL_T)
112 Directional_element_interface (i.elem_l_).set (UP);
114 else if (second == SCM_BOOL_T)
116 Directional_element_interface (i.elem_l_).set (DOWN);
124 A2_engraver::do_pre_move_processing ()
128 Side_position::add_staff_support (text_p_);
129 typeset_element (text_p_);
132 // burp: reset properties
133 daddy_trans_l_->set_property ("a2", SCM_BOOL_F);
134 daddy_trans_l_->set_property ("solo", SCM_BOOL_F);
135 daddy_trans_l_->set_property ("solo2", SCM_BOOL_F);