]> git.donarmstrong.com Git - lilypond.git/commitdiff
lilypond-1.0.1
authorfred <fred>
Wed, 29 Jul 1998 14:03:04 +0000 (14:03 +0000)
committerfred <fred>
Wed, 29 Jul 1998 14:03:04 +0000 (14:03 +0000)
lily/bar-column-engraver.cc [new file with mode: 0644]
lily/bar-number-engraver.cc [new file with mode: 0644]

diff --git a/lily/bar-column-engraver.cc b/lily/bar-column-engraver.cc
new file mode 100644 (file)
index 0000000..2f1d760
--- /dev/null
@@ -0,0 +1,103 @@
+/*
+  bar-column-grav.cc -- implement Bar_column_engraver
+
+  source file of the GNU LilyPond music typesetter
+
+  (c)  1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+*/
+
+
+#include "bar-column-engraver.hh"
+#include "bar-column.hh"
+#include "request.hh"
+#include "script.hh"
+#include "bar.hh"
+
+Bar_column_engraver::Bar_column_engraver()
+{
+  bar_l_ =0;
+  barcol_p_ =0;
+  break_priority_i_ = 0;
+}
+
+void
+Bar_column_engraver::do_creation_processing ()
+{
+}
+
+
+void
+Bar_column_engraver::do_process_requests ()
+{
+  Scalar pri = get_property ("barColumnPriority");
+  if (pri.length_i() && pri.isnum_b ())
+    {
+      break_priority_i_ = int(pri);
+    }
+}
+
+void
+Bar_column_engraver::create_column ()
+{
+  if (!barcol_p_)
+    {
+      barcol_p_ = new Bar_column;
+      barcol_p_->breakable_b_ =true;
+      barcol_p_->break_priority_i_ = break_priority_i_;
+      announce_element (Score_element_info (barcol_p_, 0));      
+    }
+}
+
+
+void
+Bar_column_engraver::acknowledge_element (Score_element_info info)
+{
+  Item * it = info.elem_l_->access_Item ();
+  if (!it)
+    return;
+
+  if (it->is_type_b (Script::static_name())
+      && it->breakable_b_
+      && info.origin_grav_l_arr_.size() == 1
+      && it->break_priority_i_ == break_priority_i_)
+    {
+      create_column ();
+      barcol_p_->add_script ((Script*)it);
+    }
+  else if (info.origin_grav_l_arr_.size() == 1
+          && it->break_priority_i_ == break_priority_i_
+          && it->breakable_b_ 
+          && it->is_type_b (Bar::static_name()))
+    {
+      create_column ();
+      barcol_p_->set_bar ( (Bar*)it);
+    }
+}
+
+
+void
+Bar_column_engraver::process_acknowledged ()
+{
+}
+
+
+
+void
+Bar_column_engraver::do_pre_move_processing()
+{
+  if (barcol_p_) 
+    {
+      typeset_element (barcol_p_);
+      barcol_p_ =0;
+    }
+}
+
+void
+Bar_column_engraver::do_post_move_processing()
+{
+  script_l_arr_.clear();
+  bar_l_ =0;
+}
+
+IMPLEMENT_IS_TYPE_B1(Bar_column_engraver, Engraver);
+ADD_THIS_TRANSLATOR(Bar_column_engraver);
diff --git a/lily/bar-number-engraver.cc b/lily/bar-number-engraver.cc
new file mode 100644 (file)
index 0000000..8a79324
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+  bar-number-grav.cc -- implement Bar_number_engraver
+
+  source file of the GNU LilyPond music typesetter
+
+  (c)  1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+*/
+
+
+#include "bar-number-engraver.hh"
+#include "script.hh"
+#include "text-def.hh"
+#include "paper-def.hh"
+#include "command-request.hh"
+#include "bar.hh"
+#include "span-bar.hh"
+#include "stem.hh"
+#include "time-description.hh"
+#include "dimension.hh"
+
+Bar_number_engraver::Bar_number_engraver()
+{
+  script_p_ =0;
+}
+
+void
+Bar_number_engraver::acknowledge_element (Score_element_info i)
+{
+
+  Item *it=i.elem_l_->access_Item ();
+  if (script_p_
+      || !it || !it->is_type_b (Bar::static_name()))
+      return;
+
+  /* Only put numbers on bars that are at our own level (don't put
+    numbers over the staffs of a GrandStaff, only over the GrandStaff
+    itself */
+  if (i.origin_grav_l_arr_.size() != 1)
+    return;
+
+  Time_description const * time = get_staff_info().time_C_;
+  if (!time || time->cadenza_b_)
+    return;
+  
+  script_p_ = new Script;
+  Text_def *td_p = new Text_def;
+  td_p->text_str_ = to_str (time->bars_i_);
+
+  td_p->align_dir_ = LEFT;
+
+  script_p_->dir_ = UP;
+  script_p_->axis_ = Y_AXIS;
+  script_p_->specs_p_ = td_p->clone ();
+  script_p_->breakable_b_ = true;
+
+  Scalar pri = get_property ("barNumberBreakPriority");
+  if (pri.length_i () && pri.isnum_b ())
+    {
+      script_p_->break_priority_i_ = int (pri);
+    }
+  else
+    script_p_->break_priority_i_ = it->break_priority_i_;
+
+  Scalar padding = get_property ("barScriptPadding");
+  if (padding.length_i() && padding.isnum_b ())
+    {
+      script_p_->padding_f_ = Real(padding);
+    }
+
+  announce_element (Score_element_info (script_p_,0));
+}
+
+void
+Bar_number_engraver::do_pre_move_processing()
+{
+  if (script_p_) 
+    {
+      typeset_element (script_p_);
+      script_p_ =0;
+    }
+}
+
+IMPLEMENT_IS_TYPE_B1(Bar_number_engraver,Engraver);
+ADD_THIS_TRANSLATOR(Bar_number_engraver);