]> git.donarmstrong.com Git - lilypond.git/blob - lily/axis-group-engraver.cc
release: 1.3.69
[lilypond.git] / lily / axis-group-engraver.cc
1 /*   
2   axis-group-engraver.cc --  implement Axis_group_engraver
3   
4   source file of the GNU LilyPond music typesetter
5   
6   (c) 1999--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
7  */
8
9 #include "axis-group-engraver.hh"
10 #include "spanner.hh"
11 #include "paper-column.hh"
12 #include "axis-group-interface.hh"
13
14 #include "engraver-group-engraver.hh"
15
16 Axis_group_engraver::Axis_group_engraver ()
17 {
18   staffline_p_ = 0;
19 }
20
21 void
22 Axis_group_engraver::do_creation_processing ()
23 {
24   staffline_p_ = get_spanner_p ();
25   Axis_group_interface::set_interface (staffline_p_);
26   Axis_group_interface::set_axes (staffline_p_, Y_AXIS, Y_AXIS);
27
28   Score_element *  it = unsmob_element (get_property ("currentCommandColumn"));
29   Pointer_group_interface (it, "bounded-by-me").add_element (staffline_p_);  
30   staffline_p_->set_bound(LEFT,it);
31
32   announce_element (Score_element_info (staffline_p_, 0));
33 }
34
35 Spanner*
36 Axis_group_engraver::get_spanner_p () const
37 {
38   return new Spanner (get_property ("basicVerticalAxisGroupProperties"));
39 }
40
41 void
42 Axis_group_engraver::do_removal_processing ()
43 {
44   String type = daddy_grav_l ()->type_str_ ;
45   SCM dims = get_property ((type  + "VerticalExtent").ch_C());
46   
47   if (gh_pair_p (dims) && gh_number_p (gh_car (dims))
48       && gh_number_p (gh_cdr (dims)))
49     {
50       staffline_p_->set_extent_callback (&Score_element::preset_extent, Y_AXIS);
51       staffline_p_->set_elt_property ("extent-Y", dims);
52     }
53
54   dims = get_property ((type + "MinimumVerticalExtent").ch_C());
55   if (gh_pair_p (dims) && gh_number_p (gh_car (dims))
56       && gh_number_p (gh_cdr (dims)))
57     staffline_p_->set_elt_property ("minimum-extent-Y", dims);
58
59   dims = get_property ((type + "ExtraVerticalExtent").ch_C());
60   if (gh_pair_p (dims) && gh_number_p (gh_car (dims))
61       && gh_number_p (gh_cdr (dims)))
62     staffline_p_->set_elt_property ("extra-extent-Y", dims);
63
64 Score_element *  it = unsmob_element (get_property ("currentCommandColumn"));
65
66   Pointer_group_interface (it, "bounded-by-me").add_element (staffline_p_);  
67   staffline_p_->set_bound(RIGHT,it);
68
69   typeset_element (staffline_p_);
70   staffline_p_ = 0;
71 }
72
73 void
74 Axis_group_engraver::acknowledge_element (Score_element_info i)
75 {
76   elts_.push (i.elem_l_);
77 }
78
79 void
80 Axis_group_engraver::process_acknowledged ()
81 {
82   /* UGH UGH UGH */
83   for (int i=0; i < elts_.size (); i++)
84     {
85       Score_element *par = elts_[i]->parent_l (Y_AXIS);
86
87       if ((!par || !Axis_group_interface::has_interface (par))
88           && ! elts_[i]->empty_b (Y_AXIS))
89         Axis_group_interface::add_element (staffline_p_, elts_[i]);
90     }
91   elts_.clear ();
92 }
93
94 ADD_THIS_TRANSLATOR(Axis_group_engraver);