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_);
68 else if (Rhythmic_head::has_interface (info.elem_l_)
69 || Local_key_item::has_interface (info.elem_l_))
71 supports_.push (info.elem_l_);
77 Arpeggio_engraver::process_acknowledged ()
79 if (!arpeggio_ && !stems_.empty ())
81 arpeggio_ = new Item (get_property ("Arpeggio"));
82 arpeggio_->set_parent (stems_[0], Y_AXIS);
83 Side_position::set_axis (arpeggio_, X_AXIS);
84 Side_position::set_direction (arpeggio_, LEFT);
85 Staff_symbol_referencer::set_interface (arpeggio_);
86 Pointer_group_interface pgi (arpeggio_, "stems");
87 for (int i = 0; i < stems_.size (); i++)
89 pgi.add_element (stems_[i]);
90 //Side_position::add_support (arpeggio_, stems_[i]);
92 for (int i = 0; i < supports_.size (); i++)
94 ;//Side_position::add_support (arpeggio_, supports_[i]);
96 announce_element (arpeggio_, arpeggio_req_);
101 Arpeggio_engraver::do_pre_move_processing ()
105 typeset_element (arpeggio_);
114 ADD_THIS_TRANSLATOR (Arpeggio_engraver);