+2002-04-01 Han-Wen <hanwen@cs.uu.nl>
+
+ * lily/rhythmic-column-engraver.cc (acknowledge_grob): don't make
+ note column for notes/stems/dots that already have parents. Fixes
+ nested grace contexts.
+
2002-04-01 Jan Nieuwenhuizen <janneke@gnu.org>
* input/mozart-hrn-3.ly: Tweak Slur.beautiful, so that we don't
2002-04-01 Han-Wen <hanwen@cs.uu.nl>
+ * input/regression/spacing-grace-duration.ly: new file
+
+ * lily/spacing-engraver.cc (acknowledge_grob): ignore grace notes
+ for shortest durations.
+
* lily/multi-measure-rest.cc (set_spacing_rods): tune rods to the
extent of the mm rest.
@lilypondfile[printfilename]{spacing-short-notes.ly}
+@lilypondfile[printfilename]{spacing-grace-duration.ly}
+
@lilypondfile[printfilename]{lyrics-bar.ly}
@lilypondfile[printfilename]{spacing-knee.ly}
Rhythmic_column_engraver::acknowledge_grob (Grob_info i)
{
Item * item = dynamic_cast <Item *> (i.grob_l_);
- if (item && Stem::has_interface (item))
+ if (!item || item->get_parent (X_AXIS))
+ return ;
+ if (Stem::has_interface (item))
{
stem_l_ = item;
}
- else if (item && Rhythmic_head::has_interface (item))
+ else if (Rhythmic_head::has_interface (item))
{
rhead_l_arr_.push (item);
}
- else if (item && Dot_column::has_interface (item))
+ else if (Dot_column::has_interface (item))
{
dotcol_l_ = item;
}
PQueue<Rhythmic_tuple> playing_durations_;
Array<Rhythmic_tuple> now_durations_;
Array<Rhythmic_tuple> stopped_durations_;
-
+ Moment now_;
Spanner * spacing_p_;
TRANSLATOR_DECLARATIONS(Spacing_engraver);
if (to_boolean (i.grob_l_->get_grob_property ("non-rhythmic")))
return;
-
- if (Rhythmic_req * r = dynamic_cast<Rhythmic_req*> (i.music_cause ()))
+
+ /*
+ only pay attention to durations that are not grace notes.
+ */
+ if (!now_.grace_part_)
{
- Rhythmic_tuple t (i, now_mom () + r->length_mom ());
- now_durations_.push (t);
+ if (Rhythmic_req * r = dynamic_cast<Rhythmic_req*> (i.music_cause ()))
+ {
+ Moment len = r->length_mom ();
+ Rhythmic_tuple t (i, now_mom () + len);
+ now_durations_.push (t);
+ }
}
}
for (int i=0; i < playing_durations_.size (); i++)
{
Moment m = (playing_durations_[i].info_.music_cause ())->length_mom ();
- if (m.to_bool ())
- {
- shortest_playing = shortest_playing <? m;
- }
+ shortest_playing = shortest_playing <? m;
}
Moment starter;
void
Spacing_engraver::start_translation_timestep ()
{
- Moment now = now_mom ();
+ now_ = now_mom ();
stopped_durations_.clear ();
- while (playing_durations_.size () && playing_durations_.front ().end_ < now)
+ while (playing_durations_.size () && playing_durations_.front ().end_ < now_)
playing_durations_.delmin ();
- while (playing_durations_.size () && playing_durations_.front ().end_ == now)
+ while (playing_durations_.size () && playing_durations_.front ().end_ == now_)
stopped_durations_.push (playing_durations_.get ());
}
max_count = counts[i];
}
- printf ("duration %d/%d, count %d\n", durations[i].num (), durations[i].den (), counts[i]);
+ // printf ("duration %d/%d, count %d\n", durations[i].num (), durations[i].den (), counts[i]);
}
/*