X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fpointer-group-interface.cc;h=79888348f9ce48a7fe7e69445924434941f8a2e8;hb=0c9726a0d0093db2e31ec9ba80a7f9df150a5827;hp=045563d457b9acd572a203788fb5dea3d4dab336;hpb=d61cf3bbdb1c6670a127ba3baddf2f04d3e34fd3;p=lilypond.git diff --git a/lily/pointer-group-interface.cc b/lily/pointer-group-interface.cc index 045563d457..79888348f9 100644 --- a/lily/pointer-group-interface.cc +++ b/lily/pointer-group-interface.cc @@ -68,11 +68,19 @@ Pointer_group_interface::find_grob (Grob *me, SCM sym, bool (*pred) (Grob *)) return 0; } +// If the grob array is unordered, we assume that duplicates should +// be removed. This makes sense for things like side-position-elements, +// which may be added recursively numerous times and thus will eat up +// computation time when skylines are calculated. +// If the array is ordered, then we don't remove duplicates. + void Pointer_group_interface::add_grob (Grob *me, SCM sym, Grob *p) { Grob_array *arr = get_grob_array (me, sym); arr->add (p); + if (!arr->ordered ()) + arr->remove_duplicates (); } void @@ -81,6 +89,7 @@ Pointer_group_interface::add_unordered_grob (Grob *me, SCM sym, Grob *p) Grob_array *arr = get_grob_array (me, sym); arr->add (p); arr->set_ordered (false); + arr->remove_duplicates (); } static vector empty_array;