]> git.donarmstrong.com Git - lilypond.git/commitdiff
Fix 1082.
authorPál Benkő <benko.pal@gmail.com>
Mon, 7 Jun 2010 20:13:10 +0000 (21:13 +0100)
committerNeil Puttock <n.puttock@gmail.com>
Mon, 7 Jun 2010 20:14:01 +0000 (21:14 +0100)
Set do_nothing_until_ unconditionally in each timestep.

input/regression/completion-heads-polyphony-2.ly [new file with mode: 0644]
lily/completion-note-heads-engraver.cc

diff --git a/input/regression/completion-heads-polyphony-2.ly b/input/regression/completion-heads-polyphony-2.ly
new file mode 100644 (file)
index 0000000..750e5ff
--- /dev/null
@@ -0,0 +1,21 @@
+\version "2.13.24"
+
+\header {
+  texidoc = "
+Complex completion heads work properly in a polyphonic environment.
+"
+}
+
+\layout {
+  \context {
+    \Voice
+    \remove "Note_heads_engraver"
+    \consists "Completion_heads_engraver"
+  }
+}
+
+\context Staff \relative c'' <<
+  { c4. c c c4 c4. c4 }
+  \\
+  { g8 g2 g1 g4. }
+>>
index eb454e71524660de3583832578bf60fa4c1a7fd2..081cf60b642ee750784024bc07986e4e27be5a47 100644 (file)
@@ -189,23 +189,25 @@ Completion_heads_engraver::process_music ()
   Duration note_dur;
   Duration *orig = 0;
   if (left_to_do_)
-    note_dur = Duration (left_to_do_ / factor_, false).compressed (factor_);
+    {
+      /*
+       note that note_dur may be strictly less than left_to_do_
+       (say, if left_to_do_ == 5/8)
+      */
+      note_dur = Duration (left_to_do_ / factor_, false).compressed (factor_);
+    }
   else
     {
       orig = unsmob_duration (note_events_[0]->get_property ("duration"));
       note_dur = *orig;
       factor_ = note_dur.factor ();
+      left_to_do_ = orig->get_length ();
     }
   Moment nb = next_barline_moment ();
   if (nb.main_part_ && nb < note_dur.get_length ())
-    {
-      note_dur = Duration (nb.main_part_ / factor_, false).compressed (factor_);
-
-      do_nothing_until_ = now.main_part_ + note_dur.get_length ();
-    }
+    note_dur = Duration (nb.main_part_ / factor_, false).compressed (factor_);
 
-  if (orig)
-    left_to_do_ = orig->get_length ();
+  do_nothing_until_ = now.main_part_ + note_dur.get_length ();
 
   for (vsize i = 0; left_to_do_ && i < note_events_.size (); i++)
     {