]> git.donarmstrong.com Git - lilypond.git/commitdiff
TupletBracket and TupletNumber avoid Script by default.
authorMike Solomon <mike@apollinemike.com>
Wed, 28 Dec 2011 08:50:18 +0000 (09:50 +0100)
committerMike Solomon <mike@apollinemike.com>
Wed, 28 Dec 2011 08:52:24 +0000 (09:52 +0100)
This can be turned off by setting avoid-scripts to ##f.

Scripts are placed in a "scripts" grob array in the tuplet-engraver
and are then accessed in tuplet-bracket.cc and treated as items to
encompass when calculating a bracket's vertical position.

input/regression/tuplet-bracket-avoid-scripts.ly [new file with mode: 0644]
input/regression/tuplet-bracket-outside-staff-priority.ly
input/regression/tuplet-number-outside-staff-priority.ly
lily/include/tuplet-bracket.hh
lily/tuplet-bracket.cc
lily/tuplet-engraver.cc
scm/define-grob-properties.scm
scm/define-grobs.scm

diff --git a/input/regression/tuplet-bracket-avoid-scripts.ly b/input/regression/tuplet-bracket-avoid-scripts.ly
new file mode 100644 (file)
index 0000000..3fc273e
--- /dev/null
@@ -0,0 +1,10 @@
+\version "2.15.24"
+
+\header {
+  texidoc = "Tuplet brackets avoid scripts by default.
+"
+}
+
+\relative c'' {
+  \times 2/3 { a8^\espressivo r a^\espressivo }
+}
index fa6b082034ea5333979bdc2a53a5685a54e483e0..2c3115a9e2436f30abb5b1db3d5d0335d3ab8385 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.15.6"
+\version "2.15.24"
 \header {
 
   texidoc = "Tuplet brackets' outside staff priority can be
@@ -7,6 +7,7 @@ set.  Brackets, by default, carry their numbers with them."
 }
 
 \relative c'' {
+  \override TupletBracket #'avoid-scripts = ##f
   % Plain old tuplet
   \times 2/3 { a8 r a }
   % With nothing set, collisions abound both horizontally and
index 7b786296bd21d814e861267b891495fc1bc2d8cd..88765fb9a807f767c6e5ae39cb7a26a5b13f7e27 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.15.1"
+\version "2.15.24"
 \header {
 
   texidoc = "Tuplet numbers' outside staff priority can be
@@ -7,6 +7,7 @@ set."
 }
 
 \relative c'' {
+  \override TupletBracket #'avoid-scripts = ##f
   \times 2/3 { a8\trill a\trill a\trill }
   \override TupletNumber #'outside-staff-priority = #1
   \times 2/3 { a8\trill a\trill a\trill }
index 617758cc66944c16c8166db5f74249f6bb4826c2..8c6ab14a3278774a7dac1a5fac738dbda204b30a 100644 (file)
@@ -39,6 +39,7 @@ public:
   static void add_tuplet_bracket (Grob *me, Grob *smaller_bracket);
   static void get_bounds (Grob *, Grob **, Grob **);
   static void add_column (Grob *me, Item *);
+  static void add_script (Grob *me, Item *);
   static void add_beam (Grob *me, Grob *);
   static Grob *parallel_beam (Grob *me, vector<Grob *> const &cols,
                               bool *equally_long);
index c682b67b48fe99954c19999442dd9aa38a76980b..478d53bb2a4bea9c8b1e617aed56c32cf9b8b9ef 100644 (file)
@@ -655,6 +655,22 @@ Tuplet_bracket::calc_position_and_height (Grob *me_grob, Real *offset, Real *dy)
                                   number->extent (commony, Y_AXIS)[dir]));
     }
 
