2 span-bar-grav.cc -- implement Span_bar_engraver
4 source file of the GNU LilyPond music typesetter
6 (c) 1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
10 #include "lily-guile.hh"
13 #include "span-bar.hh"
14 #include "engraver.hh"
19 Make bars that span multiple "staffs". Catch bars, and span a
20 Span_bar over them if we find more than 2 bars. Vertical alignment
21 of staffs changes the appearance of spanbars. It is up to the
22 aligner (Vertical_align_engraver, in this case, to add extra
23 dependencies to the spanbars.
26 class Span_bar_engraver
: public Engraver
29 Link_array
<Item
> bar_l_arr_
;
32 VIRTUAL_COPY_CONS(Translator
);
35 virtual void acknowledge_element (Score_element_info
);
36 virtual void do_pre_move_processing();
41 Span_bar_engraver::Span_bar_engraver()
49 Span_bar_engraver::acknowledge_element (Score_element_info i
)
51 int depth
= i
.origin_trans_l_arr (this).size();
53 && Bar::has_interface (i
.elem_l_
))
55 Item
* it
= dynamic_cast<Item
*>(i
.elem_l_
);
58 if (bar_l_arr_
.size() >= 2 && !spanbar_p_
)
60 spanbar_p_
= new Item (get_property ("basicSpanBarProperties"));
61 Span_bar::set_interface (spanbar_p_
);
62 spanbar_p_
->set_elt_property ("glyph", bar_l_arr_
[0]->get_elt_property ("glyph"));
63 spanbar_p_
->set_elt_property ("visibility-lambda",
64 bar_l_arr_
[0]->get_elt_property ("visibility-lambda"));
66 spanbar_p_
->set_parent (bar_l_arr_
[0], Y_AXIS
);
67 spanbar_p_
->set_parent (bar_l_arr_
[0], X_AXIS
);
69 announce_element (Score_element_info (spanbar_p_
,0));
74 Span_bar_engraver::do_pre_move_processing()
78 for (int i
=0; i
< bar_l_arr_
.size() ; i
++)
79 Span_bar::add_bar( spanbar_p_
,bar_l_arr_
[i
]);
80 typeset_element (spanbar_p_
);
83 bar_l_arr_
.set_size (0);
88 ADD_THIS_TRANSLATOR(Span_bar_engraver
);