]> git.donarmstrong.com Git - lilypond.git/commitdiff
lilypond-0.0.73pre
authorfred <fred>
Mon, 7 Jul 1997 00:13:29 +0000 (00:13 +0000)
committerfred <fred>
Mon, 7 Jul 1997 00:13:29 +0000 (00:13 +0000)
lily/include/span-bar-grav.hh [new file with mode: 0644]
lily/span-bar-grav.cc [new file with mode: 0644]

diff --git a/lily/include/span-bar-grav.hh b/lily/include/span-bar-grav.hh
new file mode 100644 (file)
index 0000000..e93c3af
--- /dev/null
@@ -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 <hanwen@stack.nl>
+*/
+
+
+#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*> 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 (file)
index 0000000..8a8482f
--- /dev/null
@@ -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 <hanwen@stack.nl>
+*/
+
+#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);