]> git.donarmstrong.com Git - lilypond.git/commitdiff
Remove tied accidentals after line-breaking
authorKeith OHara <k-ohara5a5a@oco.net>
Sat, 28 Dec 2013 00:21:29 +0000 (16:21 -0800)
committerKeith OHara <k-ohara5a5a@oco.net>
Fri, 29 Aug 2014 05:15:23 +0000 (22:15 -0700)
input/regression/accidental-unbroken-tie-spacing.ly
lily/accidental.cc
lily/include/accidental-interface.hh
lily/item.cc
lily/tie-formatting-problem.cc
scm/define-grobs.scm
scm/output-lib.scm

index 7f22cdf0baa539a006e486cc0233e746baa739f5..fc3e78c6e4c99615619f53c85694ab9d3700cb12 100644 (file)
@@ -1,14 +1,22 @@
 
 \header {
-texidoc = "Tied notes with accidentals do not cause problems with spacing."
+texidoc = "Space is allowed for the actual size of accidentals on tied notes."
 }
 
-\version "2.16.0"
-
+\version "2.19.13"
+\paper {ragged-right = ##t }
 \relative c' {
   \clef treble
   \time 3/4
   c8 b2  <g b des f>8 ~ |
-  <g b des f>8
+  <g b des f>8 r
+  % Large accidental
+  \override Staff.Accidental.stencil =
+  #(lambda (g)
+     (let ((alt (ly:grob-property g 'alteration)))
+       (grob-interpret-markup g
+         (make-circle-markup (number->string alt)))))
+  bes4 ~ bes ~ | bes ~ bes bes ~ | \break
+  bes ~ bes bes
 }
 
index 62f5235b1c4693eb6b4f0fdb8bfd45703e4bdb38..ee0b6e88b9a55d3b2b42abc94a07d52c97aac18c 100644 (file)
@@ -25,6 +25,7 @@
 #include "paper-column.hh"
 #include "pitch.hh"
 #include "stencil.hh"
+#include "system.hh"
 #include "skyline-pair.hh"
 
 Stencil
@@ -43,32 +44,6 @@ parenthesize (Grob *me, Stencil m)
   return m;
 }
 
-/* If this gets called before line breaking, we will return a non-trivial
-   extent even if we belong to a tie and won't actually get printed. */
-static SCM
-get_extent (Grob *me, Axis a)
-{
-  Stencil *s = Stencil::unsmob (Accidental_interface::get_stencil (me));
-
-  if (s)
-    return ly_interval2scm (s->extent (a));
-  return ly_interval2scm (Interval ());
-}
-
-MAKE_SCHEME_CALLBACK (Accidental_interface, height, 1);
-SCM
-Accidental_interface::height (SCM smob)
-{
-  return get_extent (Grob::unsmob (smob), Y_AXIS);
-}
-
-MAKE_SCHEME_CALLBACK (Accidental_interface, width, 1);
-SCM
-Accidental_interface::width (SCM smob)
-{
-  return get_extent (Grob::unsmob (smob), X_AXIS);
-}
-
 MAKE_SCHEME_CALLBACK (Accidental_interface, horizontal_skylines, 1);
 SCM
 Accidental_interface::horizontal_skylines (SCM smob)
@@ -77,12 +52,7 @@ Accidental_interface::horizontal_skylines (SCM smob)
   if (!me->is_live ())
     return Skyline_pair ().smobbed_copy ();
 
-  /*
-   * Using the print function may trigger a suicide
-   * before line breaking. It is therefore `unpure' (c).
-   * We use the more basic get_stencil.
-   */
-  Stencil *my_stencil = Stencil::unsmob (get_stencil (me));
+  Stencil *my_stencil = Stencil::unsmob (me->get_property ("stencil"));
   if (!my_stencil)
     return Skyline_pair ().smobbed_copy ();
 
@@ -116,41 +86,42 @@ Accidental_interface::horizontal_skylines (SCM smob)
   return sky->smobbed_copy ();
 }
 
-MAKE_SCHEME_CALLBACK (Accidental_interface, pure_height, 3);
+MAKE_SCHEME_CALLBACK (Accidental_interface, height, 1);
 SCM
-Accidental_interface::pure_height (SCM smob, SCM start_scm, SCM)
+Accidental_interface::height (SCM smob)
 {
-  Item *me = dynamic_cast<Item *> (Grob::unsmob (smob));
-  int start = scm_to_int (start_scm);
-  int rank = me->get_column ()->get_rank ();
-
-  if (to_boolean (me->get_property ("forced"))
-      || !Grob::unsmob (me->get_object ("tie"))
-      || (rank == start + 1 && /* we are at the start of a line */
-          !to_boolean (me->get_property ("hide-tied-accidental-after-break"))))
-    {
-      Stencil *s = Stencil::unsmob (get_stencil (me));
-      if (s)
-        return ly_interval2scm (s->extent (Y_AXIS));
-    }
+  Grob *me = Grob::unsmob (smob);
+  Grob *tie = Grob::unsmob (me->get_object ("tie"));
+
+  if (tie
+      && !to_boolean (me->get_property ("forced"))
+      && to_boolean (me->get_property ("hide-tied-accidental-after-break")))
+    return ly_interval2scm (Interval ());
 
-  return ly_interval2scm (Interval ());
+  return Grob::stencil_height (smob);
 }
 
-MAKE_SCHEME_CALLBACK (Accidental_interface, print, 1);
+MAKE_SCHEME_CALLBACK (Accidental_interface, remove_tied, 1);
 SCM
