Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

useBoundsHandleEvents.ts 1.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import { useCallback, useRef } from 'react'
  2. import inputs from 'state/inputs'
  3. import { Edge, Corner } from 'types'
  4. import state from '../state'
  5. export default function useBoundsHandleEvents(
  6. handle: Edge | Corner | 'rotate'
  7. ) {
  8. const onPointerDown = useCallback(
  9. (e) => {
  10. if (e.buttons !== 1) return
  11. if (!inputs.canAccept(e.pointerId)) return
  12. e.stopPropagation()
  13. e.currentTarget.setPointerCapture(e.pointerId)
  14. state.send('POINTED_BOUNDS_HANDLE', inputs.pointerDown(e, handle))
  15. },
  16. [handle]
  17. )
  18. const onPointerMove = useCallback(
  19. (e) => {
  20. if (e.buttons !== 1) return
  21. if (!inputs.canAccept(e.pointerId)) return
  22. e.stopPropagation()
  23. state.send('MOVED_POINTER', inputs.pointerMove(e))
  24. },
  25. [handle]
  26. )
  27. const onPointerUp = useCallback((e) => {
  28. if (e.buttons !== 1) return
  29. if (!inputs.canAccept(e.pointerId)) return
  30. e.stopPropagation()
  31. e.currentTarget.releasePointerCapture(e.pointerId)
  32. e.currentTarget.replaceWith(e.currentTarget)
  33. state.send('STOPPED_POINTING', inputs.pointerUp(e))
  34. }, [])
  35. return { onPointerDown, onPointerMove, onPointerUp }
  36. }