Fix drag distance (#3873)
This PR fixes a bug where the drag distance for an interaction was being measured in page space rather than screen space. It should be measured in screen space. The actual check for `isDragging` is a little ugly but this is correct. ### Change Type - [x] `sdk` — Changes the tldraw SDK - [x] `bugfix` — Bug fix ### Test Plan 1. Zoom in 2. Drag the center handle of an arrow shape - [x] Unit Tests ### Release Notes - Fixed a bug where the minimum distance for a drag was wrong when zoomed in or out.
This commit is contained in:
parent
38c573aacc
commit
930ea64d35
2 changed files with 37 additions and 1 deletions
|
@ -8730,7 +8730,7 @@ export class Editor extends EventEmitter<TLEventMap> {
|
||||||
if (
|
if (
|
||||||
inputs.isPointing &&
|
inputs.isPointing &&
|
||||||
!inputs.isDragging &&
|
!inputs.isDragging &&
|
||||||
Vec.Dist2(originPagePoint, currentPagePoint) >
|
Vec.Dist2(originPagePoint, currentPagePoint) * this.getZoomLevel() >
|
||||||
(instanceState.isCoarsePointer
|
(instanceState.isCoarsePointer
|
||||||
? this.options.coarseDragDistanceSquared
|
? this.options.coarseDragDistanceSquared
|
||||||
: this.options.dragDistanceSquared) /
|
: this.options.dragDistanceSquared) /
|
||||||
|
|
|
@ -678,3 +678,39 @@ describe('middle-click panning', () => {
|
||||||
expect(editor.inputs.isPanning).toBe(false)
|
expect(editor.inputs.isPanning).toBe(false)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
describe('dragging', () => {
|
||||||
|
it('drags correctly at 100% zoom', () => {
|
||||||
|
expect(editor.inputs.isDragging).toBe(false)
|
||||||
|
editor.pointerMove(0, 0).pointerDown()
|
||||||
|
expect(editor.inputs.isDragging).toBe(false)
|
||||||
|
editor.pointerMove(0, 1)
|
||||||
|
expect(editor.inputs.isDragging).toBe(false)
|
||||||
|
editor.pointerMove(0, 5)
|
||||||
|
expect(editor.inputs.isDragging).toBe(true)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('drags correctly at 150% zoom', () => {
|
||||||
|
editor.setCamera({ x: 0, y: 0, z: 8 }).forceTick()
|
||||||
|
|
||||||
|
expect(editor.inputs.isDragging).toBe(false)
|
||||||
|
editor.pointerMove(0, 0).pointerDown()
|
||||||
|
expect(editor.inputs.isDragging).toBe(false)
|
||||||
|
editor.pointerMove(0, 2)
|
||||||
|
expect(editor.inputs.isDragging).toBe(false)
|
||||||
|
editor.pointerMove(0, 5)
|
||||||
|
expect(editor.inputs.isDragging).toBe(true)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('drags correctly at 50% zoom', () => {
|
||||||
|
editor.setCamera({ x: 0, y: 0, z: 0.1 }).forceTick()
|
||||||
|
|
||||||
|
expect(editor.inputs.isDragging).toBe(false)
|
||||||
|
editor.pointerMove(0, 0).pointerDown()
|
||||||
|
expect(editor.inputs.isDragging).toBe(false)
|
||||||
|
editor.pointerMove(0, 2)
|
||||||
|
expect(editor.inputs.isDragging).toBe(false)
|
||||||
|
editor.pointerMove(0, 5)
|
||||||
|
expect(editor.inputs.isDragging).toBe(true)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
Loading…
Reference in a new issue