]> git.donarmstrong.com Git - lilypond.git/commitdiff
Implements bound-alignment-interfaces for NonMusicalPaperColumn.
authorMike Solomon <mike@apollinemike.com>
Fri, 10 Feb 2012 07:30:01 +0000 (08:30 +0100)
committerMike Solomon <mike@apollinemike.com>
Fri, 10 Feb 2012 07:30:01 +0000 (08:30 +0100)
This includes all grobs save break-alignable grobs usch as
MetronomeMark and RehearsalMark.

input/regression/metronome-mark-broken-bound.ly [new file with mode: 0644]
lily/beam.cc
lily/hairpin.cc
lily/lyric-hyphen.cc
lily/ottava-bracket.cc
lily/tuplet-bracket.cc
scm/define-grobs.scm

diff --git a/input/regression/metronome-mark-broken-bound.ly b/input/regression/metronome-mark-broken-bound.ly
new file mode 100644 (file)
index 0000000..a4d1cf2
--- /dev/null
@@ -0,0 +1,36 @@
+\version "2.15.28"
+
+\header {
+texidoc = "A @code{MetronomeMark}, @code{RehearsalMark} and @code{BarNumber}
+should not effect the starting point of spanners.
+"
+}
+
+<<
+ \new Staff {
+   e'1 \time 4/4 \break |
+   \tempo \markup { "fooooo" } 4 = 90
+   e'1 |
+   e'1 |
+ }
+
+ \new Staff {
+   \override Score.MetronomeMark #'break-visibility = #all-visible
+   \override TupletBracket #'breakable = ##t
+   \override Beam #'breakable = ##t
+   \override Glissando #'breakable = ##t
+
+   \ottava #1 \times 1/1 { e'8\<\startTextSpan\startTrillSpan\glissando
+     [ \override NoteColumn #'glissando-skip = ##t\repeat unfold 22 e'8
+       \revert NoteColumn #'glissando-skip e'8\!\stopTextSpan\stopTrillSpan ] } |
+ }
+ \addlyrics { ah __ \repeat unfold 21 { \skip 4 } _ rrgh }
+ \addlyrics { ah --  \repeat unfold 21 { \skip 4 } _ rrgh }
+>>
+
+\layout {
+ \context {
+   \Voice
+   \remove "Forbid_line_break_engraver"
+ }
+}
index d0b975ec04c10f74d7afe6c58f6798b5f49b334d..4a27d648e1a0790f5321b12bc1a42bf518bf03be 100644 (file)
@@ -37,6 +37,7 @@
 
 #include "beam.hh"
 
+#include "axis-group-interface.hh"
 #include "align-interface.hh"
 #include "beam-scoring-problem.hh"
 #include "beaming-pattern.hh"
@@ -483,8 +484,8 @@ Beam::calc_beam_segments (SCM smob)
                       && me->get_bound (event_dir)->break_status_dir ())
                     {
                       current.horizontal_[event_dir]
-                        = (robust_relative_extent (me->get_bound (event_dir),
-                                                   commonx, X_AXIS)[RIGHT]
+                        = (Axis_group_interface::generic_bound_extent (me->get_bound (event_dir),
+                                                                       commonx, X_AXIS)[RIGHT]
                            + event_dir * break_overshoot[event_dir]);
                     }
                   else
index bf590a564bbbf9d0f1b742bdfeebd2ac6338081d..7ef0f847a1e8fdf30e3231434cbb84209d119f57 100644 (file)
@@ -165,9 +165,9 @@ Hairpin::print (SCM smob)
   do
     {
       Item *b = bounds[d];
-      Interval e = (Axis_group_interface::has_interface (b)
-                    ? Axis_group_interface::generic_bound_extent (b, common, X_AXIS)
-                    : robust_relative_extent (b, common, X_AXIS));
+      Interval e = (Paper_column::has_interface (b) && b->break_status_dir ())
+                   ? Axis_group_interface::generic_bound_extent (b, common, X_AXIS)
+                   : robust_relative_extent (b, common, X_AXIS);
 
       x_points[d] = b->relative_coordinate (common, X_AXIS);
       if (broken [d])
index 86ae8cdc659a85345f436740d057a1d9ef86c1e8..4ce2fddeb86724b23b2da75f03fd482b8b357253 100644 (file)
@@ -19,6 +19,7 @@
 
 #include "lyric-hyphen.hh"
 
+#include "axis-group-interface.hh"
 #include "lookup.hh"
 #include "output-def.hh"
 #include "paper-column.hh"
@@ -47,10 +48,11 @@ Lyric_hyphen::print (SCM smob)
 
   Interval span_points;
   Direction d = LEFT;
-  Drul_array<bool> broken;
   do
     {
-      Interval iv = bounds[d]->extent (common, X_AXIS);
+      Interval iv = bounds[d]->break_status_dir ()
+                    ? Axis_group_interface::generic_bound_extent (bounds[d], common, X_AXIS)
+                    : robust_relative_extent (bounds[d], common, X_AXIS);
 
       span_points[d] = iv.is_empty ()
                        ? bounds[d]->relative_coordinate (common, X_AXIS)
index 38040342ca645c9ac75501ed3ab9774c31be282b..cbe9928b6e977b12b31d4e31aa913c9e2c667232 100644 (file)
@@ -17,6 +17,7 @@
   along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 */
 
+#include "axis-group-interface.hh"
 #include "text-interface.hh"
 #include "spanner.hh"
 #include "font-interface.hh"
@@ -114,7 +115,7 @@ Ottava_bracket::print (SCM smob)
 
       if (broken[d])
         {
-          span_points[d] = b->extent (common, X_AXIS)[RIGHT];
+          span_points[d] = Axis_group_interface::generic_bound_extent (b, common, X_AXIS)[RIGHT];
           shorten[d] = 0.;
         }
 
index dbbd782cfbe7a219a09d7ec6d41a14330ace36b0..40e0c728c5ef2c353de391bd5da025386bce7007 100644 (file)
@@ -41,6 +41,7 @@
 */
 
 #include "tuplet-bracket.hh"
+#include "axis-group-interface.hh"
 #include "line-interface.hh"
 #include "beam.hh"
 #include "warn.hh"
@@ -203,8 +204,9 @@ Tuplet_bracket::calc_x_positions (SCM smob)
   Direction d = LEFT;
   do
     {
-      x_span[d] = robust_relative_extent (bounds[d], commonx, X_AXIS)[d];
-
+      x_span[d] = bounds[d]->break_status_dir ()
+                  ? Axis_group_interface::generic_bound_extent (bounds[d], commonx, X_AXIS)[d]
+                  : robust_relative_extent (bounds[d], commonx, X_AXIS)[d];
       if (connect_to_other[d])
         {
           Interval overshoot (robust_scm2drul (me->get_property ("break-overshoot"),
@@ -213,8 +215,9 @@ Tuplet_bracket::calc_x_positions (SCM smob)
           if (d == RIGHT)
             x_span[d] += d * overshoot[d];
           else
-            x_span[d] = robust_relative_extent (bounds[d],
-                                                commonx, X_AXIS)[RIGHT]
+            x_span[d] = (bounds[d]->break_status_dir ()
+                  ? Axis_group_interface::generic_bound_extent (bounds[d], commonx, X_AXIS)[-d]
+                  : robust_relative_extent (bounds[d], commonx, X_AXIS)[-d])
                         - overshoot[LEFT];
         }
 
index 97645233c63a9057a319541fb4413b020ca9d002..1b9507a0b882bf84a6ab0a90a79b2a6d714cd80c 100644 (file)
        (allow-loose-spacing . #t)
        (axes . (,X))
        (before-line-breaking . ,ly:paper-column::before-line-breaking)
+       (bound-alignment-interfaces . (break-alignment-interface))
        (full-measure-extra-space . 1.0)
        (horizontal-skylines . ,ly:separation-item::calc-skylines)
        ;;                    (stencil . ,ly:paper-column::print)