feat: center one-shot but keeps position on manual resize (centerLocked)
This commit is contained in:
1 parent
ab6a2e879f
commit
c0e2fe0358
1 file changed
+11
-1
+11
-1
@@ -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)
|
||||
|
||||
Reference in new issue
Block a user