Bladeren bron

Adds scroll selection

main
Steve Ruiz 4 jaren geleden
bovenliggende
commit
9a01f5aac6
3 gewijzigde bestanden met toevoegingen van 13 en 8 verwijderingen
  1. 3
    2
      hooks/useZoomEvents.ts
  2. 8
    4
      state/state.ts
  3. 2
    2
      utils/utils.ts

+ 3
- 2
hooks/useZoomEvents.ts Bestand weergeven

@@ -1,5 +1,6 @@
1 1
 import React, { useEffect, useRef } from "react"
2 2
 import state from "state"
3
+import { getPointerEventInfo } from "utils/utils"
3 4
 import * as vec from "utils/vec"
4 5
 
5 6
 /**
@@ -23,14 +24,14 @@ export default function useZoomEvents(
23 24
       if (e.ctrlKey) {
24 25
         state.send("ZOOMED_CAMERA", {
25 26
           delta: e.deltaY,
26
-          point: [e.pageX, e.pageY],
27
+          ...getPointerEventInfo(e),
27 28
         })
28 29
         return
29 30
       }
30 31
 
31 32
       state.send("PANNED_CAMERA", {
32 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 Bestand weergeven

@@ -38,6 +38,7 @@ const state = createState({
38 38
       onEnter: "startBrushSession",
39 39
       on: {
40 40
         MOVED_POINTER: "updateBrushSession",
41
+        PANNED_CAMERA: "updateBrushSession",
41 42
         STOPPED_POINTING: { do: "completeSession", to: "selecting" },
42 43
         CANCELLED: { do: "cancelSession", to: "selecting" },
43 44
       },
@@ -52,11 +53,14 @@ const state = createState({
52 53
       session.complete(data)
53 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 65
     zoomCamera(data, payload: { delta: number; point: number[] }) {
62 66
       const { camera } = data

+ 2
- 2
utils/utils.ts Bestand weergeven

@@ -3,7 +3,7 @@ import * as svg from "./svg"
3 3
 import * as vec from "./vec"
4 4
 
5 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 9
 export function getBoundsFromPoints(a: number[], b: number[]) {
@@ -844,7 +844,7 @@ export async function postJsonToEndpoint(
844 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 848
   const { shiftKey, ctrlKey, metaKey, altKey } = e
849 849
   return { point: [e.clientX, e.clientY], shiftKey, ctrlKey, metaKey, altKey }
850 850
 }

Laden…
Annuleren
Opslaan