mirror of
https://github.com/sky-systems/sky_phone.git
synced 2026-09-04 09:13:24 +00:00
fix: refine map controls and garage layout
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
import { describe, expect, it } from 'vitest'
|
||||
|
||||
import {
|
||||
clampMapPan,
|
||||
clientPointToMapPercent,
|
||||
minimumCoverZoom,
|
||||
zoomPanAtPoint,
|
||||
} from '@/features/map/mapViewport'
|
||||
|
||||
describe('map viewport geometry', () => {
|
||||
const metrics = {
|
||||
canvasHeight: 900,
|
||||
canvasWidth: 600,
|
||||
viewportHeight: 720,
|
||||
viewportWidth: 360,
|
||||
}
|
||||
|
||||
it('raises the minimum zoom until the canvas covers the viewport', () => {
|
||||
expect(minimumCoverZoom(metrics)).toBe(0.8)
|
||||
})
|
||||
|
||||
it('clamps panning so no empty edge enters the viewport', () => {
|
||||
expect(clampMapPan({ x: 999, y: -999 }, 1, metrics)).toEqual({
|
||||
x: 120,
|
||||
y: -90,
|
||||
})
|
||||
})
|
||||
|
||||
it('converts scaled client positions into bounded map percentages', () => {
|
||||
const canvas = { height: 800, left: 100, top: 50, width: 400 }
|
||||
|
||||
expect(clientPointToMapPercent({ x: 300, y: 250 }, canvas)).toEqual({
|
||||
x: 0.5,
|
||||
y: 0.25,
|
||||
})
|
||||
expect(clientPointToMapPercent({ x: 900, y: -100 }, canvas)).toEqual({
|
||||
x: 1,
|
||||
y: 0,
|
||||
})
|
||||
})
|
||||
|
||||
it('keeps the focal map point stationary while zooming', () => {
|
||||
expect(
|
||||
zoomPanAtPoint(
|
||||
{ x: 20, y: -10 },
|
||||
1,
|
||||
2,
|
||||
{ x: 270, y: 180 },
|
||||
{ x: 360, y: 720 },
|
||||
),
|
||||
).toEqual({ x: -50, y: 160 })
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user