From c0e2fe0358f369898281b85e535be7204f22ffaa Mon Sep 17 00:00:00 2001 From: Hermes Agent Date: Wed, 9 Sep 2026 19:13:58 +0200 Subject: [PATCH] feat: center one-shot but keeps position on manual resize (centerLocked) --- src/main.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main.ts b/src/main.ts index afd48ba..dbc6338 100644 --- a/src/main.ts +++ b/src/main.ts @@ -14,6 +14,11 @@ export default function () { // canvas-space-точка "уплывает" на экране при смене зума/пана. let dockedPosition: DockPosition | null = null + // Флаг "центр удерживает позицию при ресайзе". Центр НЕ док (не поллит за зумом/паном), + // но после one-shot центрирования ручной ресайз пересчитывает позицию и держит окно по + // центру (как раньше нравилось). Сбрасывается при нажатии любой другой dock-кнопки. + let centerLocked = false + // 9 позиций докинга: 4 угла + 4 края + центр. type DockPosition = | 'top-left' | 'top-center' | 'top-right' @@ -130,6 +135,9 @@ export default function () { if (isLeftRight) dockEdgeSize = width else if (isTopBottom) dockEdgeSize = height applyDock(dockedPosition, width, height) + } else if (centerLocked) { + // Центр: позиция удерживается по центру при ресайзе (но не поллит за зумом/паном). + applyDock('center', width, height) } }) @@ -137,13 +145,15 @@ export default function () { on('DOCK_WINDOW', function (payload: { position: DockPosition; width: number; height: number }) { const { position, width, height } = payload // Центр — это one-shot: применяем 50% по центру ОДИН раз, НЕ включаем поллинг - // (окно не "приклеено", ручной ресайз/драг работают свободно после). + // (окно не "приклеено"), но включаем centerLocked — ручной ресайз держит центр. if (position === 'center') { dockedPosition = null + centerLocked = true applyDock('center', width, height) return } // Остальные позиции — удерживаем прижатым (поллинг пересчитывает при зуме/пане). + centerLocked = false dockedPosition = position lastBoundsKey = '' // форсируем пересчёт на ближайшем тике applyDock(position, width, height)