diff --git a/src/ui.tsx b/src/ui.tsx index 5b8a8c2..c2fc33c 100644 --- a/src/ui.tsx +++ b/src/ui.tsx @@ -97,6 +97,40 @@ function Plugin () { refreshInfo() } + // Клик-или-драг на периметральной ручке: + // - смещение курсора > CLICK_THRESHOLD px → ресайз (startResize + live drag через глобальный onPointerMove) + // - иначе (чистый клик) → док в соответствующую позицию (dockWindow) + // Центр НЕ входит в периметр — только кнопкой. + const CLICK_THRESHOLD = 4 + function onHandleDown (e: PointerEvent, dir: string, dockPos: DockPosition) { + e.preventDefault() + e.stopPropagation() + const startX = e.clientX + const startY = e.clientY + let started = false + function move (ev: PointerEvent) { + if (!started) { + const dx = ev.clientX - startX + const dy = ev.clientY - startY + if (Math.sqrt(dx * dx + dy * dy) < CLICK_THRESHOLD) return + started = true + startResize(ev, dir) + // Считаем ресайз от исходной точки (до порога), а не от текущей (>порога). + resizeRef.current.startX = startX + resizeRef.current.startY = startY + } + // Дальше drag ведёт глобальный onPointerMove (resizeRef.active уже true). + } + function up () { + window.removeEventListener('pointermove', move) + window.removeEventListener('pointerup', up) + if (started) onPointerUpResize() + else dockWindow(dockPos) + } + window.addEventListener('pointermove', move) + window.addEventListener('pointerup', up) + } + useEffect(function () { window.addEventListener('pointermove', onPointerMove) window.addEventListener('pointerup', onPointerUpResize) @@ -399,14 +433,14 @@ function Plugin () { {/* Ручки по периметру (4 края + 4 угла) — клик = док в эту позицию. ВИДИМЫЕ для отладки (фиолетовые). Центр НЕ входит в периметр — только кнопкой. */} -
- - - - - - - + + + + + + + + ) }