X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fstaff-grouper-interface.cc;h=d9c430f316823dc2670c81e23fa61c0ff6694188;hb=0b544cfb7332615ef809b71b57ab656741311ae1;hp=7366190524cda2a23413ce9e402c55ea00a72b1e;hpb=8860a7700be8348848bba7972ad86ef46721c544;p=lilypond.git diff --git a/lily/staff-grouper-interface.cc b/lily/staff-grouper-interface.cc index 7366190524..d9c430f316 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--2014 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 @@ -20,25 +20,39 @@ #include "staff-grouper-interface.hh" #include "hara-kiri-group-spanner.hh" +#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 ((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_grob ((*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 " + );