]> git.donarmstrong.com Git - lilypond.git/commitdiff
lilypond-0.1.36
authorfred <fred>
Sun, 24 Mar 2002 20:01:59 +0000 (20:01 +0000)
committerfred <fred>
Sun, 24 Mar 2002 20:01:59 +0000 (20:01 +0000)
lily/clef-grav.cc
lily/include/priority-halign-grav.hh [new file with mode: 0644]
lily/include/score-priority-grav.hh [new file with mode: 0644]
lily/key-grav.cc
lily/meter-grav.cc
lily/priority-halign-grav.cc [new file with mode: 0644]

index 78f6aab7bd2dd24bf65c9deaf0d40bd219a272b7..6bb055c2faeea36a0459d67bdbf0e7714389a4d4 100644 (file)
@@ -107,6 +107,7 @@ Clef_engraver::create_clef()
   if (!clef_p_)
     {
       clef_p_ = new Clef_item;
+      clef_p_->break_priority_i_ = -2; // ugh
       announce_element (Score_elem_info (clef_p_,clef_req_l_));
     }
   clef_p_->read (*this);
diff --git a/lily/include/priority-halign-grav.hh b/lily/include/priority-halign-grav.hh
new file mode 100644 (file)
index 0000000..4d6fdb6
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+  score-halign-grav.hh -- declare Score_horizontal_align_engraver
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef FSCORE_HALIGN_GRAV_HH
+#define FSCORE_HALIGN_GRAV_HH
+
+#include "engraver.hh"
+
+class Priority_horizontal_align_engraver : public Engraver {
+  Break_align_item * halign_p_;
+public:
+  TRANSLATOR_CLONE(Priority_horizontal_align_engraver);
+  DECLARE_MY_RUNTIME_TYPEINFO;
+  Priority_horizontal_align_engraver();
+protected:
+  virtual void acknowledge_element (Score_elem_info);
+  virtual void do_pre_move_processing();
+};
+#endif // Priority_HALIGN_GRAV_HH
diff --git a/lily/include/score-priority-grav.hh b/lily/include/score-priority-grav.hh
new file mode 100644 (file)
index 0000000..48ed10e
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+  score-align-grav.hh -- declare Type_align_engraver
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef SCOREF_ALIGN_GRAV_HH
+#define SCOREF_ALIGN_GRAV_HH
+
+#include "engraver.hh"
+#include "assoc.hh"
+
+/**
+  Group  a number of items across staffs
+ */
+class Score_priority_engraver : public Engraver
+{
+  Assoc<int, Horizontal_group_item  *> align_p_assoc_;
+public:
+  TRANSLATOR_CLONE(Score_priority_engraver);
+  Score_priority_engraver ();
+  DECLARE_MY_RUNTIME_TYPEINFO;
+protected:
+  virtual void acknowledge_element (Score_elem_info);
+  virtual void do_pre_move_processing();
+};
+
+#endif // SCORE_ALIGN_GRAV_HH
index 3abc16b6730e942f3ddda593c573de89800e7743..42359ae77a617c52808899de7ca47344fe0b816b 100644 (file)
@@ -36,6 +36,7 @@ Key_engraver::create_key()
            c0_i = *get_staff_info().c0_position_i_l_;  
        
        kit_p_ = new Key_item (c0_i);
+       kit_p_->break_priority_i_ = -1; // ugh
        announce_element (Score_elem_info (kit_p_,keyreq_l_));
        kit_p_->read (*this);
     }
index 70ca2af2bc27ce0b7d2eb61400da67a321b9b4f2..4fecb68d9cbf2aac7f41e9bdb163821a834c50b0 100644 (file)
@@ -32,6 +32,7 @@ Meter_engraver::do_process_requests()
       args.push (req->one_beat_i_);
        
       meter_p_ = new Meter (args);
+      meter_p_->break_priority_i_ = 1; // ugh
     }
 
   if (meter_p_)
diff --git a/lily/priority-halign-grav.cc b/lily/priority-halign-grav.cc
new file mode 100644 (file)
index 0000000..a42c4a5
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+  score-halign-reg.cc -- implement Priority_horizontal_align_engraver
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+#include "bar.hh"
+#include "break-align-item.hh"
+#include "priority-halign-grav.hh"
+#include "score-priority-grav.hh"
+
+Priority_horizontal_align_engraver::Priority_horizontal_align_engraver()
+{
+  halign_p_ =0;
+}
+
+void
+Priority_horizontal_align_engraver::do_pre_move_processing()
+{
+  if (halign_p_) 
+    {
+      typeset_element (halign_p_);
+      halign_p_ =0;
+    }
+}
+
+void
+Priority_horizontal_align_engraver::acknowledge_element (Score_elem_info i)
+{
+  Engraver* reg = i.origin_grav_l_arr_[0];
+  if (reg->is_type_b (Score_priority_engraver::static_name()))
+    {
+      if (!halign_p_) 
+       {
+         halign_p_ = new Break_align_item;
+         halign_p_->breakable_b_ = true;
+         announce_element (Score_elem_info (halign_p_,0));
+       }
+      Item * it = i.elem_l_->item();
+      if (it->break_priority_i_ == 0)
+       halign_p_->center_l_ = it;
+
+      halign_p_->add (it, it->break_priority_i_);
+    }
+}
+
+IMPLEMENT_IS_TYPE_B1(Priority_horizontal_align_engraver,Engraver);
+ADD_THIS_TRANSLATOR(Priority_horizontal_align_engraver);