Open
Description
Much of this is explained/demonstrated in this detailed webcast: https://youtu.be/OmveqhzXJFg
Discord thread: https://discord.com/channels/731730685944922173/1319602515758682132
Miscellaneous (TODO: clean up and clarify this):
- Click-dragging to box select from inside a shape (even if it's not filled) should not select all the shape's points and begin dragging them; it should allow the box selection just like outside the shape
- Our current way of clicking another layer to make it selected should not happen unless it's a double-click, and if Shift is held, it adds or removes that layer
- Double-clicking an already selected layer, without Shift held, will select all its points. Shift-selecting will deselect it. Shift-selecting a different deselected layer will add it to the selection. (With all points selected or deselected? Must respect existing point selection on other layers.)
- There's a bug where clicking near one point will select the wrong point, or select that near point intermittently based on precise location in relation to that point
Path tool
When dragging a handle:
- Alt keeps the handles equidistant while pressed (instead of Shift in use now) (Add Path tool support for the Tab key swapping to dragging the opposite handle #2058)
- Alt, as part of keeping the handles equidistant, also creates a matching handle if the other is zero-length or not a cubic Bézier (In Path tool when dragging a handle, make Alt recover the opposing handle if it's not cubic rather than zero-length #2196)
- Shift locks the handle angle to 15° increments (shouldn't interfere with Shift-clicking handles for multi-selecting points such as handles) (Add snap and lock angle modifiers for handle dragging to the Path tool #2160)
- Ctrl locks the current angle of the handle (Add snap and lock angle modifiers for handle dragging to the Path tool #2160)
- If pressed while the non-colinear handle is over its anchor, it becomes temporarily colinear and is locked to the angle of its opposite handle, or if there is no opposite handle then it should not become colinear but it should become locked to the angle of its shared adjacent segment angles (Add Path tool feature for angle locking upon pressing Ctrl while dragging handle over anchor #2612)
- If pressed while over the an adjacent anchor, it locks to handle dragging along its tangent line (video), except if that anchor has no handles then it has no tangent; if it has split (non-colinear) handles then it uses the one on the side adjacent to the handle being dragged. (Implement angle locking when Ctrl is pressed over an adjacent anchor #2663)
- Tab swaps to dragging the opposite handle (native: teleports the cursor / web: enters pointer lock and draws a fake cursor at the new location) (Add Path tool support for the Tab key swapping to dragging the opposite handle #2058)
- Space shifts the anchor (and handles) while pressed (In the Path tool, make Space shift the anchor while dragging handles #2065)
- C toggles bent vs. colinear handles (instead of Alt in use now) (Add Path tool support for the Tab key swapping to dragging the opposite handle #2058)
When dragging an anchor:
- Alt (new since video was recorded), if held during the start of the click-drag, converts the anchor's handles to colinear and drags the handle pair instead of the anchor, keeping them equidistant unless Alt is released to temporarily return the opposite handle back to where it started before the Alt-drag began (which involves returning its colinear state back to what it was before). Should work with Tab to swap which is the dragged handle, so its opposite can be the one that's returned if Alt is temporarily released. Just Alt clicking but not dragging the anchor should remove both handles by setting them to zero length. (Add Path tool support for Alt-dragging an anchor to pull out a fresh equidistant handle pair #2496)
- Shift, locks the drag to the nearer of the X or Y axes from its drag starting point. (If pressed before the drag begins, it shouldn't break Shift-clicking points to add to the selection.) (Add Path tool support for dragging along an axis when Shift is held #2449)
- Ctrl (new since video was recorded), if pressed before the drag begins, should select and drag a zero-length handle out of its anchor locked to the angle of the opposite non-zero-length handle, which it should be made colinear to. This applies only to anchors with two handles where exactly one is zero-length. Otherwise, the key is ignored and the anchor is dragged per usual. One more scenario is where a non-endpoint anchor has no handles (they're both zero-length), if Ctrl and Alt (see previous bullet point) are both pressed before dragging, it locks the angle to that of the line perpendicular to the average of the two tangents (diagram) from that anchor to its adjacent curves. (Add Path tool support for Ctrl-dragging to pull out zero-length handles with angle locking #2620)
-
‼️ CtrlShift (updated since video was recorded which indicated this would use Alt) slides the anchor along its adjacent segment(s) while adjusting its handle(s) to best approximate the initial curvature. Since only the two handles may vary in length >= 0 and it must pass through the sliding point's starting position, there's only one dimension of freedom and a simple Newton's method optimization for error based on Hausdorff or Frechet distance should be fine, as far as the algorithm goes. (If pressed before the drag begins, it shouldn't break Shift-clicking points to add to the selection.)
When double-clicking an anchor (new since video was recorded):
- Currently this swaps between smooth and sharp, but doesn't work if multiple handles are multi-selected to convert them all to smooth or sharp. If they're of mixed type, the specific one that's double clicked on should be the decider for the rest of them as to which they should all be swapped to. (Make the Path tool support multi-point conversion between smooth/sharp on double-click #2498)
- If a single anchor is double clicked, and it has only one handle (the other is zero-length or doesn't exist), currently this converts it to sharp by removing the handle. But we want that to make the new handle colinear and extend it to an equal length as the present handle. Only if both handles are present, should double-clicking remove both handles like it does currently in that situation. And if both handles are gone, it should also do what it does now by restoring them as colinear. (Add Path tool support for Ctrl-dragging to pull out zero-length handles with angle locking #2620)
When clicking a segment (new since video was recorded):
- Clicking without any modifier key should split the segment where clicked. Currently this has the extra complication of entering an insertion mode where the point of the segment split can be slid within the segment and left click confirms it while right click cancels. We want to remove that extra step and just insert directly. Important: clicking then immediately click-dragging to drag the point shouldn't become a double-click that converts from sharp to smooth. An overlay should be drawn in cases where the cursor is hovered over the segment such that clicking would insert a split, it should be a short line segment (20px in diameter) running perpendicular to the curve. (Insert point on segment by clicking once (no more sliding) and Alt+click to delete a segment #2495)
- Alt clicking should delete the segment that's clicked. Currently a user would have to split the segment then delete the newly created point. (Insert point on segment by clicking once (no more sliding) and Alt+click to delete a segment #2495)
- ⌛Clicking and dragging without any modifier key, as per Sculpting / molding segments with the Path tool #615, should mold the segment. (Add molding segments to the Path tool #2660)
When a single handle is selected:
- R rotates about its anchor (Add Path tool support for G/R/S rotation and scaling with a single selected handle #2180)
- S scales about its anchor (Add Path tool support for G/R/S rotation and scaling with a single selected handle #2180)
Pen tool (completed)
When no drawing has begun yet (pointer is up):
- (New since video was recorded) clicking a path's endpoint should begin drawing from it with an initial handle that's colinear and equidistant from the opposite handle, instead of the current behavior where clicking the endpoint begins drawing the segment with a zero-length handle. If the user wants the current behavior, they can simply click the endpoint anchor a second time to make the current segment's handle zero-length. This solves the pain point that switching away from the Pen tool, then back to it, causes a discontinuity at the previous endpoint where the handles can't easily be opposite each other like when drawing consecutive segments normally. (Make the Pen tool extend an endpoint by starting with a colinear, equidistant handle #2295)
When stretching out a segment to be placed (pointer is up):
- Backspace/Delete removes the current segment's handle (equivalent to clicking the current anchor) (Add Path tool support for G/R/S rotation and scaling with a single selected handle #2180)
- G grabs (translates) the current segment's connected outgoing handle (Add G/R/S to the Pen tool to control the outgoing segment handle #2211)
- R rotates the current segment's connected outgoing handle about its anchor (Add G/R/S to the Pen tool to control the outgoing segment handle #2211)
- S scales the current segment's connected outgoing handle about its anchor (Add G/R/S to the Pen tool to control the outgoing segment handle #2211)
When dragging the handles of the segment being placed (pointer is down):
- C toggles bent vs. colinear handles (instead of the momentary Alt in use now) (Improve the Pen tool's colinearity and equidistance controls #2242)
- Alt stops keeping the handles equidistant while pressed, as long as they're currently colinear (otherwise it does nothing). Exception: the reverse is the case (it keeps the handles equidistant while pressed) when the click-drag began with a single handle (either by click-dragging the current segment's connected anchor, click-dragging an endpoint of an existing not-yet-being-edited layer, or click-dragging the start point to close the shape) but Ctrl was pressed to keep (Improve the Pen tool's colinearity and equidistance controls #2242)
- Ctrl locks the current angle of the handle (already implemented), but should also work to be colinear with the opposite handle if being dragged out of an existing anchor point, or if that anchor point has no handle then it should use the angle of the actual curve segment entering that handle, i.e. its tangent angle at its endpoint (Make the Pen tool use Ctrl to lock the angle of handles such that they maintain colinearity #2284)
- Space shifts the anchor (and handles) while pressed (In the Pen tool, make Space drag the whole manipulator group while dragging a handle #2416)
- Tab swaps to dragging the opposite handle (native: teleports the cursor / web: enters pointer lock and draws a fake cursor at the new location) (Improve Pen tool handle dragging with Tab swapping, Ctrl angle locking, and directly dragging the closing endpoint in handle #2452)
- If the current segment is closing the shape by connecting to its start point, the handle that's being dragged should be the closing handle, not a fake handle on the opposite side, and all the above shortcuts should work on that anchor/handle group spanning the start/end point (Tab will modify the shape of the first segment while the current/final segment is still in-progress) (Improve Pen tool handle dragging with Tab swapping, Ctrl angle locking, and directly dragging the closing endpoint in handle #2452)
- All the above shortcuts should work with the "Bend Prev. Point" case where the current segment's connected anchor can be clicked to turn it sharp or click-dragged to bend its outgoing handle (turning its handles to not colinear), meaning C should be able to turn it back to colinear
Metadata
Metadata
Assignees
Type
Projects
Status
Ongoing Projects