X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fitem.cc;h=fdf9b00ce9d36c1498076dc221e6ab01f992be61;hb=f604d2f2f7f03cbbd43182c14ef20647d16f87d8;hp=521b285d52d86aa89d7c4ed014a39ac2ace40fd9;hpb=2819ba86363def7f615b7fbbf03aecef761296c6;p=lilypond.git diff --git a/lily/item.cc b/lily/item.cc index 521b285d52..fdf9b00ce9 100644 --- a/lily/item.cc +++ b/lily/item.cc @@ -29,6 +29,7 @@ Item::Item (SCM s) : Grob (s) { broken_to_drul_[LEFT] = broken_to_drul_[RIGHT] = 0; + cached_pure_height_valid_ = false; } /** @@ -38,6 +39,7 @@ Item::Item (Item const &s) : Grob (s) { broken_to_drul_[LEFT] = broken_to_drul_[RIGHT] = 0; + cached_pure_height_valid_ = false; } bool @@ -149,14 +151,18 @@ Item::handle_prebroken_dependencies () Can't do this earlier, because try_visibility_lambda () might set the elt property transparent, which would then be copied. */ - SCM vis = get_property ("break-visibility"); - if (scm_is_vector (vis)) - { - bool visible = to_boolean (scm_c_vector_ref (vis, break_status_dir () + 1)); + if (!Item::break_visible (this)) + suicide (); +} - if (!visible) - suicide (); - } +bool +Item::break_visible (Grob *g) +{ + Item *it = dynamic_cast (g); + SCM vis = g->get_property ("break-visibility"); + if (scm_is_vector (vis)) + return to_boolean (scm_c_vector_ref (vis, it->break_status_dir () + 1)); + return true; } bool @@ -177,7 +183,7 @@ Item::pure_is_visible (int start, int end) const } Interval_t -Item::spanned_rank_iv () const +Item::spanned_rank_interval () const { int c = get_column ()->get_rank (); return Interval_t (c, c); @@ -225,6 +231,23 @@ unsmob_item (SCM s) return dynamic_cast (unsmob_grob (s)); } +Interval +Item::pure_height (Grob *g, int start, int end) +{ + 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; + return cached_pure_height_ + pure_relative_y_coordinate (g, start, end); +} + +bool +Item::less (Grob * const &g1, Grob * const &g2) +{ + return dynamic_cast (g1)->get_column ()->get_rank () < dynamic_cast (g2)->get_column ()->get_rank (); +} + ADD_INTERFACE (Item, "Grobs can be distinguished in their role in the horizontal spacing.\n"