2 vertical-align-engraver.cc -- implement Vertical_align_engraver
4 source file of the GNU LilyPond music typesetter
6 (c) 1997--2005 Han-Wen Nienhuys <hanwen@cs.uu.nl>
10 #include "paper-column.hh"
11 #include "align-interface.hh"
12 #include "span-bar.hh"
13 #include "axis-group-interface.hh"
14 #include "engraver.hh"
17 class Vertical_align_engraver : public Engraver
20 bool qualifies (Grob_info) const;
23 TRANSLATOR_DECLARATIONS (Vertical_align_engraver);
26 virtual void acknowledge_grob (Grob_info);
27 virtual void process_music ();
28 virtual void finalize ();
31 Vertical_align_engraver::Vertical_align_engraver ()
37 Vertical_align_engraver::process_music ()
41 valign_ = make_spanner ("VerticalAlignment", SCM_EOL);
42 valign_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn")));
47 Vertical_align_engraver::finalize ()
51 valign_->set_bound (RIGHT, unsmob_grob (get_property ("currentCommandColumn")));
57 Vertical_align_engraver::qualifies (Grob_info i) const
59 int sz = i.origin_contexts ((Translator *)this).size ();
61 return sz > 0 && Axis_group_interface::has_interface (i.grob_)
62 && !i.grob_->get_parent (Y_AXIS) && Axis_group_interface::has_axis (i.grob_, Y_AXIS);
66 Vertical_align_engraver::acknowledge_grob (Grob_info i)
70 Align_interface::add_element (valign_, i.grob_, get_property ("verticalAlignmentChildCallback"));
74 ADD_TRANSLATOR (Vertical_align_engraver,
75 /* descr */ "Catch Vertical axis groups and stack them.",
76 /* creats*/ "VerticalAlignment",
78 /* acks */ "axis-group-interface",