]> git.donarmstrong.com Git - lilypond.git/blob - lily/span-brace-engraver.cc
patch::: 0.0.75.jcn6: pats
[lilypond.git] / lily / span-brace-engraver.cc
1 /*
2   span-brace-engraver.cc -- implement Span_brace_engraver
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
7            Jan Nieuwenhuizen <jan@digicash.com>
8 */
9
10 #include "span-brace-item.hh"
11 #include "span-brace-engraver.hh"
12 #include "vertical-align-spanner.hh"
13
14 IMPLEMENT_STATIC_NAME(Span_brace_engraver);
15 IMPLEMENT_IS_TYPE_B1(Span_brace_engraver,Engraver);
16 ADD_THIS_ENGRAVER(Span_brace_engraver);
17
18 Span_brace_engraver::Span_brace_engraver()
19 {
20     span_brace_p_ = 0;
21     valign_l_ = 0;
22 }
23
24 Span_brace_engraver::~Span_brace_engraver()
25 {
26 }
27
28 void
29 Span_brace_engraver::acknowledge_element( Score_elem_info i )
30 {
31     if ( i.elem_l_->is_type_b( Bar::static_name() ) ) {
32         bar_l_arr_.push( (Bar*)i.elem_l_->item() );
33         
34         if ( bar_l_arr_.size() >= 2 && !span_brace_p_ ) {
35             span_brace_p_ = new Span_brace_item;
36             announce_element( Score_elem_info( span_brace_p_, 0 ) );
37         }
38     } 
39     else if ( i.elem_l_->is_type_b( Vertical_align_spanner::static_name() ) 
40         && i.origin_grav_l_arr_.size() <= 2 )
41         valign_l_ = (Vertical_align_spanner*)i.elem_l_->spanner();
42 }
43
44 void
45 Span_brace_engraver::do_pre_move_processing()
46 {
47     if ( span_brace_p_ ) {
48         for ( int i=0; i < bar_l_arr_.size() ; i++ )
49             span_brace_p_->add( bar_l_arr_[ i ] );
50         span_brace_p_->set( valign_l_ );
51         typeset_breakable_item( span_brace_p_ );
52         span_brace_p_ = 0;
53     }
54
55     bar_l_arr_.clear();
56 }
57