From 6a023cc84879573668eaf9120bb13b93cfdf12cb Mon Sep 17 00:00:00 2001 From: David Kastrup Date: Thu, 2 Oct 2014 16:13:51 +0200 Subject: [PATCH] Issue 630/3: Let Grace_iterator produce a GraceChange event --- lily/grace-iterator.cc | 11 ++++++++++- lily/include/grace-iterator.hh | 2 ++ scm/define-event-classes.scm | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/lily/grace-iterator.cc b/lily/grace-iterator.cc index c0c6c6ec2c..97920b06e6 100644 --- a/lily/grace-iterator.cc +++ b/lily/grace-iterator.cc @@ -19,13 +19,22 @@ #include "grace-iterator.hh" #include "global-context.hh" -#include "warn.hh" +#include "music.hh" void Grace_iterator::process (Moment m) { Moment main; main.main_part_ = -start_mom_.grace_part_ + m.grace_part_; + + // GraceChange is announced in order to make the Grace_engraver able + // to distinguish \stemNeutral \grace { ... and \grace { \stemNeutral ... + if (in_grace_ != bool (m.grace_part_) && child_iter_ && child_iter_->get_outlet ()) + { + send_stream_event (child_iter_->get_outlet (), "GraceChange", get_music ()->origin (), 0); + } + in_grace_ = m.grace_part_; + Music_wrapper_iterator::process (main); /* We can safely do this, since \grace should always be inside diff --git a/lily/include/grace-iterator.hh b/lily/include/grace-iterator.hh index 4da3511c0b..4718adf0be 100644 --- a/lily/include/grace-iterator.hh +++ b/lily/include/grace-iterator.hh @@ -24,7 +24,9 @@ class Grace_iterator : public Music_wrapper_iterator { + bool in_grace_; public: + Grace_iterator() : in_grace_ (false) { } virtual void process (Moment); DECLARE_SCHEME_CALLBACK (constructor, ()); DECLARE_CLASSNAME (Grace_iterator); diff --git a/scm/define-event-classes.scm b/scm/define-event-classes.scm index b568945081..9e1f4e5936 100644 --- a/scm/define-event-classes.scm +++ b/scm/define-event-classes.scm @@ -25,7 +25,7 @@ (RemoveContext ChangeParent Override Revert UnsetProperty SetProperty music-event OldMusicEvent CreateContext Prepare - OneTimeStep Finish)) + OneTimeStep Finish GraceChange)) (music-event . (annotate-output-event footnote-event arpeggio-event breathing-event extender-event span-event rhythmic-event dynamic-event -- 2.39.5