+\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'') }
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));
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;
#include "slur.hh"
-
+#include "grob-array.hh"
#include "beam.hh"
#include "bezier.hh"
#include "directional-element-interface.hh"
#include "tie.hh"
#include "warn.hh"
#include "slur-scoring.hh"
-
+#include "separation-item.hh"
#include "script-interface.hh"
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)
{
(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))