]> git.donarmstrong.com Git - lilypond.git/commitdiff
Issue 630/3: Let Grace_iterator produce a GraceChange event
authorDavid Kastrup <dak@gnu.org>
Thu, 2 Oct 2014 14:13:51 +0000 (16:13 +0200)
committerDavid Kastrup <dak@gnu.org>
Thu, 9 Oct 2014 11:27:03 +0000 (13:27 +0200)
lily/grace-iterator.cc
lily/include/grace-iterator.hh
scm/define-event-classes.scm

index c0c6c6ec2cb2f30c78dc154b54b52bc9ed383c48..97920b06e6a5c886eaa3b09e7318f33f952728f8 100644 (file)
 
 #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
index 4da3511c0be8d36d6b0a3600f77f7c200576e604..4718adf0be3191cbe4d93575377c4aaeccb667e3 100644 (file)
@@ -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);
index b56894508122c37b573711818b614194a6af85cd..9e1f4e5936fb3e31be23493485104875ba3f0ea0 100644 (file)
@@ -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