Browse Source

Adds scroll selection

main
Steve Ruiz 4 years ago
parent
commit
9a01f5aac6
3 changed files with 13 additions and 8 deletions
  1. 3
    2
      hooks/useZoomEvents.ts
  2. 8
    4
      state/state.ts
  3. 2
    2
      utils/utils.ts

+ 3
- 2
hooks/useZoomEvents.ts View File

1
 import React, { useEffect, useRef } from "react"
1
 import React, { useEffect, useRef } from "react"
2
 import state from "state"
2
 import state from "state"
3
+import { getPointerEventInfo } from "utils/utils"
3
 import * as vec from "utils/vec"
4
 import * as vec from "utils/vec"
4
 
5
 
5
 /**
6
 /**
23
       if (e.ctrlKey) {
24
       if (e.ctrlKey) {
24
         state.send("ZOOMED_CAMERA", {
25
         state.send("ZOOMED_CAMERA", {
25
           delta: e.deltaY,
26
           delta: e.deltaY,
26
-          point: [e.pageX, e.pageY],
27
+          ...getPointerEventInfo(e),
27
         })
28
         })
28
         return
29
         return
29
       }
30
       }
30
 
31
 
31
       state.send("PANNED_CAMERA", {
32
       state.send("PANNED_CAMERA", {
32
         delta: [e.deltaX, e.deltaY],
33
         delta: [e.deltaX, e.deltaY],
33
-        point: [e.pageX, e.pageY],
34
+        ...getPointerEventInfo(e),
34
       })
35
       })
35
     }
36
     }
36
 
37
 

+ 8
- 4
state/state.ts View File

38
       onEnter: "startBrushSession",
38
       onEnter: "startBrushSession",
39
       on: {
39
       on: {
40
         MOVED_POINTER: "updateBrushSession",
40
         MOVED_POINTER: "updateBrushSession",
41
+        PANNED_CAMERA: "updateBrushSession",
41
         STOPPED_POINTING: { do: "completeSession", to: "selecting" },
42
         STOPPED_POINTING: { do: "completeSession", to: "selecting" },
42
         CANCELLED: { do: "cancelSession", to: "selecting" },
43
         CANCELLED: { do: "cancelSession", to: "selecting" },
43
       },
44
       },
52
       session.complete(data)
53
       session.complete(data)
53
       session = undefined
54
       session = undefined
54
     },
55
     },
55
-    startBrushSession(data, { point }) {
56
-      session = new Sessions.BrushSession(data, point)
56
+    startBrushSession(data, payload: { point: number[] }) {
57
+      session = new Sessions.BrushSession(
58
+        data,
59
+        screenToWorld(payload.point, data)
60
+      )
57
     },
61
     },
58
-    updateBrushSession(data, { point }) {
59
-      session.update(data, point)
62
+    updateBrushSession(data, payload: { point: number[] }) {
63
+      session.update(data, screenToWorld(payload.point, data))
60
     },
64
     },
61
     zoomCamera(data, payload: { delta: number; point: number[] }) {
65
     zoomCamera(data, payload: { delta: number; point: number[] }) {
62
       const { camera } = data
66
       const { camera } = data

+ 2
- 2
utils/utils.ts View File

3
 import * as vec from "./vec"
3
 import * as vec from "./vec"
4
 
4
 
5
 export function screenToWorld(point: number[], data: Data) {
5
 export function screenToWorld(point: number[], data: Data) {
6
-  return vec.add(vec.div(point, data.camera.zoom), data.camera.point)
6
+  return vec.sub(vec.div(point, data.camera.zoom), data.camera.point)
7
 }
7
 }
8
 
8
 
9
 export function getBoundsFromPoints(a: number[], b: number[]) {
9
 export function getBoundsFromPoints(a: number[], b: number[]) {
844
   return await d.json()
844
   return await d.json()
845
 }
845
 }
846
 
846
 
847
-export function getPointerEventInfo(e: React.PointerEvent) {
847
+export function getPointerEventInfo(e: React.PointerEvent | WheelEvent) {
848
   const { shiftKey, ctrlKey, metaKey, altKey } = e
848
   const { shiftKey, ctrlKey, metaKey, altKey } = e
849
   return { point: [e.clientX, e.clientY], shiftKey, ctrlKey, metaKey, altKey }
849
   return { point: [e.clientX, e.clientY], shiftKey, ctrlKey, metaKey, altKey }
850
 }
850
 }

Loading…
Cancel
Save