]> git.donarmstrong.com Git - lilypond.git/commitdiff
(create_key): always print a cancellation
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Fri, 5 Aug 2005 11:20:50 +0000 (11:20 +0000)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Fri, 5 Aug 2005 11:20:50 +0000 (11:20 +0000)
for going to C-major/A-minor, regardless of printKeyCancellation.
(create_key): remove typecheck for visibility. This fixes key
signature not being printed.

ChangeLog
input/regression/key-signature-cancellation.ly
lily/key-engraver.cc

index 76d0d19912d9689c1b0d492518a1aa98f8a2c3b7..ac885b1399f6989da6a0004c132d05675e569ba1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
index a776e3c083e3195704a4044eb037e83b1550f638..bf4453181ec345355b9e2b9d71b5e627bcc0593b 100644 (file)
@@ -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
 }
index 3a4e848907bb550fb1bbd44736f2e507d2e28038..af402a8307720f25be2d82cff48e3c108101f8f2 100644 (file)
@@ -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");