#include "item.hh"
#include "stream-event.hh"
#include "text-interface.hh"
+#include "time-signature.hh"
#include "translator.icc"
{
public:
TRANSLATOR_DECLARATIONS (Metronome_mark_engraver);
+
protected:
Item *text_;
- Grob *bar_line_;
+ Grob *support_;
SCM last_duration_;
SCM last_count_;
SCM last_text_;
+
+ DECLARE_ACKNOWLEDGER (break_aligned);
protected:
virtual void derived_mark () const;
Metronome_mark_engraver::Metronome_mark_engraver ()
{
text_ = 0;
+ support_ = 0;
last_duration_ = SCM_EOL;
last_count_ = SCM_EOL;
last_text_ = SCM_EOL;
scm_gc_mark (last_text_);
}
+void
+Metronome_mark_engraver::acknowledge_break_aligned (Grob_info inf)
+{
+ Grob *s = inf.grob ();
+ if (text_ && Time_signature::has_interface (s))
+ support_ = s;
+}
+
void
Metronome_mark_engraver::stop_translation_timestep ()
{
if (text_)
{
- Grob *mc = unsmob_grob (get_property ("currentMusicalColumn"));
- text_->set_parent (mc, X_AXIS);
+ if (!support_)
+ {
+ /*
+ Gardner Read "Music Notation", p.278
+
+ Align the metronome mark over the time signature (or the
+ first notational element of the measure if no time
+ signature is present in that measure).
+ */
+ Grob *mc = unsmob_grob (get_property ("currentMusicalColumn"));
+ text_->set_parent (mc, X_AXIS);
+ }
text_->set_object ("side-support-elements",
grob_list_to_grob_array (get_property ("stavesFound")));
text_ = 0;
+ support_ = 0;
}
}
last_text_ = text;
}
+
+
+ADD_ACKNOWLEDGER (Metronome_mark_engraver, break_aligned);
+
ADD_TRANSLATOR (Metronome_mark_engraver,
/* doc */
"Engrave metronome marking. This delegates the formatting"