-Accidental_interface::print (SCM smob)
+Accidental_interface::remove_tied (SCM smob)
 {
   Grob *me = Grob::unsmob (smob);
   Grob *tie = Grob::unsmob (me->get_object ("tie"));
 
   if (tie
+      && !to_boolean (me->get_property ("forced"))
       && (to_boolean (me->get_property ("hide-tied-accidental-after-break"))
-          || (!tie->original () && !to_boolean (me->get_property ("forced")))))
-    {
-      me->suicide ();
-      return SCM_EOL;
-    }
+          || !tie->original()))
+    me->suicide ();
+
+  return SCM_UNSPECIFIED;
+}
+
+MAKE_SCHEME_CALLBACK (Accidental_interface, print, 1);
+SCM
+Accidental_interface::print (SCM smob)
+{
+  Grob *me = Grob::unsmob (smob);
 
   return get_stencil (me);
 }
index 6b2c8709fb83a67d35108fba7ed56cd5c589225f..cbb61b772a0b2fd01c54b815fae0207828ba7df3 100644 (file)
@@ -30,10 +30,9 @@ class Accidental_interface
 {
 public:
   DECLARE_SCHEME_CALLBACK (print, (SCM));
-  DECLARE_SCHEME_CALLBACK (height, (SCM));
-  DECLARE_SCHEME_CALLBACK (width, (SCM));
   DECLARE_SCHEME_CALLBACK (horizontal_skylines, (SCM));
-  DECLARE_SCHEME_CALLBACK (pure_height, (SCM, SCM, SCM));
+  DECLARE_SCHEME_CALLBACK (height, (SCM));
+  DECLARE_SCHEME_CALLBACK (remove_tied, (SCM));
 
   DECLARE_GROB_INTERFACE ();
   static SCM get_stencil (Grob *me);
index f007670e7ae8974fa184b612f997bb1a83bec344..bcde47616d9915d7032944a3d2374d2e19cb6b39 100644 (file)
@@ -236,7 +236,6 @@ Item::pure_height (Grob *g, int start, int end)
     return cached_pure_height_ + pure_relative_y_coordinate (g, start, end);
   /* Note: cached_pure_height_ does not notice if start changes, implicitly
      assuming that Items' pure_heights do not depend on 'start' or 'end'.
-     Accidental_interface::pure_height(), however, does depend on 'start'.
   */
 
   cache_pure_height (Grob::pure_height (this, start, end));
index d4755f1b9a019344f1019819e9264b036cb8f9d9..8a016bde21e1d12d6bbe05f4ecce4d34a48630e9 100644 (file)
@@ -213,7 +213,7 @@ Tie_formatting_problem::set_column_chord_outline (vector<Item *> bounds,
 
           Grob *acc = Grob::unsmob (heads[i]->get_object ("accidental-grob"));
           if (acc)
-            acc->get_property ("stencil"); /* trigger tie-related suicide */
+            acc->get_property ("after-line-breaking"); /* trigger tie-related suicide */
 
           if (acc && acc->is_live () && dir == RIGHT)
             {
index 673398149f1a9f2e54e27e61cad21f32c9788bba..4139ff13daeea48e9b46d94320a023c4b12f7f60 100644 (file)
@@ -29,6 +29,7 @@
   `(
     (Accidental
      . (
+        (after-line-breaking . ,ly:accidental-interface::remove-tied)
         (alteration . ,accidental-interface::calc-alteration)
         (avoid-slur . inside)
         (glyph-name . ,accidental-interface::glyph-name)
@@ -36,7 +37,6 @@
         (stencil . ,ly:accidental-interface::print)
         (horizontal-skylines . ,(ly:make-unpure-pure-container ly:accidental-interface::horizontal-skylines))
         (vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
-        (X-extent . ,ly:accidental-interface::width)
         (Y-extent . ,accidental-interface::height)
         (meta . ((class . Item)
                  (interfaces . (accidental-interface
@@ -45,6 +45,7 @@
 
     (AccidentalCautionary
      . (
+        (after-line-breaking . ,ly:accidental-interface::remove-tied)
         (alteration . ,accidental-interface::calc-alteration)
         (avoid-slur . inside)
         (glyph-name-alist . ,standard-alteration-glyph-name-alist)
@@ -74,6 +75,7 @@
 
     (AccidentalSuggestion
      . (
+        (after-line-breaking . ,ly:accidental-interface::remove-tied)
         (alteration . ,accidental-interface::calc-alteration)
         (direction . ,UP)
         (font-size . -2)
@@ -85,7 +87,6 @@
         (side-axis . ,Y)
         (staff-padding . 0.25)
         (stencil . ,ly:accidental-interface::print)
-        (X-extent . ,ly:accidental-interface::width)
         (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
         (Y-extent . ,accidental-interface::height)
         (Y-offset . ,side-position-interface::y-aligned-side)
index 8701b6b188dd9aebf2f887bd3273d5dd7adaa9cd..739c581a14816bbccf0e92d33bed84ea3b60f0e8 100644 (file)
@@ -731,8 +731,7 @@ and duration-log @var{log}."
 
 (define-public accidental-interface::height
   (ly:make-unpure-pure-container
-   ly:accidental-interface::height
-   ly:accidental-interface::pure-height))
+   ly:accidental-interface::height))
 
 (define-public cancellation-glyph-name-alist
   '((0 . "accidentals.natural")))