]> git.donarmstrong.com Git - lilypond.git/blob - lily/arpeggio-engraver.cc
patch::: 1.3.94.jcn1
[lilypond.git] / lily / arpeggio-engraver.cc
1 /*   
2   arpeggio-engraver.cc -- implement Arpeggio_engraver
3   
4   source file of the GNU LilyPond music typesetter
5   
6   (c) 2000 Jan Nieuwenhuizen <janneke@gnu.org>
7  */
8
9 #include "engraver.hh"
10 #include "group-interface.hh"
11 #include "item.hh"
12 #include "arpeggio.hh"
13 #include "stem.hh"
14
15 class Arpeggio_engraver : public Engraver
16 {
17 public:
18   VIRTUAL_COPY_CONS (Translator);
19   Arpeggio_engraver ();
20
21 protected:
22   virtual void acknowledge_element (Score_element_info);
23   virtual void process_acknowledged ();
24   virtual void do_pre_move_processing ();
25
26 private:
27   Item* arpeggio_; 
28   Link_array <Score_element> stems_;
29 };
30
31 Arpeggio_engraver::Arpeggio_engraver ()
32 {
33   arpeggio_ = 0;
34 }
35
36 void
37 Arpeggio_engraver::acknowledge_element (Score_element_info info)
38 {
39   if (Stem::has_interface (info.elem_l_))
40     {
41       stems_.push (info.elem_l_);
42     }
43 }
44
45 void
46 Arpeggio_engraver::process_acknowledged ()
47 {
48   if (!arpeggio_ && !stems_.empty ())
49     {
50       arpeggio_ = new Item (get_property ("Arpeggio"));
51       Pointer_group_interface pgi (arpeggio_, "stems");
52       for (int i = 0; i < stems_.size (); i++)
53         {
54           pgi.add_element (stems_[i]);
55           arpeggio_->add_dependency (stems_[i]);
56         }
57       announce_element (arpeggio_, 0);
58     }
59 }
60
61 void
62 Arpeggio_engraver::do_pre_move_processing ()
63 {
64   if (arpeggio_)
65     {
66       typeset_element (arpeggio_);
67       arpeggio_ = 0;
68     }
69   stems_.clear ();
70 }
71
72
73 ADD_THIS_TRANSLATOR (Arpeggio_engraver);
74