2 arpeggio-engraver.cc -- implement Arpeggio_engraver
4 source file of the GNU LilyPond music typesetter
6 (c) 2000 Jan Nieuwenhuizen <janneke@gnu.org>
10 #include "group-interface.hh"
12 #include "musical-request.hh"
13 #include "arpeggio.hh"
15 #include "local-key-item.hh"
16 #include "rhythmic-head.hh"
17 #include "side-position-interface.hh"
18 #include "staff-symbol-referencer.hh"
20 class Arpeggio_engraver : public Engraver
23 VIRTUAL_COPY_CONS (Translator);
27 virtual void acknowledge_element (Score_element_info);
28 virtual void process_acknowledged ();
29 virtual void do_pre_move_processing ();
30 virtual bool do_try_music (Music *);
34 Arpeggio_req *arpeggio_req_;
35 Link_array <Score_element> stems_;
36 Link_array<Score_element> supports_;
39 Arpeggio_engraver::Arpeggio_engraver ()
46 Arpeggio_engraver::do_try_music (Music* m)
50 if (Arpeggio_req *a = dynamic_cast<Arpeggio_req*> (m))
60 Arpeggio_engraver::acknowledge_element (Score_element_info info)
64 if (Stem::has_interface (info.elem_l_))
66 stems_.push (info.elem_l_);
72 We can't catch local key items from Voice context, but let's leave
73 it here in case someone moves this stuff around. */
74 if (Rhythmic_head::has_interface (info.elem_l_)
75 || Local_key_item::has_interface (info.elem_l_))
77 supports_.push (info.elem_l_);
83 Arpeggio_engraver::process_acknowledged ()
85 if (!arpeggio_ && !stems_.empty ())
87 arpeggio_ = new Item (get_property ("Arpeggio"));
88 arpeggio_->set_parent (stems_[0], Y_AXIS);
90 // Staff_symbol_referencer::set_interface (arpeggio_);
92 for (int i = 0; i < stems_.size (); i++)
94 Pointer_group_interface::add_element (arpeggio_, "stems", stems_[i]);
95 //Side_position::add_support (arpeggio_, stems_[i]);
97 for (int i = 0; i < supports_.size (); i++)
99 ;//Side_position::add_support (arpeggio_, supports_[i]);
101 announce_element (arpeggio_, arpeggio_req_);
106 Arpeggio_engraver::do_pre_move_processing ()
110 typeset_element (arpeggio_);
119 ADD_THIS_TRANSLATOR (Arpeggio_engraver);