]> git.donarmstrong.com Git - lilypond.git/commitdiff
lilypond-1.0.16
authorfred <fred>
Sun, 24 Mar 2002 20:14:44 +0000 (20:14 +0000)
committerfred <fred>
Sun, 24 Mar 2002 20:14:44 +0000 (20:14 +0000)
lily/note-column.cc
lily/slur.cc

index 1085a3c071d3b1e12ce47367f599d9f697278d3b..8f700129e5b30f5e36f2c04d016227ad74fbc59b 100644 (file)
@@ -38,9 +38,15 @@ Interval_t<int>
 Note_column::head_positions_interval() const
 {
   ((Note_column*)this)->sort();
-  return Interval_t<int> (head_l_arr_[0]->position_i_, 
-                         head_l_arr_.top()->position_i_);
+ Interval_t<int>  iv;
+
+ iv.set_empty ();
 
+ if (head_l_arr_.size ())
+   iv = Interval_t<int>(head_l_arr_[0]->position_i_, 
+                         head_l_arr_.top()->position_i_);
+  
+  return iv;
 }
 
 Interval 
index 14edd7b3e2146d21354fd5955bbfe51fc554a32c..28bd21fa6e3ce40faf11e5907e36d674a1b12061 100644 (file)
@@ -38,6 +38,8 @@ Slur::Slur ()
 void
 Slur::add_column (Note_column*n)
 {
+  if (!n->head_l_arr_.size ())
+    warning (_ ("Putting slur over rest."));
   encompass_arr_.push (n);
   add_dependency (n);
 }
@@ -144,7 +146,8 @@ Slur::do_post_processing ()
       /*
         normal slur
        */
-      else if (extrema[d]->stem_l_ && !extrema[d]->stem_l_->transparent_b_) 
+      else if (extrema[d]->stem_l_ && !extrema[d]->stem_l_->transparent_b_ 
+              && extrema[d]->head_l_arr_.size ()) 
         {
          Real notewidth_f = extrema[d]->width ().length ();
          dy_f_drul_[d] = (int)rint (extrema[d]->stem_l_->height ()[dir_]);
@@ -157,17 +160,17 @@ Slur::do_post_processing ()
                dx_f_drul_[d] += 0.25 * (dir_ * d) * d * notewidth_f;
            }
        }
-      else 
-        {
-         Real notewidth_f = extrema[d]->width ().length ();
-         dy_f_drul_[d] = (int)rint (extrema[d]->head_positions_interval ()
-           [dir_]) * internote_f;
-         dx_f_drul_[d] += 0.5 * notewidth_f - d * gap_f;
+       else 
+         {
+           Real notewidth_f = extrema[d]->width ().length ();
+           dy_f_drul_[d] = (int)rint (extrema[d]->head_positions_interval ()
+                                      [dir_]) * internote_f;
+           dx_f_drul_[d] += 0.5 * notewidth_f - d * gap_f;
        }
-      dy_f_drul_[d] += dir_ * interline_f;
-      if (extrema[d]->stem_l_ && (dir_ == extrema[d]->stem_l_->dir_))
-       dy_f_drul_[d] -= dir_ * internote_f;
-    }
+       dy_f_drul_[d] += dir_ * interline_f;
+       if (extrema[d]->stem_l_ && (dir_ == extrema[d]->stem_l_->dir_))
+         dy_f_drul_[d] -= dir_ * internote_f;
+      }
   while (flip(&d) != LEFT);
 
   // now that both are set, do dependent