+/**
+ Make accidentals. Catches note heads, ties and notices key-change
+ events. Due to interaction with ties (which don't come together
+ with note heads), this needs to be in a context higher than Tie_engraver.
+ (FIXME).
+
+ FIXME: should not compute vertical positioning of accidentals, but
+ get them from the noteheads
+
+*/
+
+
+struct Local_key_engraver : Engraver {
+ Item *key_item_p_;
+protected:
+ VIRTUAL_COPY_CONS(Translator);
+ virtual void do_process_music();
+ virtual void acknowledge_element (Score_element_info);
+ virtual void do_pre_move_processing();
+ virtual void do_creation_processing ();
+ virtual void process_acknowledged ();
+ virtual void do_removal_processing ();
+public:
+
+ // todo -> property
+ SCM last_keysig_;
+
+ /*
+ Urgh. Since the accidentals depend on lots of variables, we have to
+ store all information before we can really create the accidentals.
+ */
+ Link_array<Score_element> arpeggios_;
+
+ Link_array<Note_req> mel_l_arr_;
+ Link_array<Score_element> support_l_arr_;
+ Link_array<Item> forced_l_arr_;
+ Link_array<Score_element> tied_l_arr_;
+ Local_key_engraver();
+
+ Item * grace_align_l_;
+};