X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fstaff-grouper-interface.cc;h=6e496ca03ca13e0aad4eb492aa494ed34ab77f5b;hb=47db9a3883d726ca53e2133a3b2298f78dd6a32e;hp=ec204fbf9bc70bda428f74427498b02b647951b9;hpb=1c846b2c2348b4e0ca4a3c2e8fb267047ba2d203;p=lilypond.git diff --git a/lily/staff-grouper-interface.cc b/lily/staff-grouper-interface.cc index ec204fbf9b..6e496ca03c 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--2011 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 == Grob::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 */ - "staff-staff-spacing " - "staffgroup-staff-spacing " - ); + /* properties */ + "staff-staff-spacing " + "staffgroup-staff-spacing " + );