]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/slur-engraver.cc
Fix some bugs in the dynamic engraver and PostScript backend
[lilypond.git] / lily / slur-engraver.cc
index 9fee28767ae34de3edf5e36708313be8c7ea48af..0e649fe566165944aad7131a8f9edb4eacff558a 100644 (file)
@@ -14,7 +14,6 @@
 #include "note-column.hh"
 #include "slur.hh"
 #include "spanner.hh"
-#include "tie.hh"
 #include "warn.hh"
 
 /*
@@ -26,8 +25,8 @@ class Slur_engraver : public Engraver
 {
   Drul_array<Music *> events_;
   Music *running_slur_start_;
-  Link_array<Grob> slurs_;
-  Link_array<Grob> end_slurs_;
+  vector<Grob*> slurs_;
+  vector<Grob*> end_slurs_;
 
   void set_melisma (bool);
 
@@ -95,34 +94,7 @@ Slur_engraver::acknowledge_note_column (Grob_info info)
 void
 Slur_engraver::acknowledge_extra_object (Grob_info info)
 {
-  if (slurs_.empty () && end_slurs_.empty ())
-    return ;
-  
-  Grob *e = info.grob ();
-  SCM avoid = e->get_property ("avoid-slur");
-  if (Tie::has_interface (e)
-      || avoid == ly_symbol2scm ("inside"))
-    {
-      for (vsize i = slurs_.size (); i--;)
-       Slur::add_extra_encompass (slurs_[i], e);
-      for (vsize i = end_slurs_.size (); i--;)
-       Slur::add_extra_encompass (end_slurs_[i], e);
-    }
-  else if (avoid == ly_symbol2scm ("outside")
-          || avoid == ly_symbol2scm ("around"))
-    {
-      Grob *slur = slurs_.size () ? slurs_[0] : 0;
-      slur = (end_slurs_.size () && !slur)
-       ? end_slurs_[0] : slur;
-
-      if (slur)
-       {
-         chain_offset_callback (e, Slur::outside_slur_callback_proc, Y_AXIS);
-         e->set_object ("slur", slur->self_scm ());
-       }
-    }
-  else
-    e->warning ("Ignoring grob for slur. avoid-slur not set?");
+  Slur::auxiliary_acknowledge_extra_object (info, slurs_, end_slurs_);
 }
 
 void
@@ -153,13 +125,13 @@ Slur_engraver::acknowledge_tuplet_number (Grob_info info)
 void
 Slur_engraver::acknowledge_script (Grob_info info)
 {
-  acknowledge_extra_object (info);
+  if (!info.grob ()->internal_has_interface (ly_symbol2scm ("dynamic-interface")))
+    acknowledge_extra_object (info);
 }
 
 void
 Slur_engraver::acknowledge_text_script (Grob_info info)
 {
-  //  if (!info.grob ()->internal_has_interface (ly_symbol2scm ("DynamicText")))
   acknowledge_extra_object (info);
 }