fix: center is pure one-shot (no centerLocked); resize no longer snaps to center

This commit is contained in:
Hermes Agent committed 2026-09-10 17:40:14 +02:00
1 parent 153ff2ae27
commit bb0b01cabc
2 files changed
+3 -16

No files matched your search

+2 -15
View File
@@ -13,12 +13,6 @@ export default function () {
// viewport (через поллинг, т.к. события viewportchange в API нет), иначе
// canvas-space-точка "уплывает" на экране при смене зума/пана.
let dockedPosition: DockPosition | null = null
// Флаг "центр удерживает позицию при ресайзе". Центр НЕ док (не поллит за зумом/паном),
// но после one-shot центрирования ручной ресайз пересчитывает позицию и держит окно по
// центру (как раньше нравилось). Сбрасывается при нажатии любой другой dock-кнопки.
let centerLocked = false
// 9 позиций докинга: 4 угла + 4 края + центр.
type DockPosition =
| 'top-left' | 'top-center' | 'top-right'
@@ -222,9 +216,6 @@ export default function () {
}
if (dockedPosition !== null) {
applyDock(dockedPosition, width, height, false)
} else if (centerLocked) {
// Центр: позиция удерживается по центру при ресайзе (но не поллит за зумом/паном).
applyDock('center', width, height, false)
}
})
@@ -232,7 +223,6 @@ export default function () {
// чтобы поллинг не переприжимал и RESIZE_WINDOW не ре-докал.
on('UNDOCK', function () {
dockedPosition = null
centerLocked = false
lastBoundsKey = ''
})
@@ -246,14 +236,12 @@ export default function () {
// к левому/верхнему краю вместо центра (баг relX=0 на top-center).
on('DOCK_WINDOW', function (payload: { position: DockPosition; width: number; height: number }) {
const { position } = payload
// Центр — это one-shot: применяем 50% по центру ОДИН раз, НЕ включаем поллинг
// (окно не "приклеено"), но включаем centerLocked — ручной ресайз держит центр.
// Центр — это one-shot: применяем 50% по центру ОДИН раз, окно остаётся в покое
// (НЕ приклеено, НЕ держит центр при ручном ресайзе/перемещении).
if (position === 'center') {
dockedPosition = null
centerLocked = true
} else {
// Остальные позиции — удерживаем прижатым (поллинг пересчитывает при зуме/пане).
centerLocked = false
dockedPosition = position
lastBoundsKey = '' // форсируем пересчёт на ближайшем тике
}
@@ -290,7 +278,6 @@ export default function () {
figma.ui.resize(size.width, size.height)
// Выходим из дока: чистый клик = телепорт в угол без удержания.
dockedPosition = null
centerLocked = false
lastBoundsKey = ''
lastSize = { width: size.width, height: size.height }
// Прижимаем в угол от реального размера (computeDock для угла не меняет размер).