Implement node/edge editing; constrainToCanvas