X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fstaff-grouper-interface.cc;h=55162c2bc7cc0cc13a7000351c2f46e879452b0a;hb=90e4d7057f3857da049dfda3d130017d4719bd6b;hp=9a5d93da25a80ac998c82ccbf6a8a3821b86ee67;hpb=a1c2a3a778efafbb8abbd44eb212a3f52f34c5f9;p=lilypond.git diff --git a/lily/staff-grouper-interface.cc b/lily/staff-grouper-interface.cc index 9a5d93da25..55162c2bc7 100644 --- a/lily/staff-grouper-interface.cc +++ b/lily/staff-grouper-interface.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2009--2010 Joe Neeman + Copyright (C) 2009--2015 Joe Neeman LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -23,24 +23,36 @@ #include "page-layout-problem.hh" #include "pointer-group-interface.hh" -Grob* -Staff_grouper_interface::get_maybe_pure_last_grob (Grob *me, bool pure, int start, int end) +/* Checks whether the child grob is in the "interior" of this staff-grouper. + This is the case if the next spaceable, living child after the given one + belongs to the group. +*/ +bool +Staff_grouper_interface::maybe_pure_within_group (Grob *me, Grob *child, bool pure, int start, int end) { extract_grob_set (me, "elements", elts); - for (vsize i = elts.size (); i--;) - if (Page_layout_problem::is_spaceable (elts[i]) - && ((pure && !Hara_kiri_group_spanner::request_suicide (me, start, end)) - || (!pure && elts[i]->is_live ()))) - return elts[i]; - return 0; + vector::const_iterator i = find (elts, child); + + if (i == elts.end ()) + return false; + + for (++i; i != elts.end (); ++i) + if (Page_layout_problem::is_spaceable (*i) + && ((pure && !Hara_kiri_group_spanner::request_suicide (*i, start, end)) + || (!pure && (*i)->is_live ()))) + return me == unsmob ((*i)->get_object ("staff-grouper")); + + // If there was no spaceable, living child after me, I don't + // count as within the group. + return false; } ADD_INTERFACE (Staff_grouper_interface, - "A grob that collects staves together.", + "A grob that collects staves together.", - /* properties */ - "between-staff-spacing " - "after-last-staff-spacing " - ); + /* properties */ + "staff-staff-spacing " + "staffgroup-staff-spacing " + );