]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/span-bar-engraver.cc
release: 1.3.109
[lilypond.git] / lily / span-bar-engraver.cc
index e8d771e263953601f8b78d7ce5e691bb84713a38..7674d05dc11cea0df5d39e507d90938cdb309742 100644 (file)
@@ -6,11 +6,14 @@
   (c)  1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 
-#include "dimension-cache.hh"
+
 #include "lily-guile.hh"
+#include "bar.hh"
+#include "item.hh"
 #include "span-bar.hh"
 #include "engraver.hh"
 
+
 /** 
 
   Make bars that span multiple "staffs". Catch bars, and span a
   */
 class Span_bar_engraver : public Engraver
 {
-  Span_bar * spanbar_p_;
-  Link_array<Bar> bar_l_arr_;
+  Item * spanbar_p_;
+  Link_array<Item> bar_l_arr_;
 
 public:
   VIRTUAL_COPY_CONS(Translator);
   Span_bar_engraver();
 protected:
-  virtual void acknowledge_element (Score_element_info);
-  virtual void do_pre_move_processing();
-  virtual Span_bar* get_span_bar_p() const;
+  virtual void acknowledge_grob (Grob_info);
+  virtual void stop_translation_timestep();
+
 };
 
 
@@ -40,52 +43,44 @@ Span_bar_engraver::Span_bar_engraver()
   spanbar_p_ =0;
 }
 
-Span_bar*
-Span_bar_engraver::get_span_bar_p() const
-{
-  return new Span_bar;
-}
 
 
 void
-Span_bar_engraver::acknowledge_element (Score_element_info i)
+Span_bar_engraver::acknowledge_grob (Grob_info i)
 {
   int depth = i.origin_trans_l_arr (this).size();
   if (depth > 1
-      && dynamic_cast<Bar *> (i.elem_l_)) 
+      && Bar::has_interface (i.elem_l_))
     {
-      bar_l_arr_.push (dynamic_cast<Bar *> (i.elem_l_));
+      Item * it = dynamic_cast<Item*>(i.elem_l_);
+      bar_l_arr_.push (it);
 
       if (bar_l_arr_.size() >= 2 && !spanbar_p_) 
        {
-         spanbar_p_ = get_span_bar_p();
+         spanbar_p_ = new Item (get_property ("SpanBar"));
+         Span_bar::set_interface (spanbar_p_);
+               
          spanbar_p_->set_parent (bar_l_arr_[0], Y_AXIS);
-
-         /*
-           UGH. UGH UUHGK GUHG G
-          */
-         String visnam =  String(name()) + "-visibility";
-
-         spanbar_p_->set_elt_property ("visibility-lambda",
-                                       scm_eval (ly_symbol2scm (visnam.ch_C())));
-
          spanbar_p_->set_parent (bar_l_arr_[0], X_AXIS);
-         announce_element (Score_element_info (spanbar_p_,0));
-         if (!gh_string_p (spanbar_p_->get_elt_property ("glyph")))
-           spanbar_p_-> set_elt_property ("glyph",
-                                          bar_l_arr_[0]->get_elt_property ("glyph"));
+
+         announce_grob (spanbar_p_,0);
        }
     }
 }
-
 void
-Span_bar_engraver::do_pre_move_processing()
+Span_bar_engraver::stop_translation_timestep()
 {
   if (spanbar_p_) 
     {
       for (int i=0; i < bar_l_arr_.size() ; i++)
-       spanbar_p_->add_bar (bar_l_arr_[i]);
-      typeset_element (spanbar_p_);
+       Span_bar::add_bar( spanbar_p_,bar_l_arr_[i]);
+
+      SCM vissym =ly_symbol2scm ("visibility-lambda");
+      SCM vis = bar_l_arr_[0]->get_grob_property (vissym);       
+      if (scm_equal_p (spanbar_p_->get_grob_property (vissym), vis) != SCM_BOOL_T)
+       spanbar_p_->set_grob_property (vissym, vis);
+
+      typeset_grob (spanbar_p_);
       spanbar_p_ =0;
     }
   bar_l_arr_.set_size (0);