lilypond-1.3.7
[lilypond.git] / lily / vertical-align-elem.cc
blobdbd8e4b8eb4e99f840a87a4e794745c713faaff4
1 /*
2 vertical-align-item.cc -- implement Vertical_align_elem
4 source file of the GNU LilyPond music typesetter
6 (c) 1997--1998 Han-Wen Nienhuys <hanwen@stack.nl>
7 */
9 #include "vertical-align-elem.hh"
10 #include "interval.hh"
12 void
13 Vertical_align_element::add (Score_elem*el_l)
15 assert (! contains_b (el_l));
16 elem_l_arr_.push (el_l);
17 add_dependency (el_l);
20 void
21 Vertical_align_element::do_substitute_dependency (Score_elem*o,Score_elem*n)
23 int i;
24 while ((i = elem_l_arr_.find_i (o))>=0)
25 if (n)
26 elem_l_arr_[i] = n;
27 else
28 elem_l_arr_.del (i);
31 /**
32 Align elements top to bottom.
33 The first element has its top at y =0.0 afterwards
35 TODO configurable, like Horizontal_align_item
37 void
38 Vertical_align_element::do_post_processing()
40 Array<Interval> dims;
41 for (int i=0; i < elem_l_arr_.size(); i++)
43 Interval y = elem_l_arr_[i]->height() ;
44 if (y.empty_b())
45 y = Interval (0,0);
47 dims.push (y);
50 Real where_f=0;
51 for (int i=0 ; i < elem_l_arr_.size(); i++)
53 elem_l_arr_[i]->translate_axis (- dims[i][1] - where_f, Y_AXIS);
54 where_f += dims[i].length();
58 bool
59 Vertical_align_element::contains_b (Score_elem const *e) const
61 return elem_l_arr_.find_l (e);
64 Vertical_align_element::Vertical_align_element()
66 transparent_b_ = true;
67 set_empty (true);
71 IMPLEMENT_IS_TYPE_B1(Vertical_align_element, Score_elem);