From 8436a44973fc2da711629b0bd008e2525dc56cac Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Tue, 6 Aug 2024 18:57:31 +1000 Subject: [PATCH] perf(ui): do not add duplicate points to lines --- .../features/controlLayers/konva/events.ts | 30 ++++++++++++------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/invokeai/frontend/web/src/features/controlLayers/konva/events.ts b/invokeai/frontend/web/src/features/controlLayers/konva/events.ts index 486d3d422c..97975c9e40 100644 --- a/invokeai/frontend/web/src/features/controlLayers/konva/events.ts +++ b/invokeai/frontend/web/src/features/controlLayers/konva/events.ts @@ -332,14 +332,18 @@ export const setStageEventHandlers = (manager: CanvasManager): (() => void) => { if (toolState.selected === 'brush') { const drawingBuffer = selectedEntity.adapter.renderer.buffer; if (drawingBuffer) { - if (drawingBuffer?.type === 'brush_line') { - const nextPoint = getNextPoint(pos, toolState, getLastPointOfLine(drawingBuffer.points)); - if (nextPoint) { + if (drawingBuffer.type === 'brush_line') { + const lastPoint = getLastPointOfLine(drawingBuffer.points); + const nextPoint = getNextPoint(pos, toolState, lastPoint); + if (lastPoint && nextPoint) { const normalizedPoint = offsetCoord(nextPoint, selectedEntity.state.position); const alignedPoint = alignCoordForTool(normalizedPoint, toolState.brush.width); - drawingBuffer.points.push(alignedPoint.x, alignedPoint.y); - await selectedEntity.adapter.renderer.setBuffer(drawingBuffer); - $lastAddedPoint.set(alignedPoint); + // Do not add duplicate points + if (lastPoint.x !== alignedPoint.x || lastPoint.y !== alignedPoint.y) { + drawingBuffer.points.push(alignedPoint.x, alignedPoint.y); + await selectedEntity.adapter.renderer.setBuffer(drawingBuffer); + $lastAddedPoint.set(alignedPoint); + } } } else { await selectedEntity.adapter.renderer.clearBuffer(); @@ -366,13 +370,17 @@ export const setStageEventHandlers = (manager: CanvasManager): (() => void) => { const drawingBuffer = selectedEntity.adapter.renderer.buffer; if (drawingBuffer) { if (drawingBuffer.type === 'eraser_line') { - const nextPoint = getNextPoint(pos, toolState, getLastPointOfLine(drawingBuffer.points)); - if (nextPoint) { + const lastPoint = getLastPointOfLine(drawingBuffer.points); + const nextPoint = getNextPoint(pos, toolState, lastPoint); + if (lastPoint && nextPoint) { const normalizedPoint = offsetCoord(nextPoint, selectedEntity.state.position); const alignedPoint = alignCoordForTool(normalizedPoint, toolState.eraser.width); - drawingBuffer.points.push(alignedPoint.x, alignedPoint.y); - await selectedEntity.adapter.renderer.setBuffer(drawingBuffer); - $lastAddedPoint.set(alignedPoint); + // Do not add duplicate points + if (lastPoint.x !== alignedPoint.x || lastPoint.y !== alignedPoint.y) { + drawingBuffer.points.push(alignedPoint.x, alignedPoint.y); + await selectedEntity.adapter.renderer.setBuffer(drawingBuffer); + $lastAddedPoint.set(alignedPoint); + } } } else { await selectedEntity.adapter.renderer.clearBuffer();