]> git.donarmstrong.com Git - lilypond.git/blob - lily/vertical-align-elem.cc
release: 0.1.1
[lilypond.git] / lily / vertical-align-elem.cc
1 /*
2   vertical-align-item.cc -- implement Vertical_align_elem
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
7 */
8
9 #include "vertical-align-elem.hh"
10 #include "interval.hh"
11
12 void
13 Vertical_align_element::add(Score_elem*el_l)
14 {
15     assert( ! contains_b(el_l));
16     elem_l_arr_.push(el_l);
17     add_dependency(el_l);
18 }
19
20 void
21 Vertical_align_element::do_substitute_dependency(Score_elem*o,Score_elem*n)
22 {
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);
29 }
30 void
31 Vertical_align_element::do_post_processing()
32 {
33     Array<Interval> dims;
34     for (int i=0; i < elem_l_arr_.size(); i++ ) {
35         Interval y = elem_l_arr_[i]->height() ;
36         if (y.empty_b())
37             y = Interval(0,0);
38         
39         dims.push(y);
40     }
41
42     Real where_f=0;
43     for ( int i=0 ;  i < elem_l_arr_.size(); i++) {
44         elem_l_arr_[i]->translate_y( - dims[i][1] - where_f);
45         where_f += dims[i].length();
46     }
47 }
48
49 bool
50 Vertical_align_element::contains_b(Score_elem const *e)const
51 {
52     return elem_l_arr_.find_l(e);
53 }
54
55 Vertical_align_element::Vertical_align_element()
56 {
57     transparent_b_ = true;
58     empty_b_ =true;
59 }
60
61
62 IMPLEMENT_IS_TYPE_B1(Vertical_align_element, Score_elem);
63