]> git.donarmstrong.com Git - lilypond.git/commitdiff
Fix #122.
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Mon, 1 Jan 2007 15:54:19 +0000 (16:54 +0100)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Mon, 1 Jan 2007 17:03:27 +0000 (18:03 +0100)
Add Stem::is_normal_stem(), which disregards stemlet-length.  Use it
for concaveness/slope calculations.

input/regression/beam-slope-stemlet.ly [new file with mode: 0644]
lily/beam-concave.cc
lily/beam.cc
lily/include/stem.hh
lily/stem.cc

diff --git a/input/regression/beam-slope-stemlet.ly b/input/regression/beam-slope-stemlet.ly
new file mode 100644 (file)
index 0000000..a0657e8
--- /dev/null
@@ -0,0 +1,22 @@
+
+\header {
+
+  texidoc = "For slope calculations, stemlets are treated
+as invisible stems."
+
+}
+
+\version "2.10.7"
+
+\layout {
+  ragged-right = ##t
+  indent = #0
+}
+
+\relative c' {
+  \times 2/3 {r8[ c' g']}
+  \override Stem #'stemlet-length = #0.5
+  \times 2/3 {r8[ c, g']}
+}
+
+
index 47ee57bbf512f81dddd178b619857cc8ec553e8f..9965b4fd9e16a0cf7f8c648abea2461af925b19a 100644 (file)
@@ -96,13 +96,13 @@ Beam::calc_concaveness (SCM smob)
   Direction beam_dir = CENTER;
   for (vsize i = stems.size (); i--;)
     {
-      if (Stem::is_invisible (stems[i]))
-       stems.erase (stems.begin () + i);
-      else
+      if (Stem::is_normal_stem (stems[i]))
        {
          if (Direction dir = get_grob_direction (stems[i]))
            beam_dir = dir;
        }
+      else
+       stems.erase (stems.begin () + i);
     }
 
   if (stems.size () <= 2)
index 51ce0967ea0a48c8ca1369c062478c679321e1bd..332e6b40551d3bf2449f756b04bab6266128c0f8 100644 (file)
@@ -890,8 +890,9 @@ Beam::calc_least_squares_positions (SCM smob, SCM posns)
       for (vsize i = 0; i < stems.size (); i++)
        {
          Grob *s = stems[i];
-         if (Stem::is_invisible (s))
+         if (!Stem::is_normal_stem (s))
            continue;
+
          ideals.push_back (Offset (x_posns[i],
                               Stem::get_stem_info (s).ideal_y_
                               + s->relative_coordinate (commony, Y_AXIS)
@@ -1283,7 +1284,7 @@ Beam::first_visible_stem (Grob *me)
 
   for (vsize i = 0; i < stems.size (); i++)
     {
-      if (!Stem::is_invisible (stems[i]))
+      if (Stem::is_normal_stem (stems[i]))
        return stems[i];
     }
   return 0;
@@ -1296,7 +1297,7 @@ Beam::last_visible_stem (Grob *me)
 
   for (vsize i = stems.size (); i--;)
     {
-      if (!Stem::is_invisible (stems[i]))
+      if (Stem::is_normal_stem (stems[i]))
        return stems[i];
     }
   return 0;
index 3d06bca6f6e08745fac2cf705ceba87ba7e9536d..02f9e69a1324b2e68b8977606c89922d64a5c99b 100644 (file)
@@ -33,6 +33,7 @@ public:
   static Real thickness (Grob *);
   static int head_count (Grob *);
   static bool is_invisible (Grob *);
+  static bool is_normal_stem (Grob *);
   static Interval head_positions (Grob *);
   static Real stem_end_position (Grob *);
   static Stencil flag (Grob *);
index 352c5ca4190f5b25b486cd15caadba3dac6c4164..a7c864b8b2a50cc0da044275c89650507421a047 100644 (file)
@@ -221,6 +221,14 @@ Stem::is_invisible (Grob *me)
           && scm_to_int (me->get_property ("duration-log")) >= 1);
 }
 
+
+bool
+Stem::is_normal_stem (Grob *me)
+{
+  return head_count (me) && scm_to_int (me->get_property ("duration-log")) >= 1;
+}
+
+
 MAKE_SCHEME_CALLBACK (Stem, pure_height, 3)
 SCM
 Stem::pure_height (SCM smob, SCM start, SCM end)