fix: drag speed on pan

This commit is contained in:
Ilia Denisov
2026-03-17 15:39:30 +02:00
committed by GitHub
parent 3db0c9afda
commit dee4b4da56
3 changed files with 110 additions and 5 deletions
+15 -1
View File
@@ -82,6 +82,10 @@ func (e *client) renderRasterImage(viewportW, viewportH int, p world.RenderParam
return image.NewRGBA(image.Rect(0, 0, 0, 0))
}
// Keep the incoming zoom snapshot so we can safely sync corrected zoom back
// to base params only when no newer zoom was written concurrently.
inputZoom := p.CameraZoom
// Record current raster pixel size (used for event coordinate conversion).
e.metaMu.Lock()
e.lastRasterPxW = viewportW
@@ -95,7 +99,17 @@ func (e *client) renderRasterImage(viewportW, viewportH int, p world.RenderParam
p.MarginYPx = viewportH / 4
// Correct zoom for viewport/world constraints, and clamp camera for no-wrap.
p.CameraZoom = e.world.CorrectCameraZoom(p.CameraZoom, viewportW, viewportH)
correctedZoom := e.world.CorrectCameraZoom(inputZoom, viewportW, viewportH)
p.CameraZoom = correctedZoom
// Sync corrected zoom to the canonical UI-facing params snapshot.
// Guard prevents stale render snapshots from overwriting a newer zoom value
// that may have been set by another UI event.
e.mu.Lock()
if e.wp.CameraZoom == inputZoom {
e.wp.CameraZoom = correctedZoom
}
e.mu.Unlock()
// Ensure indexing is up-to-date when viewport size or zoom changes.
zoomFp, err := p.CameraZoomFp()