]> git.donarmstrong.com Git - lilypond.git/commitdiff
Show TupletNumbers also on single-note tuplets (e.g. with tremolo)
authorReinhold Kainhofer <reinhold@kainhofer.com>
Sat, 8 Mar 2008 23:07:57 +0000 (00:07 +0100)
committerReinhold Kainhofer <reinhold@kainhofer.com>
Sat, 8 Mar 2008 23:07:57 +0000 (00:07 +0100)
While tuplet brackets should not be printed for tuplets consisting
of only one note (e.g. a note with tremolo!), the tuplet number still
needs to be printed and can not be ignored. Otherwise the timing would
look messed up.

Since the tuplet number also uses the dimensions calculated by the tuplet
bracket, the tuplet bracket at least needs to calculate it's theoretical
size, too, even though it will not be printed for single-note tuplets. The
check to kill zero-length tuplet brackets has thus been moved from
calc_positions to print in Tuplet_bracket.

In the print function we mustn't kill the bracket (which
will also kill the number), but only hide the bracket.

Also added a test case.

input/regression/tuplet-single-note.ly [new file with mode: 0644]
lily/tuplet-bracket.cc
lily/tuplet-number.cc

diff --git a/input/regression/tuplet-single-note.ly b/input/regression/tuplet-single-note.ly
new file mode 100644 (file)
index 0000000..635783c
--- /dev/null
@@ -0,0 +1,17 @@
+
+\header {
+
+  texidoc = "Show tuplet numbers also on single-note tuplets (otherwise the timing would look messed up!), but don't show a bracket. Make sure that tuplets without any notes don't show any number, either."
+
+}
+\version "2.11.41"
+
+\paper { ragged-right = ##t
+indent = 0.0 }
+
+\new Staff <<
+  \new Voice \relative c'' {
+    \times 4/6 { c2.:8 } \times 2/3 { g4.:8 } \times 2/3 { a,4.:8 } \times 4/6 {} \bar"|."
+  }
+>>
+  
index cfae0b98650d2317976c2ff9fae9338fe434a149..09d336b4a28b53eaf55e7a8f9c66569899feb9f8 100644 (file)
@@ -280,12 +280,20 @@ Tuplet_bracket::print (SCM smob)
   else if (bracket == ly_symbol2scm ("if-no-beam"))
     bracket_visibility = !par_beam;
   
+  /* Don't print a tuplet bracket and number if no control-points were calculated */
   SCM cpoints =  me->get_property ("control-points");
   if (scm_ilength (cpoints) < 2)
     {
       me->suicide ();
       return SCM_EOL;
     }
+  /*  if the tuplet does not span any time, i.e. a single-note tuplet, hide
+      the bracket, but still let the number be displayed */
+  if (robust_scm2moment (me->get_bound (LEFT)->get_column ()->get_property ("when"), Moment (0))
+      == robust_scm2moment (me->get_bound (RIGHT)->get_column ()->get_property ("when"), Moment (0)))
+  {
+      bracket_visibility = false;
+  }
   
   Drul_array<Offset> points;
   points[LEFT] = ly_scm2offset (scm_car (cpoints));
@@ -686,16 +694,6 @@ Tuplet_bracket::calc_positions (SCM smob)
 {
   Spanner *me = unsmob_spanner (smob);
 
-  /*
-    Don't print if it doesn't span time.
-   */
-  if (robust_scm2moment (me->get_bound (LEFT)->get_column ()->get_property ("when"), Moment (0))
-      == robust_scm2moment (me->get_bound (RIGHT)->get_column ()->get_property ("when"), Moment (0)))
-    {
-      me->suicide ();
-      return SCM_EOL;
-    }
-
   Real dy = 0.0;
   Real offset = 0.0;
   calc_position_and_height (me, &offset, &dy);
index 22d857bdd2a2a2fb04f34eef3877de334230d2f1..78697ca4b11cf1953eccfe2420b6a49c9cec4a5a 100644 (file)
@@ -35,16 +35,6 @@ Tuplet_number::print (SCM smob)
       return SCM_EOL;
     }
 
-  /*
-    Don't print if it doesn't span time.
-   */
-  if (robust_scm2moment (tuplet->get_bound (LEFT)->get_column ()->get_property ("when"), Moment (0))
-      == robust_scm2moment (tuplet->get_bound (RIGHT)->get_column ()->get_property ("when"), Moment (0)))
-    {
-      me->suicide ();
-      return SCM_EOL;
-    }
-
   SCM stc_scm = Text_interface::print (smob);
   Stencil *stc = unsmob_stencil (stc_scm);