]> git.donarmstrong.com Git - lilypond.git/blob - lily/grid-line-span-engraver.cc
Run `make grand-replace'.
[lilypond.git] / lily / grid-line-span-engraver.cc
1 /*
2   grid-line-span-engraver.cc --  implement Grid_line_span_engraver
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 2005--2008 Han-Wen Nienhuys <hanwen@xs4all.nl>
7 */
8
9 #include "engraver.hh"
10 #include "item.hh"
11 #include "grid-line-interface.hh"
12
13 class Grid_line_span_engraver : public Engraver
14 {
15   Item *spanline_;
16   vector<Item*> lines_;
17
18 public:
19   TRANSLATOR_DECLARATIONS (Grid_line_span_engraver);
20 protected:
21   DECLARE_ACKNOWLEDGER (grid_point);
22   void stop_translation_timestep ();
23 };
24
25 Grid_line_span_engraver::Grid_line_span_engraver ()
26 {
27   spanline_ = 0;
28 }
29
30 void
31 Grid_line_span_engraver::acknowledge_grid_point (Grob_info i)
32 {
33   int depth = i.origin_contexts (this).size ();
34   if (depth)
35     {
36       Item *it = dynamic_cast<Item *> (i.grob ());
37       lines_.push_back (it);
38
39       if (lines_.size () >= 2 && !spanline_)
40         {
41           spanline_ = make_item ("GridLine", SCM_EOL);
42           spanline_->set_parent (lines_[0], X_AXIS);
43         }
44     }
45 }
46
47 void
48 Grid_line_span_engraver::stop_translation_timestep ()
49 {
50   if (spanline_)
51     {
52       for (vsize i = 0; i < lines_.size (); i++)
53         Grid_line_interface::add_grid_point (spanline_, lines_[i]);
54
55       spanline_ = 0;
56     }
57   lines_.resize (0);
58 }
59
60 #include "translator.icc"
61 ADD_ACKNOWLEDGER (Grid_line_span_engraver, grid_point);
62 ADD_TRANSLATOR (Grid_line_span_engraver,
63                 /* doc */
64                 "This engraver makes cross-staff lines: It catches all normal"
65                 " lines and draws a single span line across them.",
66
67                 /* create */
68                 "GridLine ",
69
70                 /* read */
71                 "",
72
73                 /* write */
74                 ""
75                 );