From 919fbfe66dd473de4b0b387b2daead18ae485b41 Mon Sep 17 00:00:00 2001 From: fred Date: Mon, 7 Jul 1997 00:13:29 +0000 Subject: [PATCH] lilypond-0.0.73pre --- lily/include/span-bar-grav.hh | 28 +++++++++++++++++++ lily/span-bar-grav.cc | 51 +++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 lily/include/span-bar-grav.hh create mode 100644 lily/span-bar-grav.cc diff --git a/lily/include/span-bar-grav.hh b/lily/include/span-bar-grav.hh new file mode 100644 index 0000000000..e93c3af1b7 --- /dev/null +++ b/lily/include/span-bar-grav.hh @@ -0,0 +1,28 @@ +/* + span-bar-grav.hh -- declare Span_bar_engraver + + source file of the GNU LilyPond music typesetter + + (c) 1997 Han-Wen Nienhuys +*/ + + +#ifndef SPAN_BAR_GRAV_HH +#define SPAN_BAR_GRAV_HH + +#include "engraver.hh" + +class Span_bar_engraver : public Engraver +{ + Span_bar * spanbar_p_; + Array bar_l_arr_; + Vertical_align_element * valign_l_; +public: + NAME_MEMBERS(); + virtual void acknowledge_element(Score_elem_info); + virtual void do_pre_move_processing(); + Span_bar_engraver(); + +}; + +#endif // SPAN_BAR_GRAV_HH diff --git a/lily/span-bar-grav.cc b/lily/span-bar-grav.cc new file mode 100644 index 0000000000..8a8482ff8b --- /dev/null +++ b/lily/span-bar-grav.cc @@ -0,0 +1,51 @@ +/* + span-bar-grav.cc -- implement Span_bar_engraver + + source file of the GNU LilyPond music typesetter + + (c) 1997 Han-Wen Nienhuys +*/ + +#include "span-bar.hh" +#include "span-bar-grav.hh" +#include "vertical-align-spanner.hh" + +Span_bar_engraver::Span_bar_engraver() +{ + spanbar_p_ =0; + valign_l_ =0; +} + +void +Span_bar_engraver::acknowledge_element(Score_elem_info i) +{ + if ( i.elem_l_->is_type_b( Bar::static_name() ) ) { + bar_l_arr_.push( (Bar*)i.elem_l_->item() ); + + if (bar_l_arr_.size() >= 2 && !spanbar_p_) { + spanbar_p_ = new Span_bar; + announce_element( Score_elem_info(spanbar_p_,0) ); + } + } else if (i.elem_l_->is_type_b( Vertical_align_spanner::static_name() ) + && i.origin_grav_l_arr_.size() <= 2) { + valign_l_ = (Vertical_align_spanner*)i.elem_l_->spanner(); + } +} + +void +Span_bar_engraver::do_pre_move_processing() +{ + if (spanbar_p_) { + for (int i=0; i < bar_l_arr_.size() ; i++) + spanbar_p_->add(bar_l_arr_[i]); + spanbar_p_->set( valign_l_ ); + typeset_breakable_item(spanbar_p_); + spanbar_p_ =0; + } + bar_l_arr_.set_size( 0); + +} + +IMPLEMENT_STATIC_NAME(Span_bar_engraver); +IMPLEMENT_IS_TYPE_B1(Span_bar_engraver,Engraver); +ADD_THIS_ENGRAVER(Span_bar_engraver); -- 2.39.5