X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fcontext.cc;h=9e99577019660272cbbc5c1bdc66c7e1dcea7030;hb=97a0169312a260933246ab224e4f8b0969871dd5;hp=a614146058f55273bc2070d0976c356d10d346b7;hpb=b0dce4ca74c6ebf43a3f574ccf281b8bc58a3b75;p=lilypond.git diff --git a/lily/context.cc b/lily/context.cc index a614146058..9e99577019 100644 --- a/lily/context.cc +++ b/lily/context.cc @@ -56,7 +56,7 @@ Context::check_removal () Callback0_wrapper::make_smob (), UP); - send_stream_event (ctx, "RemoveContext", 0, 0); + send_stream_event (ctx, "RemoveContext", 0); } } } @@ -526,18 +526,62 @@ Context::internal_get_property (SCM sym) const } /* -Called by the send_stream_event macro. props is a 0-terminated array of -properties and corresponding values, interleaved. This method should not -be called from any other place than the send_stream_event macro. +These methods should not be called from any other place than the +send_stream_event macro. */ + void -Context::internal_send_stream_event (SCM type, Input *origin, SCM props[]) +Context::internal_send_stream_event (SCM type, Input *origin) { Stream_event *e = new Stream_event (Lily::ly_make_event_class (type), origin); - for (int i = 0; props[i]; i += 2) - { - e->set_property (props[i], props[i + 1]); - } + event_source_->broadcast (e); + e->unprotect (); +} + +void +Context::internal_send_stream_event (SCM type, Input *origin, + SCM prop, SCM val) +{ + Stream_event *e = new Stream_event (Lily::ly_make_event_class (type), origin); + e->set_property (prop, val); + event_source_->broadcast (e); + e->unprotect (); +} + +void +Context::internal_send_stream_event (SCM type, Input *origin, + SCM prop, SCM val, SCM prop2, SCM val2) +{ + Stream_event *e = new Stream_event (Lily::ly_make_event_class (type), origin); + e->set_property (prop, val); + e->set_property (prop2, val2); + event_source_->broadcast (e); + e->unprotect (); +} + +void +Context::internal_send_stream_event (SCM type, Input *origin, + SCM prop, SCM val, SCM prop2, SCM val2, + SCM prop3, SCM val3) +{ + Stream_event *e = new Stream_event (Lily::ly_make_event_class (type), origin); + e->set_property (prop, val); + e->set_property (prop2, val2); + e->set_property (prop3, val3); + event_source_->broadcast (e); + e->unprotect (); +} + +void +Context::internal_send_stream_event (SCM type, Input *origin, + SCM prop, SCM val, SCM prop2, SCM val2, + SCM prop3, SCM val3, SCM prop4, SCM val4) +{ + Stream_event *e = new Stream_event (Lily::ly_make_event_class (type), origin); + e->set_property (prop, val); + e->set_property (prop2, val2); + e->set_property (prop3, val3); + e->set_property (prop4, val4); event_source_->broadcast (e); e->unprotect (); } @@ -630,11 +674,12 @@ find_context_above (Context *where, SCM type) Context * find_context_above_by_parent_type (Context *where, SCM parent_type) { - for (Context *child = 0; where; - child = where, where = where->get_parent_context ()) - if (where->is_alias (parent_type)) - return child; - + while (Context *parent = where->get_parent_context ()) + { + if (parent->is_alias (parent_type)) + return where; + where = parent; + } return 0; }