From 00a5ec76ffbad24b9efc4ed6efea2e11d05f1575 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Wed, 13 May 2026 14:23:07 +0200 Subject: [PATCH] Implement and refine terrain grid resize drag handling across pointer events --- src/viewport-three/viewport-host.ts | 41 ++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/src/viewport-three/viewport-host.ts b/src/viewport-three/viewport-host.ts index 0dc5be72..74453b46 100644 --- a/src/viewport-three/viewport-host.ts +++ b/src/viewport-three/viewport-host.ts @@ -12263,6 +12263,18 @@ export class ViewportHost { return; } + const terrainGridResizeHit = this.getTerrainGridResizeHitAtClientPosition( + event.clientX, + event.clientY + ); + + if ( + terrainGridResizeHit !== null && + this.beginTerrainGridResizeDrag(event, terrainGridResizeHit) + ) { + return; + } + if (this.beginTerrainBrushStroke(event)) { return; } @@ -12362,6 +12374,10 @@ export class ViewportHost { return; } + if (this.continueTerrainGridResizeDrag(event)) { + return; + } + if (this.continueTerrainBrushStroke(event)) { return; } @@ -12377,6 +12393,21 @@ export class ViewportHost { } if (this.toolMode === "select") { + const terrainGridResizeHit = this.getTerrainGridResizeHitAtClientPosition( + event.clientX, + event.clientY + ); + + if (terrainGridResizeHit !== null) { + this.setHoveredSelection({ + kind: "terrains", + ids: [terrainGridResizeHit.terrainId] + }); + this.setTerrainGridResizeHover(terrainGridResizeHit); + return; + } + + this.setTerrainGridResizeHover(null); const hoveredCandidate = this.getSelectionCandidates(event)[0] ?.selection ?? { kind: "none" }; this.setHoveredSelection(hoveredCandidate); @@ -12434,6 +12465,10 @@ export class ViewportHost { return; } + if (this.finishTerrainGridResizeDrag(event)) { + return; + } + if (this.activeCameraDragPointerId !== event.pointerId) { return; } @@ -12448,7 +12483,10 @@ export class ViewportHost { }; private handlePointerLeave = () => { - if (this.activeCameraDragPointerId !== null) { + if ( + this.activeCameraDragPointerId !== null || + this.activeTerrainGridResizeDrag !== null + ) { return; } @@ -12456,6 +12494,7 @@ export class ViewportHost { kind: "none" }); this.setTerrainBrushHover(null); + this.setTerrainGridResizeHover(null); // Keep the shared creation preview alive across panel boundaries; the next // viewport panel will update it as the pointer continues moving.