]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/pointer-group-interface.cc
Makes all side-positioning based on skylines instead of boxes.
[lilypond.git] / lily / pointer-group-interface.cc
index 045563d457b9acd572a203788fb5dea3d4dab336..79888348f9ce48a7fe7e69445924434941f8a2e8 100644 (file)
@@ -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<Grob *> empty_array;