X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fspan-arpeggio-engraver.cc;h=72cdfbad8501cf44387eaf3978bc6f0d9087469c;hb=108cf0e8c08c8e15e2a800feb161cfad9057daa8;hp=8495a2f5fecb594beb2942e07d3a26cd5d509dfd;hpb=02c656d3b0cb895cc81b428d699d960746800e45;p=lilypond.git diff --git a/lily/span-arpeggio-engraver.cc b/lily/span-arpeggio-engraver.cc index 8495a2f5fe..72cdfbad85 100644 --- a/lily/span-arpeggio-engraver.cc +++ b/lily/span-arpeggio-engraver.cc @@ -10,7 +10,7 @@ #include "engraver.hh" #include "arpeggio.hh" -#include "group-interface.hh" +#include "pointer-group-interface.hh" #include "side-position-interface.hh" #include "staff-symbol-referencer.hh" @@ -22,11 +22,11 @@ class Span_arpeggio_engraver : public Engraver { public: TRANSLATOR_DECLARATIONS (Span_arpeggio_engraver); + DECLARE_ACKNOWLEDGER (arpeggio); protected: - virtual void acknowledge_grob (Grob_info); - virtual void process_acknowledged_grobs (); - virtual void stop_translation_timestep (); + void process_acknowledged (); + void stop_translation_timestep (); private: Item *span_arpeggio_; @@ -39,17 +39,14 @@ Span_arpeggio_engraver::Span_arpeggio_engraver () } void -Span_arpeggio_engraver::acknowledge_grob (Grob_info info) +Span_arpeggio_engraver::acknowledge_arpeggio (Grob_info info) { - if (Arpeggio::has_interface (info.grob ()) - && info.origin_contexts (this).size ()) // huh? what's this test for? - { - arpeggios_.push (info.grob ()); - } + if (info.origin_contexts (this).size ()) // huh? what's this test for? + arpeggios_.push (info.grob ()); } void -Span_arpeggio_engraver::process_acknowledged_grobs () +Span_arpeggio_engraver::process_acknowledged () { /* connectArpeggios is slightly brusque; we should really read a grob @@ -60,9 +57,7 @@ Span_arpeggio_engraver::process_acknowledged_grobs () */ if (!span_arpeggio_ && arpeggios_.size () > 1 && to_boolean (get_property ("connectArpeggios"))) - { - span_arpeggio_ = make_item ("Arpeggio", SCM_EOL); - } + span_arpeggio_ = make_item ("Arpeggio", SCM_EOL); } void @@ -74,20 +69,23 @@ Span_arpeggio_engraver::stop_translation_timestep () we do this very late, to make sure we also catch `extra' side-pos support like accidentals. */ - for (int i = 0; i < arpeggios_.size (); i++) + for (int j = 0; j < arpeggios_.size (); j++) { - for (SCM s = arpeggios_[i]->get_property ("stems"); - scm_is_pair (s); s = scm_cdr (s)) - Group_interface::add_thing (span_arpeggio_, ly_symbol2scm ("stems"), scm_car (s)); - for (SCM s = arpeggios_[i]->get_property ("side-support-elements"); - scm_is_pair (s); s = scm_cdr (s)) - Group_interface::add_thing (span_arpeggio_, ly_symbol2scm ("side-support-elements"), scm_car (s)); + extract_grob_set (arpeggios_[j], "stems", stems); + for (int i = stems.size (); i--;) + Pointer_group_interface::add_grob (span_arpeggio_, ly_symbol2scm ("stems"), + stems[i]); + + extract_grob_set (arpeggios_[j], "side-support-elements", sses); + for (int i = sses.size (); i--;) + Pointer_group_interface::add_grob (span_arpeggio_, ly_symbol2scm ("side-support-elements"), + sses[i]); /* we can't kill the children, since we don't want to the previous note to bump into the span arpeggio; so we make it transparent. */ - arpeggios_[i]->set_property ("print-function", SCM_EOL); + arpeggios_[j]->set_property ("print-function", SCM_EOL); } span_arpeggio_ = 0; @@ -95,10 +93,12 @@ Span_arpeggio_engraver::stop_translation_timestep () arpeggios_.clear (); } +#include "translator.icc" + +ADD_ACKNOWLEDGER (Span_arpeggio_engraver, arpeggio); ADD_TRANSLATOR (Span_arpeggio_engraver, - /* descr */ "", - /* creats*/ "Arpeggio", - /* accepts */ "", - /* acks */ "arpeggio-interface", - /* reads */ "connectArpeggios", + /* doc */ "", + /* create */ "Arpeggio", + /* accept */ "", + /* read */ "connectArpeggios", /* write */ "");