fix(tool): middleMouse
This commit is contained in:
@@ -518,7 +518,7 @@ const PaperContainer = (
|
|||||||
token: number
|
token: number
|
||||||
imageName: string
|
imageName: string
|
||||||
} | null>(null)
|
} | null>(null)
|
||||||
const renderModePanRef = useRef({
|
const middleMousePanRef = useRef({
|
||||||
active: false,
|
active: false,
|
||||||
lastX: 0,
|
lastX: 0,
|
||||||
lastY: 0,
|
lastY: 0,
|
||||||
@@ -2343,15 +2343,7 @@ const PaperContainer = (
|
|||||||
syncRenderModeVisuals,
|
syncRenderModeVisuals,
|
||||||
])
|
])
|
||||||
|
|
||||||
const stopRenderModePan = useCallback(() => {
|
const hidePaperContextMenu = useCallback(() => {
|
||||||
renderModePanRef.current.active = false
|
|
||||||
}, [])
|
|
||||||
|
|
||||||
const handleRenderModeOverlayMouseDown = useCallback(
|
|
||||||
(event: React.MouseEvent<HTMLDivElement>) => {
|
|
||||||
event.preventDefault()
|
|
||||||
event.stopPropagation()
|
|
||||||
|
|
||||||
useOtherToolsStore.getState().setShowContextMenu({
|
useOtherToolsStore.getState().setShowContextMenu({
|
||||||
showContextMenu: false,
|
showContextMenu: false,
|
||||||
position: { top: 0, left: 0 },
|
position: { top: 0, left: 0 },
|
||||||
@@ -2359,26 +2351,64 @@ const PaperContainer = (
|
|||||||
operationId: "",
|
operationId: "",
|
||||||
id: 0,
|
id: 0,
|
||||||
})
|
})
|
||||||
|
}, [])
|
||||||
|
|
||||||
if (event.button !== 1) return
|
const startMiddleMousePan = useCallback(
|
||||||
|
(clientX: number, clientY: number) => {
|
||||||
renderModePanRef.current = {
|
middleMousePanRef.current = {
|
||||||
active: true,
|
active: true,
|
||||||
lastX: event.clientX,
|
lastX: clientX,
|
||||||
lastY: event.clientY,
|
lastY: clientY,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[]
|
[]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const stopMiddleMousePan = useCallback(() => {
|
||||||
|
middleMousePanRef.current.active = false
|
||||||
|
}, [])
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!renderMode) {
|
const container = containerRef.current
|
||||||
stopRenderModePan()
|
if (!container) return
|
||||||
return
|
|
||||||
|
const handleMouseDownCapture = (event: MouseEvent) => {
|
||||||
|
if (event.button !== 1) return
|
||||||
|
|
||||||
|
const target = event.target as HTMLElement | null
|
||||||
|
if (target?.closest('[data-label-context-menu="true"]')) return
|
||||||
|
|
||||||
|
event.preventDefault()
|
||||||
|
event.stopPropagation()
|
||||||
|
hidePaperContextMenu()
|
||||||
|
startMiddleMousePan(event.clientX, event.clientY)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
container.addEventListener("mousedown", handleMouseDownCapture, true)
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
container.removeEventListener("mousedown", handleMouseDownCapture, true)
|
||||||
|
stopMiddleMousePan()
|
||||||
|
}
|
||||||
|
}, [hidePaperContextMenu, startMiddleMousePan, stopMiddleMousePan])
|
||||||
|
|
||||||
|
const handleRenderModeOverlayMouseDown = useCallback(
|
||||||
|
(event: React.MouseEvent<HTMLDivElement>) => {
|
||||||
|
event.preventDefault()
|
||||||
|
event.stopPropagation()
|
||||||
|
|
||||||
|
hidePaperContextMenu()
|
||||||
|
|
||||||
|
if (event.button !== 1) return
|
||||||
|
|
||||||
|
startMiddleMousePan(event.clientX, event.clientY)
|
||||||
|
},
|
||||||
|
[hidePaperContextMenu, startMiddleMousePan]
|
||||||
|
)
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
const handleMouseMove = (event: MouseEvent) => {
|
const handleMouseMove = (event: MouseEvent) => {
|
||||||
const currentPan = renderModePanRef.current
|
const currentPan = middleMousePanRef.current
|
||||||
if (!currentPan.active) return
|
if (!currentPan.active) return
|
||||||
|
|
||||||
event.preventDefault()
|
event.preventDefault()
|
||||||
@@ -2390,26 +2420,29 @@ const PaperContainer = (
|
|||||||
if (!deltaX && !deltaY) return
|
if (!deltaX && !deltaY) return
|
||||||
|
|
||||||
group.position = group.position.add(new paper.Point(deltaX, deltaY))
|
group.position = group.position.add(new paper.Point(deltaX, deltaY))
|
||||||
renderModePanRef.current.lastX = event.clientX
|
middleMousePanRef.current.lastX = event.clientX
|
||||||
renderModePanRef.current.lastY = event.clientY
|
middleMousePanRef.current.lastY = event.clientY
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleMouseUp = (event: MouseEvent) => {
|
const handleMouseUp = (event: MouseEvent) => {
|
||||||
if (event.button === 1) {
|
if (event.button === 1) {
|
||||||
event.preventDefault()
|
event.preventDefault()
|
||||||
}
|
}
|
||||||
stopRenderModePan()
|
|
||||||
|
stopMiddleMousePan()
|
||||||
}
|
}
|
||||||
|
|
||||||
window.addEventListener("mousemove", handleMouseMove, { passive: false })
|
window.addEventListener("mousemove", handleMouseMove, { passive: false })
|
||||||
window.addEventListener("mouseup", handleMouseUp, { passive: false })
|
window.addEventListener("mouseup", handleMouseUp, { passive: false })
|
||||||
|
window.addEventListener("blur", stopMiddleMousePan)
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
window.removeEventListener("mousemove", handleMouseMove)
|
window.removeEventListener("mousemove", handleMouseMove)
|
||||||
window.removeEventListener("mouseup", handleMouseUp)
|
window.removeEventListener("mouseup", handleMouseUp)
|
||||||
stopRenderModePan()
|
window.removeEventListener("blur", stopMiddleMousePan)
|
||||||
|
stopMiddleMousePan()
|
||||||
}
|
}
|
||||||
}, [renderMode, stopRenderModePan])
|
}, [stopMiddleMousePan])
|
||||||
|
|
||||||
const getTargetGroupPosition = useCallback(
|
const getTargetGroupPosition = useCallback(
|
||||||
({
|
({
|
||||||
|
|||||||
Reference in New Issue
Block a user