X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fcompletion-note-heads-engraver.cc;h=5775ef188a17e8bbd2cd3ab45c001115a1782d77;hb=058370efc7e9710f149d0f444328bb1fcd7bdec1;hp=b606ab4e2b4ec6019cd504c1b96d58cf6a2462e0;hpb=bd751630011a6fbfcf069ec1fc41a8eaed8a6b87;p=lilypond.git diff --git a/lily/completion-note-heads-engraver.cc b/lily/completion-note-heads-engraver.cc index b606ab4e2b..5775ef188a 100644 --- a/lily/completion-note-heads-engraver.cc +++ b/lily/completion-note-heads-engraver.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--2014 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -59,8 +59,6 @@ class Completion_heads_engraver : public Engraver vector notes_; vector prev_notes_; // Must remember notes for explicit ties. - vector tie_note_candidates_; - vector tie_note_candidate_events_; vector ties_; vector note_events_; Spanner *tie_column_; @@ -190,25 +188,24 @@ Completion_heads_engraver::process_music () note that note_dur may be strictly less than left_to_do_ (say, if left_to_do_ == 5/8) */ - if (factor_.denominator () == 1 && factor_ > Rational (1, 1)) - note_dur = Duration (left_to_do_, false); - else - note_dur = Duration (left_to_do_ / factor_, false).compressed (factor_); + 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 (); + SCM factor = get_property ("completionFactor"); + if (ly_is_procedure (factor)) + factor = scm_call_2 (factor, + context ()->self_scm (), + note_dur.smobbed_copy ()); + factor_ = robust_scm2rational (factor, note_dur.factor ()); left_to_do_ = orig->get_length (); } Moment nb = next_moment (note_dur.get_length ()); if (nb.main_part_ && nb < note_dur.get_length ()) { - if (factor_.denominator () == 1 && factor_.numerator () > 1) - note_dur = Duration (nb.main_part_, false); - else - note_dur = Duration (nb.main_part_ / factor_, false).compressed (factor_); + note_dur = Duration (nb.main_part_ / factor_, false).compressed (factor_); } do_nothing_until_ = now.main_part_ + note_dur.get_length (); @@ -271,6 +268,7 @@ Completion_heads_engraver::make_tie (Grob *left, Grob *right) Grob *p = make_spanner ("Tie", SCM_EOL); Tie::set_head (p, LEFT, left); Tie::set_head (p, RIGHT, right); + announce_end_grob (p, SCM_EOL); ties_.push_back (p); } @@ -291,9 +289,6 @@ Completion_heads_engraver::start_translation_timestep () Moment now = now_mom (); if (note_end_mom_.main_part_ <= now.main_part_) { - tie_note_candidate_events_ = note_events_; - tie_note_candidates_ = prev_notes_; - note_events_.clear (); prev_notes_.clear (); } @@ -318,6 +313,7 @@ ADD_TRANSLATOR (Completion_heads_engraver, "TieColumn ", /* read */ + "completionFactor " "completionUnit " "measureLength " "measurePosition "