]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/tie-grav.cc
release: 0.1.57
[lilypond.git] / lily / tie-grav.cc
index e49cd5b7e5aa2f82454614b2dedd97360335531a..453a955072379a86686b1c5887a3554e05629652 100644 (file)
 
 Tie_engraver::Tie_engraver()
 {
-    end_tie_p_ = 0;
-    tie_p_ = 0;
-    req_l_ =0;
-    end_req_l_ =0;
-    end_mom_ = -1;
-    melodic_req_l_ = 0;
-    end_melodic_req_l_ =0;
-    dir_i_ = 0;
+  end_tie_p_ = 0;
+  tie_p_ = 0;
+  req_l_ =0;
+  end_req_l_ =0;
+  end_mom_ = -1;
+  melodic_req_l_ = 0;
+  end_melodic_req_l_ =0;
+  dir_ = CENTER;
 }
 
-void
-Tie_engraver::sync_features()
-{
-    dir_i_ = get_feature("vdir");
-}
-    
-
 void
 Tie_engraver::do_post_move_processing()
 {
-    if (tie_p_ && get_staff_info().when() == end_mom_) {
-       end_tie_p_ = tie_p_;
-       end_req_l_ = req_l_;
-       end_melodic_req_l_ = melodic_req_l_;
-       tie_p_ =0;
-       req_l_ =0;
-       end_mom_ = -1;
+  if (tie_p_ && now_moment () == end_mom_)
+    {
+      end_tie_p_ = tie_p_;
+      end_req_l_ = req_l_;
+      end_melodic_req_l_ = melodic_req_l_;
+      tie_p_ =0;
+      req_l_ =0;
+      end_mom_ = -1;
     }
 }
 
 bool
-Tie_engraver::acceptable_request_b(Request*r)
-{
-    return r->musical() && r->musical()->tie();
-}
-
-bool
-Tie_engraver::do_try_request(Request*r)
+Tie_engraver::do_try_request (Request*r)
 {
-    if(!acceptable_request_b(r))
-       return false;
-    if (req_l_ ) {
-       return false;
+  if (! (r->musical() && r->musical ()->tie ()))
+    return false;
+  
+  if (req_l_)
+    {
+      return false;
     }
-    req_l_ = r->musical()->tie();
-    end_mom_ = r->parent_music_l_->time_int().length()
-       + get_staff_info().when();
-    return true;
+  req_l_ = r->musical()->tie ();
+  end_mom_ = r->parent_music_l_->time_int().length ()
+    + now_moment ();
+  return true;
 }
 
 void
 Tie_engraver::do_process_requests()
 {
-    if (req_l_ && ! tie_p_) {
-       tie_p_ = new Tie;
+  dir_ = (Direction) int (get_property ("ydirection"));
+  if (req_l_ && ! tie_p_)
+    {
+      tie_p_ = new Tie;
     }
 }
 
 void
-Tie_engraver::acknowledge_element(Score_elem_info i)
+Tie_engraver::acknowledge_element (Score_elem_info i)
 {
-    if (i.elem_l_->name() == Note_head::static_name()) {
-       if (tie_p_) {
-           tie_p_->set_head(-1, (Note_head*)i.elem_l_->item());
-           melodic_req_l_ = i.req_l_->musical()->melodic();
+  if (i.elem_l_->is_type_b (Note_head::static_name ()))
+    {
+      if (tie_p_)
+       {
+         tie_p_->set_head (LEFT, (Note_head*)i.elem_l_->item());
+         melodic_req_l_ = i.req_l_->musical()->melodic ();
        }
 
-       if (end_tie_p_) {
-           end_tie_p_->set_head(1, (Note_head*)i.elem_l_->item());
-           if (!Melodic_req::compare ( *end_melodic_req_l_, *melodic_req_l_))
-               end_tie_p_->same_pitch_b_ = true;
-           announce_element(Score_elem_info(end_tie_p_,end_req_l_));
+      if (end_tie_p_)
+       {
+         end_tie_p_->set_head (RIGHT, (Note_head*)i.elem_l_->item());
+         if (!Melodic_req::compare (*end_melodic_req_l_, *melodic_req_l_))
+           end_tie_p_->same_pitch_b_ = true;
+         announce_element (Score_elem_info (end_tie_p_,end_req_l_));
        }
     }
 }
@@ -93,32 +88,30 @@ Tie_engraver::acknowledge_element(Score_elem_info i)
 void
 Tie_engraver::do_pre_move_processing()
 {
-    if (end_tie_p_) {
-       if (dir_i_)
-           end_tie_p_->dir_i_ =  dir_i_;
-       
-       typeset_element(end_tie_p_);
-       end_tie_p_ =0;
-       end_req_l_ =0;
+  if (end_tie_p_)
+    {
+      if (dir_)
+       end_tie_p_->dir_ =  dir_;
+
+      typeset_element (end_tie_p_);
+      end_tie_p_ =0;
+      end_req_l_ =0;
     }
 }
 
-Tie_engraver::~Tie_engraver()
+void
+Tie_engraver::do_removal_processing ()
 {
-    if (tie_p_) {
-       req_l_->warning("unended Tie");
-       delete tie_p_;
+  do_pre_move_processing ();
+  if (tie_p_)
+    {
+      req_l_->warning (_("unended Tie"));
+      tie_p_->unlink ();
+      delete tie_p_;
     }
 }
 
-void
-Tie_engraver::set_feature(Feature f)
-{
-    if (f.type_ == "vdir")
-       dir_i_ = f.value_;
-}
 
 
 IMPLEMENT_IS_TYPE_B1(Tie_engraver,Engraver);
-ADD_THIS_ENGRAVER(Tie_engraver);
+ADD_THIS_TRANSLATOR(Tie_engraver);