2 vertical-align-grav.cc -- implement Vertical_align_engraver
4 source file of the GNU LilyPond music typesetter
6 (c) 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
8 #include "translator-group.hh"
9 #include "axis-group-engraver.hh"
11 #include "vertical-align-engraver.hh"
12 #include "axis-align-spanner.hh"
13 #include "axis-group-spanner.hh"
14 #include "span-bar.hh"
16 Vertical_align_engraver::Vertical_align_engraver()
22 Vertical_align_engraver::do_creation_processing()
24 valign_p_
=new Axis_align_spanner
;
25 valign_p_
->set_axis (Y_AXIS
);
26 valign_p_
->stacking_dir_
= DOWN
;
28 valign_p_
->set_bounds(LEFT
,get_staff_info().command_pcol_l ());
29 announce_element (Score_element_info (valign_p_
, 0));
33 Vertical_align_engraver::do_removal_processing()
35 Scalar
dist (get_property ("maxVerticalAlign", 0));
36 if (dist
.length_i () && dist
.isnum_b ())
38 valign_p_
->threshold_interval_
[BIGGER
] = Real (dist
);
41 dist
= get_property ("minVerticalAlign", 0);
42 if (dist
.length_i () && dist
.isnum_b ())
44 valign_p_
->threshold_interval_
[SMALLER
] = Real (dist
);
47 dist
= get_property ("alignmentReference",0);
48 if (dist
.length_i () && dist
.isnum_b ())
50 valign_p_
->align_dir_
= int (dist
);
52 valign_p_
->set_bounds(RIGHT
,get_staff_info().command_pcol_l ());
53 typeset_element (valign_p_
);
59 Vertical_align_engraver::qualifies_b (Score_element_info i
) const
61 Translator
* t
= i
.origin_trans_l_arr_
[0];
62 int sz
= i
.origin_trans_l_arr_
.size() ;
65 return (sz
== 1 && dynamic_cast<Translator_group
*> (t
))
66 || (sz
== 2 && dynamic_cast<Axis_group_engraver
*> (t
));
69 Axis_group_element
* elt
= dynamic_cast<Axis_group_element
*> (i
.elem_l_
);
71 return sz
> 1 && elt
&& elt
->axes_
[0] == Y_AXIS
&& !elt
->parent_l (Y_AXIS
);
75 Vertical_align_engraver::acknowledge_element (Score_element_info i
)
79 valign_p_
->add_element (i
.elem_l_
);
81 else if (dynamic_cast<Span_bar
*>(i
.elem_l_
) && i
.origin_trans_l_arr_
.size ())
83 i
.elem_l_
->add_dependency (valign_p_
);
89 ADD_THIS_TRANSLATOR(Vertical_align_engraver
);