]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/beaming-pattern.cc
lilypond-book: Set include path for --output option (issue 2423).
[lilypond.git] / lily / beaming-pattern.cc
index cc569c7c73b696aad614dd2d7344f182803e3dac..8f27c23ef57955f027151c4fd8e8b3d93a8fc9bc 100644 (file)
@@ -40,10 +40,11 @@ Beam_rhythmic_element::Beam_rhythmic_element ()
   beam_count_drul_[RIGHT] = 0;
   invisible_ = false;
   factor_ = Rational (1);
-
+  tuplet_start_ = false;
 }
 
-Beam_rhythmic_element::Beam_rhythmic_element (Moment m, int i, bool inv, Rational factor)
+Beam_rhythmic_element::Beam_rhythmic_element (Moment m, int i, bool inv,
+  Rational factor, bool tuplet_start)
 {
   start_moment_ = m;
   rhythmic_importance_ = 0;
@@ -51,6 +52,7 @@ Beam_rhythmic_element::Beam_rhythmic_element (Moment m, int i, bool inv, Rationa
   beam_count_drul_[RIGHT] = i;
   invisible_ = inv;
   factor_ = factor;
+  tuplet_start_ = tuplet_start;
 }
 
 void
@@ -268,8 +270,8 @@ Beaming_pattern::find_rhythmic_importance (Beaming_options const &options)
           Moment tuplet_moment (tuplet);
           Moment tuplet_dt = infos_[i].start_moment_ - tuplet_start_moment;
           tuplet_number = tuplet.den ();
-          // set the beat end (if not in a tuplet) and increment the next beat
-          if (tuplet_number == 1 && infos_[i].start_moment_ == next_beat_pos)
+          // set the beat end and increment the next beat
+          if (infos_[i].start_moment_ == next_beat_pos)
             {
               infos_[i].rhythmic_importance_ = -1;
               next_beat_pos += options.base_moment_;
@@ -326,9 +328,9 @@ Beaming_pattern::unbeam_invisible_stems ()
 }
 
 void
-Beaming_pattern::add_stem (Moment m, int b, bool invisible, Rational factor)
+Beaming_pattern::add_stem (Moment m, int b, bool invisible, Rational factor, bool tuplet_start)
 {
-  infos_.push_back (Beam_rhythmic_element (m, b, invisible, factor));
+  infos_.push_back (Beam_rhythmic_element (m, b, invisible, factor, tuplet_start));
 }
 
 Beaming_pattern::Beaming_pattern ()
@@ -350,11 +352,12 @@ Beaming_pattern::start_moment (int i) const
 Moment
 Beaming_pattern::end_moment (int i) const
 {
-  Duration *dur = new Duration (2 + max (beamlet_count (i, LEFT),
-                                         beamlet_count (i, RIGHT)),
-                                0);
+  Duration dur (2 + max (beamlet_count (i, LEFT),
+                         beamlet_count (i, RIGHT)),
+                0);
 
-  return infos_.at (i).start_moment_ + dur->get_length ();
+  return infos_.at (i).start_moment_
+    + infos_.at(i).factor_ * dur.get_length ();
 }
 
 bool
@@ -369,6 +372,12 @@ Beaming_pattern::factor (int i) const
   return infos_.at (i).factor_;
 }
 
+bool
+Beaming_pattern::tuplet_start (int i) const
+{
+  return infos_.at (i).tuplet_start_;
+}
+
 /*
     Split a beaming pattern at index i and return a new
     Beaming_pattern containing the removed elements
@@ -386,7 +395,8 @@ Beaming_pattern::split_pattern (int i)
       new_pattern->add_stem (start_moment (j),
                              count,
                              invisibility (j),
-                             factor (j));
+                             factor (j),
+                             tuplet_start (j));
     }
   for (vsize j = i + 1; j < infos_.size ();)
     infos_.pop_back ();