Path tool point nudging UX improvements
Part of #820. Improves upon the MVP implementation in #1068. Requirements for this task are described in https://github.com/GraphiteEditor/Graphite/pull/1068#issuecomment-1509469810:
Nudging a selected handle causes the opposing handle to match its length (like if you were dragging the handle while holding Shift). Let's have this distance mirroring happen only when holding Ctrl (or CtrlShift for 10x nudging).
When dragging or nudging both handles of a manipulator group at once, I'd like the handle to switch from smooth to split so the points are dragged or nudged together rather than trying to maintain their 180° mirroring.
I'd like to be able to Shift-click an already selected handle to deselect it. Currently it seems to deselect the entire shape. And in order to select just one anchor/handle (thus deselecting all others), I seem to have to click twice right now when I'd expect to click only once for that to happen.
When rotating a pair of handles, this shouldn't be happening where their lengths change. We probably want that case to do the same as rotating with just the anchor selected (same as next point).
If you have just one handle selected, it should rotate the handle(s) around the anchor just like you had the anchor selected instead (the behavior for rotating the sole selected anchor is good).
To distill the new desired behavior:
- Points selected in only one manipulator group:
Grabbing and dragging: current behavior is good, except if only the two handles are selected, then the handles should be split so the points can move in unison without having to respect the 180° smooth angle which is weird.Rotation: should always rotate around the anchor regardless of which combination are selected. If a handle is split, only that handle should rotate around its anchor.Scaling: should always scale around the anchor regardless of which combination are selected. If only one handle is selected, only that handle should scale towards the anchor. The current behavior is good when just the anchor (no handles) is selected, but the same should happen if both handles are selected (with or without its anchor) where they scale around the anchor instead of their common center.- Points selected across multiple manipulator groups:
Grabbing and dragging: current behavior is good, except the same as above for cases where the two handles but not the anchor are selected and they should become split rather than doing this funky thing (near the bottom).Rotating: Current behavior is good except that we want two selected handles to become split rather than fighting to remain at 180°.Scaling: Same as rotating.