]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/head-grav.cc
release: 0.1.46
[lilypond.git] / lily / head-grav.cc
index 2db5d4ac0b75a27188fd578964091a79aa78291a..d564b58e6e6be1e29658bc1ceb55251d8ee33cff 100644 (file)
@@ -8,64 +8,76 @@
 #include "head-grav.hh"
 #include "paper-def.hh"
 #include "musical-request.hh"
+#include "dots.hh"
 
 Note_head_engraver::Note_head_engraver()
 {
-    note_p_ = 0;
-    do_post_move_processing();
+  dot_p_=0;
+  note_p_ = 0;
+  note_req_l_ =0;
 }
 
 bool
-Note_head_engraver::do_try_request(Request *req_l) 
+Note_head_engraver::do_try_request (Request *req_l) 
 {
-    if (note_req_l_)
-       return false;
-    
-    if (req_l->musical() && (req_l->musical()->note() || req_l->musical()->rest()))
-       note_req_l_=req_l->musical()->rhythmic();
-    else
-       return false;
+  if (note_req_l_)
+    return false;
+  
+  if (!(req_l->musical() && req_l->musical ()->note ()))
 
-    return true;
+    return false;
+  
+  note_req_l_=req_l->musical()->rhythmic ();
+  return true;
 }
 
 void
 Note_head_engraver::do_process_requests()
 {
-    if (!note_req_l_)
-       return;
-    
-    Note_head*n_p = new Note_head(8);  // ugh
-    note_p_ = n_p;
-    n_p->set_rhythmic(note_req_l_->rhythmic());
-
-    if (note_req_l_->note()) {
-       n_p->position_i_ = note_req_l_->note()->height();
-       Staff_info inf = get_staff_info();
-       if (inf.c0_position_i_l_)
-           n_p->position_i_ += *inf.c0_position_i_l_;
-    } else if (note_req_l_->rest()) {
-       n_p->rest_b_ = true;
+  if (!note_req_l_ || note_p_)
+    return;
+  
+  note_p_  = new Note_head;
+  note_p_->balltype_i_ = note_req_l_->duration_.durlog_i_;
+  note_p_->dots_i_ = note_req_l_->duration_.dots_i_;
+  if (note_p_->dots_i_)
+    {
+      dot_p_ = new Dots;
+      note_p_->dots_l_ = dot_p_;
+      announce_element (Score_elem_info (dot_p_,0));
     }
-    
-    Score_elem_info itinf(note_p_,note_req_l_);
-    announce_element(itinf);
+  
+  note_p_->position_i_ = note_req_l_->note()->height ();
+
+  Staff_info inf = get_staff_info();
+  if (inf.c0_position_i_l_)
+    note_p_->position_i_ += *inf.c0_position_i_l_;
+
+  
+  Score_elem_info itinf (note_p_,note_req_l_);
+  announce_element (itinf);
 }
  
 void
 Note_head_engraver::do_pre_move_processing()
 {
-    if (note_p_) {
-       typeset_element(note_p_);
-       note_p_ = 0;
+  if (note_p_) 
+    {
+      typeset_element (note_p_);
+      note_p_ = 0;
+    }
+  if (dot_p_)
+    {
+      typeset_element (dot_p_);
+      dot_p_ =0;
     }
 }
 void
 Note_head_engraver::do_post_move_processing()
 {
-    note_req_l_ = 0;
+  note_req_l_ = 0;
 }
 
 
 IMPLEMENT_IS_TYPE_B1(Note_head_engraver,Engraver);
-ADD_THIS_ENGRAVER(Note_head_engraver);
+ADD_THIS_TRANSLATOR(Note_head_engraver);