import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Consumer;
import java.util.stream.Collectors;
registerInterfaceComponent(interfaceComp);
comps.forEach(c -> registerComponent(c));
- model.getWires().forEach(w -> registerWire(w));
+ model.getWiresByName().values().forEach(w -> registerWire(w));
addHandle(cornerHandle = new CornerHandle(editor.toBeEdited));
}
}
private void registerWire(GUIWire wire)
{
- wire.addPathChangedListener((w, diff) ->
+ Point[] path = wire.getPath();
+ AtomicInteger oldLength = new AtomicInteger(path == null ? 0 : path.length);
+ wire.addPathChangedListener(w ->
{
+ Point[] newPath = w.getPath();
+ int newLength = newPath == null ? 0 : newPath.length;
+ int diff = newLength - oldLength.getAndSet(newLength);
if (diff != 0)
{
if (diff > 0)
pointHandlesPerWire.get(w).forEach(h -> h.updatePos());
});
addWireHandle(wire);
- if (wire.getPath() == null)
+ if (path == null)
return;
- for (int i = 0; i < wire.getPath().length; i++)
+ for (int i = 0; i < path.length; i++)
{
addWirePointHandle(wire);
}
void destroyWirePointHandle(GUIWire owner, WirePointHandle h)
{
- List<WirePointHandle> handles = pointHandlesPerWire.get(owner);
- int pointIndex = handles.indexOf(h);
- handles.remove(pointIndex);
- removeHandle(h);
- owner.removePathPoint(pointIndex);
+ if (pointHandlesPerWire.containsKey(owner))
+ {
+ List<WirePointHandle> handles = pointHandlesPerWire.get(owner);
+ int pointIndex = handles.indexOf(h);
+ handles.remove(pointIndex);
+ removeHandle(h);
+ owner.removePathPoint(pointIndex);
+ }
}
private void removeWirePointHandles(GUIWire owner)
entryState.clicked(clicked, stateMask);
}
- private boolean click(Collection<? extends Handle> handles, Point clicked, EditorState state, int stateMask)
+ private static boolean click(Collection<? extends Handle> handles, Point clicked, EditorState state, int stateMask)
{
for (Handle h : handles)
if (h.click(clicked.x, clicked.y, stateMask, state))