]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/text-spanner-engraver.cc
release: 1.3.125
[lilypond.git] / lily / text-spanner-engraver.cc
index 911aadeb0b982dae2596a51059fb38769cd204d0..4f339eb92cf7e6238f943b788d17ff1b03c2bef2 100644 (file)
@@ -26,12 +26,12 @@ public:
   Text_spanner_engraver ();
   
 protected:
-  virtual void do_removal_processing ();
-  virtual void acknowledge_element (Score_element_info);
-  virtual bool do_try_music (Music *);
-  virtual void do_process_music ();
-  virtual void do_pre_move_processing ();
-  virtual void do_post_move_processing ();
+  virtual void finalize ();
+  virtual void acknowledge_grob (Grob_info);
+  virtual bool try_music (Music *);
+  virtual void stop_translation_timestep ();
+  virtual void start_translation_timestep ();
+  virtual void create_grobs ();
 
 private:
   Spanner *span_;
@@ -54,18 +54,19 @@ Text_spanner_engraver::Text_spanner_engraver ()
 }
 
 void
-Text_spanner_engraver::do_post_move_processing ()
+Text_spanner_engraver::start_translation_timestep ()
 {
   req_drul_[START] = 0;
   req_drul_[STOP] = 0;
 }
 
 bool
-Text_spanner_engraver::do_try_music (Music *m)
+Text_spanner_engraver::try_music (Music *m)
 {
   if (Span_req *s =  dynamic_cast <Span_req*> (m))
     {
-      if (s->span_type_str_ == "abort")
+      String t =  ly_scm2string (s->get_mus_property ("span-type"));            
+      if (t == "abort")
        {
          req_drul_[LEFT] = 0;
          req_drul_[RIGHT] = 0;
@@ -73,9 +74,9 @@ Text_spanner_engraver::do_try_music (Music *m)
            span_->suicide ();
          span_ = 0;
        }
-      else if (s->span_type_str_ == "text")
+      else if (t == "text")
        {
-         req_drul_[s->span_dir_] = s;
+         req_drul_[s->get_span_dir()] = s;
          return true;
        }
     }
@@ -83,7 +84,7 @@ Text_spanner_engraver::do_try_music (Music *m)
 }
 
 void
-Text_spanner_engraver::do_process_music ()
+Text_spanner_engraver::create_grobs ()
 {
   if (req_drul_[STOP])
     {
@@ -95,12 +96,13 @@ Text_spanner_engraver::do_process_music ()
       else
        {
          assert (!finished_);
-         Score_element* e = unsmob_element (get_property ("currentMusicalColumn"));
+         Grob* e = unsmob_grob (get_property ("currentMusicalColumn"));
          span_->set_bound (RIGHT, e);
 
          finished_ = span_;
          span_ = 0;
          current_req_ = 0;
+         req_drul_[STOP] = 0;
        }
     }
 
@@ -115,16 +117,24 @@ Text_spanner_engraver::do_process_music ()
        {
          current_req_ = req_drul_[START];
          span_  = new Spanner (get_property ("TextSpanner"));
+
+         /* Ugh.  Reset (de)cresc. specific properties */
+         span_->set_grob_property ("outer", SCM_BOOL_T);
+         span_->set_grob_property ("if-text-padding", gh_double2scm (0));
+         span_->set_grob_property ("width-correct", gh_double2scm (0));
+                   
          Side_position::set_axis (span_, Y_AXIS);
-         Score_element *e = unsmob_element (get_property ("currentMusicalColumn"));
+         Grob *e = unsmob_grob (get_property ("currentMusicalColumn"));
          span_->set_bound (LEFT, e);
-         announce_element (span_, req_drul_[START]);
+         
+         announce_grob (span_, req_drul_[START]);
+         req_drul_[START] = 0;
        }
     }
 }
 
 void
-Text_spanner_engraver::acknowledge_element (Score_element_info info)
+Text_spanner_engraver::acknowledge_grob (Grob_info info)
 {
   if (span_ && Note_column::has_interface (info.elem_l_))
     {
@@ -139,19 +149,19 @@ Text_spanner_engraver::typeset_all ()
   if (finished_)
     {
       Side_position::add_staff_support (finished_);
-      typeset_element (finished_);
+      typeset_grob (finished_);
       finished_ = 0;
     }
 }
 
 void
-Text_spanner_engraver::do_pre_move_processing ()
+Text_spanner_engraver::stop_translation_timestep ()
 {
   typeset_all ();
 }
 
 void
-Text_spanner_engraver::do_removal_processing ()
+Text_spanner_engraver::finalize ()
 {
   typeset_all ();
   if (span_)