]> git.donarmstrong.com Git - lilypond.git/commitdiff
ignore barlines in slur formatting. Fixes #156.
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Sat, 25 Nov 2006 00:42:38 +0000 (01:42 +0100)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Sat, 25 Nov 2006 14:21:23 +0000 (15:21 +0100)
(cherry picked from d089c7f43df2f3008ea9799e72601df25fcb9d28 commit)

input/regression/slur-clef.ly
lily/include/slur.hh
lily/slur-scoring.cc
lily/slur.cc
scm/define-grobs.scm

index 86d27fbe032d5539ea57830d74d35dcd0663f691..c230f6e55a00c0816b3a1b73c4ea0e62718b53d3 100644 (file)
@@ -1,6 +1,11 @@
+\header {
+  texidoc = "Slurs avoid clefs, but don't avoid barlines."
+  }
+
 \paper {
   ragged-right = ##t
-  }
+
+}
 \version "2.10.0"
 
-\new Staff { \clef bass c^( \clef "G" g') } 
+\new Staff { \clef bass c4^( \clef "G" g'4) c''1_( f'') } 
index 20667dd25cd20c59d38e7b115e23851ffca27fa1..d8603485d524ae892393a63bf564fc3ec0f54ae8 100644 (file)
@@ -19,6 +19,7 @@ class Slur
 public:
   static void add_column (Grob *me, Grob *col);
   static void add_extra_encompass (Grob *me, Grob *col);
+  static void replace_breakable_encompass_objects (Grob *me);
   static void auxiliary_acknowledge_extra_object (Grob_info, vector<Grob*>&, vector<Grob*>&);
   DECLARE_SCHEME_CALLBACK (print, (SCM));
   DECLARE_SCHEME_CALLBACK (calc_control_points, (SCM));
index ba8f5c80ccd52ba9d6c0a1a85a64ef2c4bee3058..34e20519c96c0ea34afd3ff627abe31b7411f7d2 100644 (file)
@@ -224,13 +224,14 @@ Slur_score_state::fill (Grob *me)
   slur_ = dynamic_cast<Spanner *> (me);
   columns_
     = internal_extract_grob_array (me, ly_symbol2scm ("note-columns"));
-
+  
   if (columns_.empty ())
     {
       me->suicide ();
       return;
     }
 
+  Slur::replace_breakable_encompass_objects (me);
   staff_space_ = Staff_symbol_referencer::staff_space (me);
   Real lt = me->layout ()->get_dimension (ly_symbol2scm ("line-thickness"));
   thickness_ = robust_scm2double (me->get_property ("thickness"), 1.0) * lt;
index 0128e8cdfda6f3d4ca3004c429d290fe169b691b..a87feb68506e5f4643ca4695f14886abebc3c88c 100644 (file)
@@ -9,7 +9,7 @@
 
 #include "slur.hh"
 
-
+#include "grob-array.hh"
 #include "beam.hh"
 #include "bezier.hh"
 #include "directional-element-interface.hh"
@@ -27,7 +27,7 @@
 #include "tie.hh"
 #include "warn.hh"
 #include "slur-scoring.hh"
-
+#include "separation-item.hh"
 #include "script-interface.hh"
 
 
@@ -160,6 +160,42 @@ Slur::print (SCM smob)
   return a.smobbed_copy ();
 }
 
+
+/*
+  it would be better to do this at engraver level, but that is
+  fragile, as the breakabl items are generated on staff level, at
+  which point slur starts and ends have to be tracked
+*/
+void
+Slur::replace_breakable_encompass_objects (Grob *me)
+{
+  extract_grob_set (me, "encompass-objects", extra_objects);
+  vector<Grob *> new_encompasses;
+
+  for (vsize i = 0; i < extra_objects.size (); i++)
+    {
+      Grob *g = extra_objects[i];
+      
+      if (Separation_item::has_interface (g))
+       {
+         extract_grob_set (g, "elements", breakables);
+         for (vsize j = 0; j < breakables.size (); j++)
+           if (breakables[j]->get_property ("avoid-slur") == ly_symbol2scm ("inside"))
+             new_encompasses.push_back (breakables[j]);
+       }
+      else
+       new_encompasses.push_back (g);
+    }
+
+  SCM encompass_scm = me->get_object ("encompass-objects");
+  if (Grob_array::unsmob (encompass_scm))
+    {
+      vector<Grob *> &arr =
+       unsmob_grob_array (encompass_scm)->array_reference ();
+      arr = new_encompasses;
+    }
+}
+
 Bezier
 Slur::get_curve (Grob *me)
 {
index be0de886f52b2b3479ff723aa8077582a5c2eed8..f1901803b62808da232410de4329e71419c6edce 100644 (file)
        (stencil . ,ly:clef::print)
        (glyph-name . ,ly:clef::calc-glyph-name)
        (non-musical . #t)
+       (avoid-slur . inside)
        (font-family . music)
        (break-align-symbol . clef)
        (break-visibility . ,begin-of-line-visible)
     (KeySignature
      . (
        (stencil . ,ly:key-signature-interface::print)
+       (avoid-slur . inside)
        (space-alist . (
                        (time-signature . (extra-space . 1.15))
                        (staff-bar . (extra-space . 1.1))
        (stencil . ,ly:time-signature::print)
        (break-align-symbol . time-signature)
        (break-visibility . ,all-visible)
+       (avoid-slur . inside)
        (space-alist . (
                        (first-note . (fixed-space . 2.0))
                        (right-edge . (extra-space . 0.5))