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

This commit is contained in:
psychedelicious 2024-08-06 18:57:31 +10:00
parent f9f9ec3688
commit 8436a44973

View File

@ -332,15 +332,19 @@ 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);
// Do not add duplicate points
if (lastPoint.x !== alignedPoint.x || lastPoint.y !== alignedPoint.y) {
drawingBuffer.points.push(alignedPoint.x, alignedPoint.y); drawingBuffer.points.push(alignedPoint.x, alignedPoint.y);
await selectedEntity.adapter.renderer.setBuffer(drawingBuffer); await selectedEntity.adapter.renderer.setBuffer(drawingBuffer);
$lastAddedPoint.set(alignedPoint); $lastAddedPoint.set(alignedPoint);
} }
}
} else { } else {
await selectedEntity.adapter.renderer.clearBuffer(); await selectedEntity.adapter.renderer.clearBuffer();
} }
@ -366,14 +370,18 @@ 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);
// Do not add duplicate points
if (lastPoint.x !== alignedPoint.x || lastPoint.y !== alignedPoint.y) {
drawingBuffer.points.push(alignedPoint.x, alignedPoint.y); drawingBuffer.points.push(alignedPoint.x, alignedPoint.y);
await selectedEntity.adapter.renderer.setBuffer(drawingBuffer); await selectedEntity.adapter.renderer.setBuffer(drawingBuffer);
$lastAddedPoint.set(alignedPoint); $lastAddedPoint.set(alignedPoint);
} }
}
} else { } else {
await selectedEntity.adapter.renderer.clearBuffer(); await selectedEntity.adapter.renderer.clearBuffer();
} }