| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- import React from 'react'
- import { PointerInfo } from 'types'
- import { isDarwin } from 'utils/utils'
-
- const DOUBLE_CLICK_DURATION = 300
-
- class Inputs {
- activePointerId?: number
- lastPointerDownTime = 0
- points: Record<string, PointerInfo> = {}
-
- touchStart(e: TouchEvent | React.TouchEvent, target: string) {
- const { shiftKey, ctrlKey, metaKey, altKey } = e
-
- const touch = e.changedTouches[0]
-
- const info = {
- target,
- pointerId: touch.identifier,
- origin: [touch.clientX, touch.clientY],
- point: [touch.clientX, touch.clientY],
- shiftKey,
- ctrlKey,
- metaKey: isDarwin() ? metaKey : ctrlKey,
- altKey,
- }
-
- this.points[touch.identifier] = info
- this.activePointerId = touch.identifier
-
- return info
- }
-
- touchMove(e: TouchEvent | React.TouchEvent) {
- const { shiftKey, ctrlKey, metaKey, altKey } = e
-
- const touch = e.changedTouches[0]
-
- const prev = this.points[touch.identifier]
-
- const info = {
- ...prev,
- pointerId: touch.identifier,
- point: [touch.clientX, touch.clientY],
- shiftKey,
- ctrlKey,
- metaKey: isDarwin() ? metaKey : ctrlKey,
- altKey,
- }
-
- if (this.points[touch.identifier]) {
- this.points[touch.identifier] = info
- }
-
- return info
- }
-
- pointerDown(e: PointerEvent | React.PointerEvent, target: string) {
- const { shiftKey, ctrlKey, metaKey, altKey } = e
-
- const info = {
- target,
- pointerId: e.pointerId,
- origin: [e.clientX, e.clientY],
- point: [e.clientX, e.clientY],
- shiftKey,
- ctrlKey,
- metaKey: isDarwin() ? metaKey : ctrlKey,
- altKey,
- }
-
- this.points[e.pointerId] = info
- this.activePointerId = e.pointerId
-
- return info
- }
-
- pointerEnter(e: PointerEvent | React.PointerEvent, target: string) {
- const { shiftKey, ctrlKey, metaKey, altKey } = e
-
- const info = {
- target,
- pointerId: e.pointerId,
- origin: [e.clientX, e.clientY],
- point: [e.clientX, e.clientY],
- shiftKey,
- ctrlKey,
- metaKey: isDarwin() ? metaKey : ctrlKey,
- altKey,
- }
-
- return info
- }
-
- pointerMove(e: PointerEvent | React.PointerEvent) {
- const { shiftKey, ctrlKey, metaKey, altKey } = e
-
- const prev = this.points[e.pointerId]
-
- const info = {
- ...prev,
- pointerId: e.pointerId,
- point: [e.clientX, e.clientY],
- shiftKey,
- ctrlKey,
- metaKey: isDarwin() ? metaKey : ctrlKey,
- altKey,
- }
-
- if (this.points[e.pointerId]) {
- this.points[e.pointerId] = info
- }
-
- return info
- }
-
- pointerUp(e: PointerEvent | React.PointerEvent) {
- const { shiftKey, ctrlKey, metaKey, altKey } = e
-
- const prev = this.points[e.pointerId]
-
- const info = {
- ...prev,
- origin: prev?.origin || [e.clientX, e.clientY],
- point: [e.clientX, e.clientY],
- shiftKey,
- ctrlKey,
- metaKey: isDarwin() ? metaKey : ctrlKey,
- altKey,
- }
-
- delete this.points[e.pointerId]
- delete this.activePointerId
- this.lastPointerDownTime = Date.now()
-
- return info
- }
-
- wheel(e: WheelEvent) {
- const { shiftKey, ctrlKey, metaKey, altKey } = e
- return { point: [e.clientX, e.clientY], shiftKey, ctrlKey, metaKey, altKey }
- }
-
- canAccept(pointerId: PointerEvent['pointerId']) {
- return (
- this.activePointerId === undefined || this.activePointerId === pointerId
- )
- }
-
- isDoubleClick() {
- return Date.now() - this.lastPointerDownTime < DOUBLE_CLICK_DURATION
- }
-
- get pointer() {
- return this.points[Object.keys(this.points)[0]]
- }
- }
-
- export default new Inputs()
|