X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fperformer-group-performer.cc;h=37715b538e431ee1558df1fd6a99eb062468d651;hb=108cf0e8c08c8e15e2a800feb161cfad9057daa8;hp=90029772505feb2716eee44c2f43587c01fd7cc8;hpb=e37010af17faa8b185de836664b6544bd29dc1d0;p=lilypond.git diff --git a/lily/performer-group-performer.cc b/lily/performer-group-performer.cc index 9002977250..37715b538e 100644 --- a/lily/performer-group-performer.cc +++ b/lily/performer-group-performer.cc @@ -3,54 +3,62 @@ source file of the GNU LilyPond music typesetter - (c) 1996--2004 Han-Wen Nienhuys - Jan Nieuwenhuizen - */ + (c) 1996--2005 Han-Wen Nienhuys + Jan Nieuwenhuizen +*/ #include "performer-group-performer.hh" + #include "context.hh" #include "audio-element.hh" #include "warn.hh" - -ENTER_DESCRIPTION(Performer_group_performer, -/* descr */ "", -/* creats*/ "", -/* accepts */ "", -/* acks */ "", -/* reads */ "", -/* write */ ""); - - +ADD_TRANSLATOR_GROUP (Performer_group_performer, + /* doc */ "", + /* create */ "", + /* accept */ "", + /* read */ "", + /* write */ ""); void Performer_group_performer::announce_element (Audio_element_info info) { announce_infos_.push (info); - Translator *t - = unsmob_translator (daddy_context_->daddy_context_->implementation_); + Translator_group *t + = context ()->get_parent_context ()->implementation (); - if (Performer_group_performer * eg = dynamic_cast (t)) + if (Performer_group_performer *eg = dynamic_cast (t)) eg->announce_element (info); } void Performer_group_performer::acknowledge_audio_elements () { - for (int j =0; j < announce_infos_.size (); j++) + for (int j = 0; j < announce_infos_.size (); j++) { Audio_element_info info = announce_infos_[j]; - for (SCM p = get_simple_trans_list (); gh_pair_p (p); p = ly_cdr (p)) + for (SCM p = get_simple_trans_list (); scm_is_pair (p); p = scm_cdr (p)) { - Translator * t = unsmob_translator (ly_car (p)); - Performer * eng = dynamic_cast (t); - if (eng && eng!= info.origin_trans_) + Translator *t = unsmob_translator (scm_car (p)); + Performer *eng = dynamic_cast (t); + if (eng && eng != info.origin_trans_) eng->acknowledge_audio_element (info); } } } +void +performer_each (SCM list, Performer_method method) +{ + for (SCM p = list; scm_is_pair (p); p = scm_cdr (p)) + { + Performer *e = dynamic_cast (unsmob_translator (scm_car (p))); + if (e) + (e->*method) (); + } +} + void Performer_group_performer::do_announces () { @@ -58,57 +66,35 @@ Performer_group_performer::do_announces () { performer_each (get_simple_trans_list (), &Performer::create_audio_elements); - + if (!announce_infos_.size ()) - break ; - + break; + acknowledge_audio_elements (); announce_infos_.clear (); } } -Performer_group_performer::Performer_group_performer() -{ -} - -/* c&p engraver-group.cc */ void -recurse_down_performers (Context * c, Performer_method ptr, bool context_first) +Performer_group_performer::play_element (Audio_element *e) { - Performer_group_performer * tg - = dynamic_cast (unsmob_translator (c->implementation_)); - - - if (!context_first) - { - performer_each (tg->get_simple_trans_list (), - ptr); - - (tg->*ptr) (); - } - - for (SCM s = c->context_list_ ; gh_pair_p (s); - s =gh_cdr (s)) - { - recurse_down_performers (unsmob_context (gh_car (s)), ptr, context_first); - } - - if (context_first) + Context *c = context_->get_parent_context (); + if (c) { - performer_each (tg->get_simple_trans_list (), - ptr); - (tg->*ptr) (); + Performer_group_performer *pgp = dynamic_cast (c->implementation ()); + pgp->play_element (e); } } - -void -performer_each (SCM list, Performer_method method) +int +Performer_group_performer::get_tempo () const { - for (SCM p = list; gh_pair_p (p); p = ly_cdr (p)) + Context *c = context_->get_parent_context (); + if (c) { - Performer * e = dynamic_cast(unsmob_translator (ly_car (p))); - if (e) - (e->*method) (); + Performer_group_performer *pgp = dynamic_cast (c->implementation ()); + return pgp->get_tempo (); } + return 60; } +