]> git.donarmstrong.com Git - lilypond.git/commitdiff
(score_extra_encompass): check if extra
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Sat, 18 Sep 2004 10:20:02 +0000 (10:20 +0000)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Sat, 18 Sep 2004 10:20:02 +0000 (10:20 +0000)
objects are on boundary column.

ChangeLog
lily/auto-beam-engraver.cc
lily/beam.cc
lily/slur-scoring.cc

index 722c36776be2c5b6e01dd8a97ad4d09277acf664..bd0d0eb9fbc573d5b34dc6426e6fb4f486ecbdc6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2004-09-18  Han-Wen Nienhuys   <hanwen@xs4all.nl>
 
+       * lily/slur-scoring.cc (score_extra_encompass): check if extra
+       objects are on boundary column. 
+
        * lily/main.cc (parse_argv): process --tex too.
 
        * ly/music-functions-init.ly (keepWithTag): add music functions
index 180f216340aca405b99c65fe3a35d99b0c496b99..d60fdb76a6353c225f436bdc883dafbf2d42e87c 100644 (file)
@@ -81,8 +81,7 @@ Auto_beam_engraver::process_music ()
       junk_beam ();
     }
 
-  if (forbid_
-      || !to_boolean (get_property ("autoBeaming")))
+  if (forbid_)
     {
       consider_end (shortest_mom_);
       junk_beam ();
index 9b71b10331057076c8945abe4af90c3979bfb1bc..949d3ae65bb753482d5fb2f540fcd4e623fee708 100644 (file)
@@ -815,6 +815,8 @@ Beam::after_line_breaking (SCM smob)
 void
 Beam::position_beam (Grob *me)
 {
+  if (!me->is_live ())
+    return ;
   if (to_boolean (me->get_property ("positioning-done")))
     return ;
 
index 6f91aa9b12895bb6c4cfb72265638d0b2acdfb1b..68e14007326560c594e3712634f8f2003a775fe7 100644 (file)
@@ -1030,18 +1030,21 @@ struct Extra_collision_info
   Real idx_;
   Box extents_;
   Real penalty_;
-
-  Extra_collision_info (Real idx, Interval x, Interval y, Real p)
+  Grob * grob_;
+  
+  Extra_collision_info (Grob *g, Real idx, Interval x, Interval y, Real p)
   {
     idx_ = idx;
     extents_[X_AXIS] = x;
     extents_[Y_AXIS] = y;
-    penalty_ = p;    
+    penalty_ = p;
+    grob_ = g; 
   }
   Extra_collision_info ()
   {
     idx_ = 0.0;
     penalty_ = 0.;
+    grob_ = 0;
   }
 };
 
@@ -1096,7 +1099,8 @@ score_extra_encompass (Grob *me, Grob *common[],
 
            Interval xext(-1, 1);
            xext = xext *(thick*2) + z[X_AXIS];
-           Extra_collision_info info (k - 1.0, 
+           Extra_collision_info info (small_slur,
+                                      k - 1.0, 
                                       xext,
                                       yext,
                                       score_param->extra_object_collision_);
@@ -1147,7 +1151,7 @@ score_extra_encompass (Grob *me, Grob *common[],
 
          ye.widen (thick * 0.5);
          xe.widen (thick * 1.0);
-         Extra_collision_info info (xp, xe, ye,  penalty);
+         Extra_collision_info info (g, xp, xe, ye,  penalty);
          collision_infos.push (info);
        }
     }
@@ -1169,7 +1173,17 @@ score_extra_encompass (Grob *me, Grob *common[],
          
          do
            {
-             if (collision_infos[j].extents_[X_AXIS].contains (attachment[d][X_AXIS]))
+             /*
+               We need to check for the bound explicitly, since the
+               slur-ending can be almost vertical, making the Y
+               coordinate a bad approximation of the object-slur
+               distance.               
+              */
+             Item * as_item =  dynamic_cast<Item*> (collision_infos[j].grob_);
+             if( (as_item
+                  && as_item->get_column ()
+                  == extremes[d] .bound_->get_column ())
+                 || collision_infos[j].extents_[X_AXIS].contains (attachment[d][X_AXIS]))
                {
                  y = attachment[d][Y_AXIS];
                  found = true;