From 6af4c7db17a78fa1b8a0e8f59190135101ad95ce Mon Sep 17 00:00:00 2001 From: =?utf8?q?P=C3=A1l=20Benk=C5=91?= Date: Tue, 4 May 2010 22:32:54 +0100 Subject: [PATCH] Make Completion_heads_engraver respect tuplets and scaling. Use compression factor from original note to calculate durations of cloned notes. --- input/regression/completion-heads-tuplets.ly | 20 ++++++++++++++++++++ lily/completion-note-heads-engraver.cc | 7 +++++-- 2 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 input/regression/completion-heads-tuplets.ly diff --git a/input/regression/completion-heads-tuplets.ly b/input/regression/completion-heads-tuplets.ly new file mode 100644 index 0000000000..a4983305c6 --- /dev/null +++ b/input/regression/completion-heads-tuplets.ly @@ -0,0 +1,20 @@ +\version "2.13.20" + +\header { + texidoc = " +Completion heads may be used with tuplets (and compressed music) too. +" +} + +\layout { + \context { + \Voice + \remove "Note_heads_engraver" + \consists "Completion_heads_engraver" + } +} + +\context Staff \relative c'' { + \set tupletSpannerDuration = #(ly:make-moment 1 1) + \times 2/3 { g1 g g } +} diff --git a/lily/completion-note-heads-engraver.cc b/lily/completion-note-heads-engraver.cc index 3e507ec886..eb454e7152 100644 --- a/lily/completion-note-heads-engraver.cc +++ b/lily/completion-note-heads-engraver.cc @@ -87,6 +87,8 @@ class Completion_heads_engraver : public Engraver Rational left_to_do_; Rational do_nothing_until_; + Rational factor_; + Moment next_barline_moment (); Item *make_note_head (Stream_event*); @@ -187,16 +189,17 @@ Completion_heads_engraver::process_music () Duration note_dur; Duration *orig = 0; if (left_to_do_) - note_dur = Duration (left_to_do_, false); + 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 (); } Moment nb = next_barline_moment (); if (nb.main_part_ && nb < note_dur.get_length ()) { - note_dur = Duration (nb.main_part_, false); + note_dur = Duration (nb.main_part_ / factor_, false).compressed (factor_); do_nothing_until_ = now.main_part_ + note_dur.get_length (); } -- 2.39.5