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);
--- /dev/null
+/*
+ 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
--- /dev/null
+/*
+ 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
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);
}
args.push (req->one_beat_i_);
meter_p_ = new Meter (args);
+ meter_p_->break_priority_i_ = 1; // ugh
}
if (meter_p_)
--- /dev/null
+/*
+ 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);