]> git.donarmstrong.com Git - lilypond.git/blob - lily/heads-engraver.cc
a8e0aaa46b8e43f9edead8176020730159c64d0a
[lilypond.git] / lily / heads-engraver.cc
1 /*
2   head-grav.cc -- part of GNU LilyPond
3
4   (c)  1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
5 */
6
7 #include "note-head.hh"
8 #include "heads-engraver.hh"
9 #include "paper-def.hh"
10 #include "musical-request.hh"
11 #include "dots.hh"
12 #include "dot-column.hh"
13
14 Note_heads_engraver::Note_heads_engraver()
15 {
16 }
17
18 bool
19 Note_heads_engraver::do_try_request (Request *req_l) 
20 {
21   if (!dynamic_cast <Musical_req *> (req_l)) 
22     return false;
23
24   Note_req * n =dynamic_cast <Note_req *> (req_l);
25   if (!n)
26     return false;
27   
28   note_req_l_arr_.push (n);
29   return true;
30 }
31
32 void
33 Note_heads_engraver::do_process_requests()
34 {
35   if (note_p_arr_.size ())
36     return ;
37   
38   for (int i=0; i < note_req_l_arr_.size (); i++)
39     {
40       Note_head *note_p  = new Note_head;
41       Note_req * note_req_l = note_req_l_arr_[i];
42       note_p->balltype_i_ = note_req_l->duration_.durlog_i_;
43       note_p->dots_i_ = note_req_l->duration_.dots_i_;
44       if (note_p->dots_i_)
45         {
46           Dots * d = new Dots;
47           note_p->dots_l_ = d;
48           announce_element (Score_element_info (d,0));
49           dot_p_arr_.push (d);
50         }
51
52       note_p->position_i_ = dynamic_cast <Note_req *> (note_req_l)->pitch_.steps ();
53
54   
55       Score_element_info itinf (note_p,note_req_l);
56       announce_element (itinf);
57       note_p_arr_.push (note_p);
58     }
59 }
60  
61 void
62 Note_heads_engraver::do_pre_move_processing()
63 {
64   for (int i=0; i < note_p_arr_.size (); i++)
65     {
66       typeset_element (note_p_arr_[i]);
67     }
68   note_p_arr_.clear ();
69   for (int i=0; i < dot_p_arr_.size (); i++)
70     {
71       typeset_element (dot_p_arr_[i]);
72     }
73   dot_p_arr_.clear ();
74   
75   note_req_l_arr_.clear ();
76 }
77
78 void
79 Note_heads_engraver::do_post_move_processing()
80 {
81
82 }
83
84
85 IMPLEMENT_IS_TYPE_B1(Note_heads_engraver,Engraver);
86 ADD_THIS_TRANSLATOR(Note_heads_engraver);