/*
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))
{
if (cached_pure_height_valid_)
return cached_pure_height_ + pure_relative_y_coordinate (g, start, end);
+ /* Note: cached_pure_height_ does not notice if start changes, implicitly
+ assuming that Items' pure_heights do not depend on 'start' or 'end'.
+ Accidental_interface::pure_height(), however, does depend on 'start'.
+ */
- 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"