diff options
author | Han-Wen Nienhuys <hanwen@xs4all.nl> | 2005-08-05 11:20:50 +0000 |
---|---|---|
committer | Han-Wen Nienhuys <hanwen@xs4all.nl> | 2005-08-05 11:20:50 +0000 |
commit | ef13fc90c2c8eebe0e1340ff41d52b05226f24ed (patch) | |
tree | d88917cd13ae77259a90acffc2bb5c05229e59bf | |
parent | 7dd7b4513a68ff88dcc52dc7312f9544f009e59e (diff) |
(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.
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | input/regression/key-signature-cancellation.ly | 22 | ||||
-rw-r--r-- | lily/key-engraver.cc | 31 |
3 files changed, 44 insertions, 14 deletions
@@ -1,5 +1,10 @@ 2005-08-05 Han-Wen Nienhuys <hanwen@xs4all.nl> + * 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"); |