From f43d7ee9b17d8f4c8ecf0201d9a5561251c0ea09 Mon Sep 17 00:00:00 2001 From: David Figatner Date: Sun, 2 Apr 2023 06:34:21 -0700 Subject: [PATCH] fix bug with negative heading resizing moving the viewport --- src/grid/sheet/GridOffsets.ts | 2 ++ src/grid/sheet/GridOffsetsCache.ts | 16 ++++++++++++++++ src/gridGL/interaction/pointer/PointerHeading.ts | 4 ++-- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/grid/sheet/GridOffsets.ts b/src/grid/sheet/GridOffsets.ts index beb6401255..8e21b47b50 100644 --- a/src/grid/sheet/GridOffsets.ts +++ b/src/grid/sheet/GridOffsets.ts @@ -171,6 +171,7 @@ export class GridOffsets { } else { this.rows.set(change.row, { id: change.row, size: change.size }); } + this.gridOffsetsCache.reset('row', change.row < 0); } else if (change.column !== undefined) { const entry = this.columns.get(change.column); if (entry) { @@ -178,6 +179,7 @@ export class GridOffsets { } else { this.columns.set(change.column, { id: change.column, size: change.size }); } + this.gridOffsetsCache.reset('column', change.column < 0); } } diff --git a/src/grid/sheet/GridOffsetsCache.ts b/src/grid/sheet/GridOffsetsCache.ts index 2abcce8f25..95e66b76d0 100644 --- a/src/grid/sheet/GridOffsetsCache.ts +++ b/src/grid/sheet/GridOffsetsCache.ts @@ -21,6 +21,22 @@ export class GridOffsetsCache { this.rowNegativeCache = [0]; } + reset(direction: 'column' | 'row', negative: boolean) { + if (direction === 'column') { + if (negative) { + this.columnNegativeCache = [0]; + } else { + this.columnCache = [0]; + } + } else { + if (negative) { + this.rowNegativeCache = [0]; + } else { + this.rowCache = [0]; + } + } + } + getColumnPlacement(column: number): { x: number; width: number } { let position = 0; if (column === 0) { diff --git a/src/gridGL/interaction/pointer/PointerHeading.ts b/src/gridGL/interaction/pointer/PointerHeading.ts index 7e19f3feb5..78a26f77c9 100644 --- a/src/gridGL/interaction/pointer/PointerHeading.ts +++ b/src/gridGL/interaction/pointer/PointerHeading.ts @@ -163,7 +163,7 @@ export class PointerHeading { // move viewport by the amount of the resize for negative columns const change = size - this.headingResizeViewport.originalSize; - this.app.viewport.x = this.headingResizeViewport.viewportStart + change; + this.app.viewport.x = this.headingResizeViewport.viewportStart + change * this.app.viewport.scale.x; this.headingResizeViewport.change = change; } @@ -184,7 +184,7 @@ export class PointerHeading { // move viewport by the amount of the resize for negative columns const change = size - this.headingResizeViewport.originalSize; - this.app.viewport.y = this.headingResizeViewport.viewportStart + change; + this.app.viewport.y = this.headingResizeViewport.viewportStart + change * this.app.viewport.scale.x; this.headingResizeViewport.change = change; }