perf(ui): do not add duplicate points to lines

This commit is contained in:
psychedelicious 2024-08-06 18:57:31 +10:00
parent 3ce216b391
commit 3179a16189

View File

@ -332,14 +332,18 @@ export const setStageEventHandlers = (manager: CanvasManager): (() => void) => {
if (toolState.selected === 'brush') { if (toolState.selected === 'brush') {
const drawingBuffer = selectedEntity.adapter.renderer.buffer; const drawingBuffer = selectedEntity.adapter.renderer.buffer;
if (drawingBuffer) { if (drawingBuffer) {
if (drawingBuffer?.type === 'brush_line') { if (drawingBuffer.type === 'brush_line') {
const nextPoint = getNextPoint(pos, toolState, getLastPointOfLine(drawingBuffer.points)); const lastPoint = getLastPointOfLine(drawingBuffer.points);
if (nextPoint) { const nextPoint = getNextPoint(pos, toolState, lastPoint);
if (lastPoint && nextPoint) {
const normalizedPoint = offsetCoord(nextPoint, selectedEntity.state.position); const normalizedPoint = offsetCoord(nextPoint, selectedEntity.state.position);
const alignedPoint = alignCoordForTool(normalizedPoint, toolState.brush.width); const alignedPoint = alignCoordForTool(normalizedPoint, toolState.brush.width);
drawingBuffer.points.push(alignedPoint.x, alignedPoint.y); // Do not add duplicate points
await selectedEntity.adapter.renderer.setBuffer(drawingBuffer); if (lastPoint.x !== alignedPoint.x || lastPoint.y !== alignedPoint.y) {
$lastAddedPoint.set(alignedPoint); drawingBuffer.points.push(alignedPoint.x, alignedPoint.y);
await selectedEntity.adapter.renderer.setBuffer(drawingBuffer);
$lastAddedPoint.set(alignedPoint);
}
} }
} else { } else {
await selectedEntity.adapter.renderer.clearBuffer(); await selectedEntity.adapter.renderer.clearBuffer();
@ -366,13 +370,17 @@ export const setStageEventHandlers = (manager: CanvasManager): (() => void) => {
const drawingBuffer = selectedEntity.adapter.renderer.buffer; const drawingBuffer = selectedEntity.adapter.renderer.buffer;
if (drawingBuffer) { if (drawingBuffer) {
if (drawingBuffer.type === 'eraser_line') { if (drawingBuffer.type === 'eraser_line') {
const nextPoint = getNextPoint(pos, toolState, getLastPointOfLine(drawingBuffer.points)); const lastPoint = getLastPointOfLine(drawingBuffer.points);
if (nextPoint) { const nextPoint = getNextPoint(pos, toolState, lastPoint);
if (lastPoint && nextPoint) {
const normalizedPoint = offsetCoord(nextPoint, selectedEntity.state.position); const normalizedPoint = offsetCoord(nextPoint, selectedEntity.state.position);
const alignedPoint = alignCoordForTool(normalizedPoint, toolState.eraser.width); const alignedPoint = alignCoordForTool(normalizedPoint, toolState.eraser.width);
drawingBuffer.points.push(alignedPoint.x, alignedPoint.y); // Do not add duplicate points
await selectedEntity.adapter.renderer.setBuffer(drawingBuffer); if (lastPoint.x !== alignedPoint.x || lastPoint.y !== alignedPoint.y) {
$lastAddedPoint.set(alignedPoint); drawingBuffer.points.push(alignedPoint.x, alignedPoint.y);
await selectedEntity.adapter.renderer.setBuffer(drawingBuffer);
$lastAddedPoint.set(alignedPoint);
}
} }
} else { } else {
await selectedEntity.adapter.renderer.clearBuffer(); await selectedEntity.adapter.renderer.clearBuffer();