+  if (to_boolean (me->get_property ("avoid-scripts")))
+    {
+      extract_grob_set (me, "scripts", scripts);
+      for (vsize i = 0; i < scripts.size (); i++)
+        {
+          if (!scripts[i]->is_live ())
+            continue;
+
+          Interval script_x (scripts[i]->extent (commonx, X_AXIS));
+          Interval script_y (scripts[i]->extent (commony, Y_AXIS));
+
+          points.push_back (Offset (script_x.center () - x0,
+                                    script_y[dir]));
+        }
+    }
+
   *offset = -dir * infinity_f;
   Real factor = (columns.size () > 1) ? 1 / (x1 - x0) : 1.0;
   for (vsize i = 0; i < points.size (); i++)
@@ -767,6 +783,12 @@ Tuplet_bracket::add_column (Grob *me, Item *n)
   add_bound_item (dynamic_cast<Spanner *> (me), n);
 }
 
+void
+Tuplet_bracket::add_script (Grob *me, Item *s)
+{
+  Pointer_group_interface::add_grob (me, ly_symbol2scm ("scripts"), s);
+}
+
 void
 Tuplet_bracket::add_tuplet_bracket (Grob *me, Grob *bracket)
 {
@@ -812,6 +834,7 @@ ADD_INTERFACE (Tuplet_bracket,
                " @code{edge-text} are printed at the edges.",
 
                /* properties */
+               "avoid-scripts "
                "bracket-flare "
                "bracket-visibility "
                "break-overshoot "
index c21794436cd3a21147bbc4eda6e2307980626729..9ff42cad61ffad3731474952fa7cf3b8a9cf4352 100644 (file)
@@ -64,6 +64,7 @@ protected:
   vector<Spanner *> last_tuplets_;
 
   DECLARE_ACKNOWLEDGER (note_column);
+  DECLARE_ACKNOWLEDGER (script);
   DECLARE_TRANSLATOR_LISTENER (tuplet_span);
   virtual void finalize ();
   void start_translation_timestep ();
@@ -207,6 +208,17 @@ Tuplet_engraver::acknowledge_note_column (Grob_info inf)
       }
 }
 
+void
+Tuplet_engraver::acknowledge_script (Grob_info inf)
+{
+  for (vsize j = 0; j < tuplets_.size (); j++)
+    if (tuplets_[j].bracket_)
+      {
+        Item *i = dynamic_cast<Item *> (inf.grob ());
+        Tuplet_bracket::add_script (tuplets_[j].bracket_, i);
+      }
+}
+
 void
 Tuplet_engraver::start_translation_timestep ()
 {
@@ -233,6 +245,7 @@ Tuplet_engraver::Tuplet_engraver ()
 }
 
 ADD_ACKNOWLEDGER (Tuplet_engraver, note_column);
+ADD_ACKNOWLEDGER (Tuplet_engraver, script);
 ADD_TRANSLATOR (Tuplet_engraver,
                 /* doc */
                 "Catch tuplet events and generate appropriate bracket.",
index cef87c6254021f29da318a7e543788b166ed5d7e..42031bbd66f09b36a3071296cc0ce2ff8efeed12 100644 (file)
@@ -64,6 +64,8 @@ numbered?")
 averaged over staves.")
      (avoid-note-head ,boolean? "If set, the stem of a chord does not
 pass through all note heads, but starts at the last note head.")
+     (avoid-scripts ,boolean? "If set, a tuplet bracket avoids the
+scripts associated with the note heads it encompasses.")
      (avoid-slur ,symbol? "Method of handling slur collisions.
 Choices are @code{inside}, @code{outside}, @code{around}, and
 @code{ignore}.  @code{inside} adjusts the slur if needed to keep the
index 0a9a0e73856fb73a67f5f8b91af35ded7426144e..157055779a0722e8160a745c323ddbde31dec450 100644 (file)
 
     (TupletBracket
      . (
+       (avoid-scripts . #t)
        (connect-to-neighbor . ,ly:tuplet-bracket::calc-connect-to-neighbors)
        (cross-staff . ,ly:tuplet-bracket::calc-cross-staff)
        (direction  . ,ly:tuplet-bracket::calc-direction)