2005-04-19 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ * lily/grace-engraver.cc (consider_change_grace_settings): new function.
+ (initialize): also consider_change_grace_settings() on
+ initialization. Fixes large grace notes at start of score.
+
* lily/break-align-interface.cc (do_alignment): don't translate if
total_extent is empty.
class Grace_engraver : public Engraver
{
+ void consider_change_grace_settings ();
protected:
virtual void start_translation_timestep ();
virtual void derived_mark () const;
+ virtual void initialize ();
TRANSLATOR_DECLARATIONS (Grace_engraver);
Moment last_moment_;
Grace_engraver::Grace_engraver ()
{
grace_settings_ = SCM_EOL;
+ last_moment_ = Moment (Rational (-1,1));
}
void
-Grace_engraver::derived_mark () const
+Grace_engraver::initialize ()
{
- scm_gc_mark (grace_settings_);
- Engraver::derived_mark ();
+ consider_change_grace_settings ();
}
void
-Grace_engraver::start_translation_timestep ()
+Grace_engraver::consider_change_grace_settings ()
{
Moment now = now_mom ();
if (last_moment_.grace_part_ && !now.grace_part_)
}
}
- last_moment_ = now;
+ last_moment_ = now_mom();
+}
+
+void
+Grace_engraver::derived_mark () const
+{
+ scm_gc_mark (grace_settings_);
+ Engraver::derived_mark ();
+}
+
+void
+Grace_engraver::start_translation_timestep ()
+{
+ consider_change_grace_settings ();
}
ADD_TRANSLATOR (Grace_engraver,