From cd195374bc6cc03f720762597f5c519548fe00f6 Mon Sep 17 00:00:00 2001 From: Aakansha Doshi Date: Thu, 1 Sep 2022 17:30:31 +0530 Subject: [PATCH] don't allow dragging hidden points --- src/components/App.tsx | 2 +- src/element/linearElementEditor.ts | 23 +++++++++++++++++------ 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/components/App.tsx b/src/components/App.tsx index f6d7f8915..567bf3ad3 100644 --- a/src/components/App.tsx +++ b/src/components/App.tsx @@ -3084,7 +3084,7 @@ class App extends React.Component { ]) ) { hoverPointIndex = LinearElementEditor.getPointIndexUnderCursor( - element, + this.state.selectedLinearElement, this.state.zoom, scenePointerX, scenePointerY, diff --git a/src/element/linearElementEditor.ts b/src/element/linearElementEditor.ts index 3eabcfa48..048e5ea18 100644 --- a/src/element/linearElementEditor.ts +++ b/src/element/linearElementEditor.ts @@ -380,7 +380,7 @@ export class LinearElementEditor { return false; } const clickedPointIndex = LinearElementEditor.getPointIndexUnderCursor( - element, + appState.selectedLinearElement, appState.zoom, scenePointer.x, scenePointer.y, @@ -566,7 +566,7 @@ export class LinearElementEditor { } const clickedPointIndex = LinearElementEditor.getPointIndexUnderCursor( - element, + appState.selectedLinearElement, appState.zoom, scenePointer.x, scenePointer.y, @@ -773,19 +773,30 @@ export class LinearElementEditor { } static getPointIndexUnderCursor( - element: NonDeleted, + linearElementEditor: LinearElementEditor | null, zoom: AppState["zoom"], x: number, y: number, ) { + if (!linearElementEditor) { + return -1; + } + const element = LinearElementEditor.getElement( + linearElementEditor.elementId, + ); + if (!element) { + return -1; + } + const pointHandles = LinearElementEditor.getPointsGlobalCoordinates(element); - let idx = pointHandles.length; + let idx = linearElementEditor.visiblePointIndexes.length; + // loop from right to left because points on the right are rendered over // points on the left, thus should take precedence when clicking, if they // overlap - while (--idx > -1) { - const point = pointHandles[idx]; + while (--idx > 0) { + const point = pointHandles[linearElementEditor.visiblePointIndexes[idx]]; if ( distance2d(x, y, point[0], point[1]) * zoom.value < // +1px to account for outline stroke