/*
This file is part of LilyPond, the GNU music typesetter.
- Copyright (C) 1997--2011 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
LilyPond is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
bool
Item::is_non_musical (Grob *me)
{
- if (me->original ())
- return false;
-
Item *i = dynamic_cast<Item *> (me->get_parent (X_AXIS));
return i ? Item::is_non_musical (i) : to_boolean (me->get_property ("non-musical"));
}
void
Item::discretionary_processing ()
{
- if (is_broken ())
+ if (is_broken () || original ())
return;
if (Item::is_non_musical (this))
return 0;
}
+Item *
+Item::maybe_find_prebroken_piece (Item *g, Direction d)
+{
+ Item *ret = g->find_prebroken_piece (d);
+ if (ret)
+ return ret;
+ return g;
+}
+
Item *
Item::find_prebroken_piece (Direction d) const
{
if (cached_pure_height_valid_)
return cached_pure_height_ + pure_relative_y_coordinate (g, start, end);
- cached_pure_height_ = Grob::pure_height (this, start, end);
- cached_pure_height_valid_ = true;
+ cache_pure_height (Grob::pure_height (this, start, end));
return cached_pure_height_ + pure_relative_y_coordinate (g, start, end);
}
+void
+Item::cache_pure_height (Interval height)
+{
+ cached_pure_height_ = height;
+ cached_pure_height_valid_ = true;
+}
+
ADD_INTERFACE (Item,
"Grobs can be distinguished in their role in the horizontal"
" spacing. Many grobs define constraints on the spacing by"