From 9a04be5a6a01e26583bc1d03e7e41fe102716262 Mon Sep 17 00:00:00 2001 From: hanwen Date: Fri, 5 Aug 2005 11:20:50 +0000 Subject: [PATCH] (create_key): always print a cancellation for going to C-major/A-minor, regardless of printKeyCancellation. (create_key): remove typecheck for visibility. This fixes key signature not being printed. --- ChangeLog | 5 +++ .../regression/key-signature-cancellation.ly | 22 ++++++++----- lily/key-engraver.cc | 31 +++++++++++++++---- 3 files changed, 44 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index 76d0d19912..ac885b1399 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2005-08-05 Han-Wen Nienhuys + * lily/key-engraver.cc (create_key): always print a cancellation + for going to C-major/A-minor, regardless of printKeyCancellation. + (create_key): remove typecheck for visibility. This fixes key + signature not being printed. + * lily/spacing-determine-loose-columns.cc: new file. * input/regression/spacing-strict-notespacing.ly: new file. diff --git a/input/regression/key-signature-cancellation.ly b/input/regression/key-signature-cancellation.ly index a776e3c083..bf4453181e 100644 --- a/input/regression/key-signature-cancellation.ly +++ b/input/regression/key-signature-cancellation.ly @@ -1,19 +1,25 @@ -\header { texidoc = "Cancellation signs are printed by default. The - spacing of the natural signs depends on their vertical - positions. The stems should not clash graphically." +\header { + + texidoc = "Key cancellation signs consists of naturals for pitches + that are not in the new key signature. Naturals get a little padding + so the stems don't collide." } \version "2.6.0" \layout { - raggedright = ##t + raggedright = ##t } { - \key a \major - g'1 - \key f \minor - g'1 + \key a \major + g'1 + \key f \minor + g'1 + \key cis \major + g'1 + \key c \major + g'1 } diff --git a/lily/key-engraver.cc b/lily/key-engraver.cc index 3a4e848907..af402a8307 100644 --- a/lily/key-engraver.cc +++ b/lily/key-engraver.cc @@ -44,7 +44,6 @@ protected: DECLARE_ACKNOWLEDGER (clef); DECLARE_ACKNOWLEDGER (bar_line); - }; void @@ -64,18 +63,36 @@ Key_engraver::create_key (bool is_default) { if (!item_) { - item_ = make_item ("KeySignature", key_event_ ? key_event_->self_scm () : SCM_EOL); + item_ = make_item ("KeySignature", + key_event_ ? key_event_->self_scm () : SCM_EOL); item_->set_property ("c0-position", get_property ("middleCPosition")); SCM last = get_property ("lastKeySignature"); SCM key = get_property ("keySignature"); - if (to_boolean (get_property ("printKeyCancellation")) + + if ((to_boolean (get_property ("printKeyCancellation")) + || key == SCM_EOL) && !scm_is_eq (last, key)) { - cancellation_ = make_item ("KeyCancellation", key_event_ ? key_event_->self_scm () : SCM_EOL); - cancellation_->set_property ("accidentals", last); + cancellation_ = make_item ("KeyCancellation", + key_event_ + ? key_event_->self_scm () : SCM_EOL); + + SCM restore = SCM_EOL; + SCM *tail = &restore; + for (SCM s = last; scm_is_pair (s); s = scm_cdr (s)) + { + if (scm_assoc (scm_caar (s), key) == SCM_BOOL_F) + { + *tail = scm_acons (scm_caar (s), + scm_from_int (0), *tail); + tail = SCM_CDRLOC(*tail); + } + } + + cancellation_->set_property ("accidentals", restore); cancellation_->set_property ("c0-position", get_property ("middleCPosition")); } @@ -189,5 +206,7 @@ ADD_TRANSLATOR (Key_engraver, /* descr */ "", /* creats*/ "KeySignature", /* accepts */ "key-change-event", - /* reads */ "keySignature printKeyCancellation lastKeySignature explicitKeySignatureVisibility createKeyOnClefChange keyAccidentalOrder keySignature", + /* reads */ "keySignature printKeyCancellation lastKeySignature " + "explicitKeySignatureVisibility createKeyOnClefChange " + "keyAccidentalOrder keySignature", /* write */ "lastKeySignature tonic keySignature"); -- 2.39.5