X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;ds=sidebyside;f=lily%2Fscore-engraver.cc;h=91cca081e727f21c6611a460d329e4c79973ceae;hb=d074a270e77c60df45914e7442bcc89d68119cdc;hp=ba80e75bb6ac6052cecd38c0e3b465ba4e47e51a;hpb=d4f38c4239f67dd08d616794a9cdc47a30a86b6a;p=lilypond.git diff --git a/lily/score-engraver.cc b/lily/score-engraver.cc index ba80e75bb6..91cca081e7 100644 --- a/lily/score-engraver.cc +++ b/lily/score-engraver.cc @@ -11,6 +11,7 @@ #include "all-font-metrics.hh" #include "axis-group-interface.hh" #include "context-def.hh" +#include "dispatcher.hh" #include "global-context.hh" #include "international.hh" #include "main.hh" @@ -33,20 +34,19 @@ Score_engraver::derived_mark () const { if (pscore_) scm_gc_mark (pscore_->self_scm ()); - Score_translator::derived_mark (); Engraver_group::derived_mark (); } +IMPLEMENT_LISTENER (Score_engraver, prepare); void -Score_engraver::prepare (Moment m) +Score_engraver::prepare (SCM) { - (void) m; - precomputed_recurse_over_translators (context (), START_TRANSLATION_TIMESTEP, DOWN); } +IMPLEMENT_LISTENER (Score_engraver, finish); void -Score_engraver::finish () +Score_engraver::finish (SCM) { recurse_over_translators (context (), &Translator::finalize, &Translator_group::finalize, @@ -75,6 +75,7 @@ Score_engraver::initialize () pscore_ = new Paper_score (dynamic_cast (context ()->get_output_def ())); pscore_->unprotect (); + context ()->set_property ("output", pscore_->self_scm ()); SCM props = updated_grob_properties (context (), ly_symbol2scm ("System")); @@ -87,16 +88,39 @@ Score_engraver::initialize () Engraver_group::initialize (); } +void +Score_engraver::connect_to_context (Context *c) +{ + Engraver_group::connect_to_context (c); + + Dispatcher *d = c->get_global_context ()->event_source (); + d->add_listener (GET_LISTENER (one_time_step), ly_symbol2scm ("OneTimeStep")); + d->add_listener (GET_LISTENER (prepare), ly_symbol2scm ("Prepare")); + d->add_listener (GET_LISTENER (finish), ly_symbol2scm ("Finish")); +} + +void +Score_engraver::disconnect_from_context () +{ + Dispatcher *d = context ()->get_global_context ()->event_source (); + d->remove_listener (GET_LISTENER (one_time_step), ly_symbol2scm ("OneTimeStep")); + d->remove_listener (GET_LISTENER (prepare), ly_symbol2scm ("Prepare")); + d->remove_listener (GET_LISTENER (finish), ly_symbol2scm ("Finish")); + + Engraver_group::disconnect_from_context (); +} + void Score_engraver::finalize () { - Score_translator::finalize (); + Engraver_group::finalize (); typeset_all (); } +IMPLEMENT_LISTENER(Score_engraver, one_time_step); void -Score_engraver::one_time_step () +Score_engraver::one_time_step (SCM) { if (!to_boolean (context ()->get_property ("skipTypesetting"))) { @@ -132,22 +156,6 @@ Score_engraver::typeset_all () elems_.clear (); } -SCM -Score_engraver::get_output () -{ - Music_output *o = pscore_; - return o->self_scm (); -} - -bool -Score_engraver::try_music (Music *m) -{ - if (Engraver_group::try_music (m)) - return true; - - return false; -} - ADD_TRANSLATOR_GROUP (Score_engraver, /* doc */ "Top level engraver. Takes care of generating columns and the complete system (ie. System) " "\n\n " @@ -159,9 +167,6 @@ ADD_TRANSLATOR_GROUP (Score_engraver, "that there are no beams or notes that prevent a breakpoint.) ", /* create */ "System ", - - /* accept */ - "break-event", /* read */ "currentMusicalColumn "