This fixes the jumps that happens when dragging tokens and resizing stamps in different situations.
Drag fixes. The key difference in dragging is that the drag is measured as displacement of the starting drag anchor (formerly called "drag offset" in code). This keeps things consistent whether snap-while-drag is enabled, whether the token is snap-to-grid, and regardless of the layout and rotation of the token. SelectionSet is also changed to accept points rather than working with offsets, since offsets require too much knowledge about the token layout to be very useful in that context. The drag anchor calculation had to be tweaked to properly account for the token layout.
Resize fixes. There were a few issues with resizing, including an incorrect calculation of the new dimensions for snap-to-grid stamps and incorrectly accounting for the token layout. It also lacked the ability to preserve the aspect ratio if the token was at all rotated. These have all been fixed by projecting the resize drag information into the token's rotated reference frame. A nice perk is that the logic is simpler while doing more, since it boils down to a couple key vector operations.
Both StampTool and PointerTool were refactored to encapsulate the drag and resize operations into inner classes (TokenDragOp, TokenResizeOp) so that extra state could conveniently be kept around. New debug rendering was also added to diagnose issues with dragging, and a new developer option was added to enable it.
Possible Drawbacks
None
Documentation Notes
N/A
Release Notes
Fixed a bug where tokens would jump a bit when starting to drag them if the Snap Token while dragging preference is enabled.
Fixed a bug where free-size snap-to-grid stamps would be resized to larger than they should be.
Identify the Bug or Feature request
Fixes #4855 Fixes #4365 Fixes #4844
Description of the Change
This fixes the jumps that happens when dragging tokens and resizing stamps in different situations.
Drag fixes. The key difference in dragging is that the drag is measured as displacement of the starting drag anchor (formerly called "drag offset" in code). This keeps things consistent whether snap-while-drag is enabled, whether the token is snap-to-grid, and regardless of the layout and rotation of the token.
SelectionSet
is also changed to accept points rather than working with offsets, since offsets require too much knowledge about the token layout to be very useful in that context. The drag anchor calculation had to be tweaked to properly account for the token layout.Resize fixes. There were a few issues with resizing, including an incorrect calculation of the new dimensions for snap-to-grid stamps and incorrectly accounting for the token layout. It also lacked the ability to preserve the aspect ratio if the token was at all rotated. These have all been fixed by projecting the resize drag information into the token's rotated reference frame. A nice perk is that the logic is simpler while doing more, since it boils down to a couple key vector operations.
Both
StampTool
andPointerTool
were refactored to encapsulate the drag and resize operations into inner classes (TokenDragOp
,TokenResizeOp
) so that extra state could conveniently be kept around. New debug rendering was also added to diagnose issues with dragging, and a new developer option was added to enable it.Possible Drawbacks
None
Documentation Notes
N/A
Release Notes
This change is