From: Rune Zedeler Date: Tue, 19 Dec 2006 09:38:28 +0000 (+0100) Subject: Fix #106 and problems with 'modern accidental style. X-Git-Tag: release/2.11.3-1~4 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=bc7d91f1cb213b8db6b96ca164496d44d69938dd;hp=ec5c784d689ceab3270e3858fb6b8618ca0dbfe0;p=lilypond.git Fix #106 and problems with 'modern accidental style. --- diff --git a/lily/accidental-engraver.cc b/lily/accidental-engraver.cc index 9d671c11e6..5a15fbbd36 100644 --- a/lily/accidental-engraver.cc +++ b/lily/accidental-engraver.cc @@ -66,7 +66,6 @@ protected: void acknowledge_finger (Grob_info); void stop_translation_timestep (); - virtual void initialize (); void process_acknowledged (); virtual void finalize (); virtual void derived_mark () const; @@ -120,21 +119,17 @@ Accidental_engraver::update_local_key_signature () Context *trans = context ()->get_parent_context (); - /* Huh. Don't understand what this is good for. --hwn. */ + /* Reset parent contexts so that e.g. piano-accidentals won't remember old + cross-staff accidentals after key-sig-changes */ SCM val; - while (trans && trans->where_defined (ly_symbol2scm ("localKeySignature"), &val)) + while (trans && trans->where_defined (ly_symbol2scm ("localKeySignature"), &val)==trans) { trans->set_property ("localKeySignature", ly_deep_copy (last_keysig_)); trans = trans->get_parent_context (); } } -void -Accidental_engraver::initialize () -{ - update_local_key_signature (); -} /** Calculate the number of accidentals on basis of the current local key sig (passed as argument) @@ -194,10 +189,14 @@ number_accidentals_from_sig (bool *different, SCM sig, Pitch *pitch, SCM entry = scm_car (s); if (scm_is_pair (scm_car (entry)) && scm_cdar (entry) == scm_from_int (n)) - from_other_octaves = scm_cdr (entry); + { + from_other_octaves = scm_cdr (entry); + break; + } } - if (from_same_octave != SCM_BOOL_F + if (!ignore_octave + && from_same_octave != SCM_BOOL_F && recent_enough (bar_number, from_same_octave, laziness)) previous_alteration = from_same_octave; else if (ignore_octave