X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fgrob.cc;h=c613effccc65fd6be001aad742e41a1ed29b15a4;hb=217d48d7cdefb8ad026c7ade58d1f03f17cbb47a;hp=b27350b92996e694a9acffe8ff94cbb2513a8e86;hpb=3dd2729c9b45d88b531874a342e3b18ef516ded8;p=lilypond.git diff --git a/lily/grob.cc b/lily/grob.cc index b27350b929..c613effccc 100644 --- a/lily/grob.cc +++ b/lily/grob.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2009 Han-Wen Nienhuys + Copyright (C) 1997--2011 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -123,7 +123,9 @@ Grob::get_print_stencil () const if (Stencil *m = unsmob_stencil (stil)) { retval = *m; - if (to_boolean (get_property ("transparent"))) + bool transparent = to_boolean (get_property ("transparent")); + + if (transparent) retval = Stencil (m->extent_box (), SCM_EOL); else { @@ -156,7 +158,8 @@ Grob::get_print_stencil () const } /* process whiteout */ - if (to_boolean (get_property ("whiteout"))) + /* a grob has to be visible, otherwise the whiteout property has no effect */ + if (!transparent && to_boolean (get_property ("whiteout"))) { /* Call the scheme procedure stencil-whiteout in scm/stencils.scm */ /* to add a round-filled-box stencil to the stencil list */ @@ -188,6 +191,16 @@ Grob::get_system () const return 0; } +/* This version of get_system is more reliable than this->get_system () + before line-breaking has been done, at which point there is only + one system in the whole score and we can find it just by following + parent pointers. */ +System * +Grob::get_system(Grob *me) +{ + Grob *p = me->get_parent (X_AXIS); + return p ? get_system (p) : dynamic_cast(me); +} void Grob::handle_broken_dependencies () @@ -448,10 +461,7 @@ Grob::extent (Grob *refp, Axis a) const Interval Grob::pure_height (Grob *refp, int start, int end) { - SCM proc = get_property_data (ly_symbol2scm ("Y-extent")); - SCM iv_scm = call_pure_function (proc, - scm_list_1 (self_scm ()), - start, end); + SCM iv_scm = get_pure_property ("Y-extent", start, end); Interval iv = robust_scm2interval (iv_scm, Interval (0, 0)); Real offset = pure_relative_y_coordinate (refp, start, end); @@ -482,6 +492,19 @@ Grob::spanned_rank_interval () const return Interval_t (-1, 0); } +bool +Grob::pure_is_visible (int /* start */, int /* end */) const +{ + return true; +} + +/* Sort grobs according to their starting column. */ +bool +Grob::less (Grob *g1, Grob *g2) +{ + return g1->spanned_rank_interval ()[LEFT] < g2->spanned_rank_interval ()[LEFT]; +} + /**************************************************************** REFPOINTS ****************************************************************/