Bläddra i källkod

Improving draw

main
Steve Ruiz 4 år sedan
förälder
incheckning
9123fd62fc
6 ändrade filer med 32 tillägg och 25 borttagningar
  1. 1
    1
      hooks/useZoomEvents.ts
  2. 3
    3
      state/history.ts
  3. 10
    0
      state/sessions/draw-session.ts
  4. 13
    16
      state/storage.ts
  5. 3
    3
      utils/utils.ts
  6. 2
    2
      utils/vec.ts

+ 1
- 1
hooks/useZoomEvents.ts Visa fil

32
           return
32
           return
33
         }
33
         }
34
 
34
 
35
-        if (state.isIn('pointing')) {
35
+        if (state.isInAny('pointing', 'drawing')) {
36
           fastPanUpdate(delta)
36
           fastPanUpdate(delta)
37
           return
37
           return
38
         }
38
         }

+ 3
- 3
state/history.ts Visa fil

24
     }
24
     }
25
 
25
 
26
     storage.savePage(data)
26
     storage.savePage(data)
27
-    storage.saveToLocalStorage(data)
27
+    // storage.saveToLocalStorage(data)
28
   }
28
   }
29
 
29
 
30
   undo = (data: T) => {
30
   undo = (data: T) => {
34
     if (this.disabled) return
34
     if (this.disabled) return
35
     this.pointer--
35
     this.pointer--
36
     storage.savePage(data)
36
     storage.savePage(data)
37
-    storage.saveToLocalStorage(data)
37
+    // storage.saveToLocalStorage(data)
38
   }
38
   }
39
 
39
 
40
   redo = (data: T) => {
40
   redo = (data: T) => {
44
     if (this.disabled) return
44
     if (this.disabled) return
45
     this.pointer++
45
     this.pointer++
46
     storage.savePage(data)
46
     storage.savePage(data)
47
-    storage.saveToLocalStorage(data)
47
+    // storage.saveToLocalStorage(data)
48
   }
48
   }
49
 
49
 
50
   disable = () => {
50
   disable = () => {

+ 10
- 0
state/sessions/draw-session.ts Visa fil

103
     // Update the points and update the shape's parents.
103
     // Update the points and update the shape's parents.
104
     const shape = getShape(data, snapshot.id) as DrawShape
104
     const shape = getShape(data, snapshot.id) as DrawShape
105
 
105
 
106
+    if (newPoint[0] < 0 || newPoint[1] < 0) {
107
+      const offset = [Math.min(newPoint[0], 0), Math.min(newPoint[1], 0)]
108
+
109
+      this.points = this.points.map((pt) => vec.sub(pt, offset))
110
+
111
+      this.origin = vec.sub(this.origin, offset)
112
+
113
+      getShapeUtils(shape).translateBy(shape, offset)
114
+    }
115
+
106
     getShapeUtils(shape).setProperty(shape, 'points', [...this.points])
116
     getShapeUtils(shape).setProperty(shape, 'points', [...this.points])
107
 
117
 
108
     updateParents(data, [shape.id])
118
     updateParents(data, [shape.id])

+ 13
- 16
state/storage.ts Visa fil

27
 
27
 
28
     this.loadPage(data, data.currentPageId)
28
     this.loadPage(data, data.currentPageId)
29
 
29
 
30
-    this.saveToLocalStorage(data, data.document.id)
30
+    // this.saveToLocalStorage(data, data.document.id)
31
 
31
 
32
     localStorage.setItem(`${CURRENT_VERSION}_lastOpened`, data.document.id)
32
     localStorage.setItem(`${CURRENT_VERSION}_lastOpened`, data.document.id)
33
   }
33
   }
34
 
34
 
35
   load(data: Data, restoredData: any) {
35
   load(data: Data, restoredData: any) {
36
     // Before loading the state, save the pages / page states
36
     // Before loading the state, save the pages / page states
37
-    for (let key in restoredData.document.pages) {
38
-      this.savePage(restoredData, restoredData.document.id, key)
39
-    }
40
 
37
 
41
     // Empty current state.
38
     // Empty current state.
42
     data.document = {} as TLDocument
39
     data.document = {} as TLDocument
71
 
68
 
72
     const restoredData: any = JSON.parse(lzw_decode(savedData))
69
     const restoredData: any = JSON.parse(lzw_decode(savedData))
73
 
70
 
74
-    for (let pageId in restoredData.document.pages) {
75
-      const selectedIds = restoredData.pageStates[pageId].selectedIds
76
-      restoredData.pageStates[pageId].selectedIds = new Set(selectedIds)
77
-    }
78
-
79
     this.load(data, restoredData)
71
     this.load(data, restoredData)
80
   }
72
   }
81
 
73
 
92
         dataToSave.document.pages[pageId] = restored
84
         dataToSave.document.pages[pageId] = restored
93
       }
85
       }
94
 
86
 
95
-      const pageState = dataToSave.pageStates[pageId]
87
+      const pageState = { ...dataToSave.pageStates[pageId] }
96
       pageState.selectedIds = setToArray(pageState.selectedIds)
88
       pageState.selectedIds = setToArray(pageState.selectedIds)
97
     }
89
     }
98
 
90
 
114
 
106
 
115
   loadDocumentFromJson(data: Data, restoredData: any) {
107
   loadDocumentFromJson(data: Data, restoredData: any) {
116
     this.load(data, restoredData)
108
     this.load(data, restoredData)
109
+
110
+    for (let key in restoredData.document.pages) {
111
+      this.savePage(restoredData, restoredData.document.id, key)
112
+    }
113
+
117
     this.loadPage(data, data.currentPageId)
114
     this.loadPage(data, data.currentPageId)
118
     this.saveToLocalStorage(data, data.document.id)
115
     this.saveToLocalStorage(data, data.document.id)
119
     localStorage.setItem(`${CURRENT_VERSION}_lastOpened`, data.document.id)
116
     localStorage.setItem(`${CURRENT_VERSION}_lastOpened`, data.document.id)
166
     const fileId = data.document.id
163
     const fileId = data.document.id
167
 
164
 
168
     // Page
165
     // Page
169
-
170
     const savedPage = localStorage.getItem(storageId(fileId, 'page', pageId))
166
     const savedPage = localStorage.getItem(storageId(fileId, 'page', pageId))
171
 
167
 
172
     if (savedPage !== null) {
168
     if (savedPage !== null) {
169
+      console.log(lzw_decode(savedPage))
173
       data.document.pages[pageId] = JSON.parse(lzw_decode(savedPage))
170
       data.document.pages[pageId] = JSON.parse(lzw_decode(savedPage))
174
     } else {
171
     } else {
175
       data.document.pages[pageId] = {
172
       data.document.pages[pageId] = {
182
     }
179
     }
183
 
180
 
184
     // Page state
181
     // Page state
185
-
186
     const savedPageState = localStorage.getItem(
182
     const savedPageState = localStorage.getItem(
187
       storageId(fileId, 'pageState', pageId)
183
       storageId(fileId, 'pageState', pageId)
188
     )
184
     )
200
       }
196
       }
201
     }
197
     }
202
 
198
 
203
-    data.pageStates[pageId].selectedIds = new Set(
204
-      data.pageStates[pageId].selectedIds
205
-    )
206
-
207
     // Empty shapes in state for other pages
199
     // Empty shapes in state for other pages
208
 
200
 
209
     for (let key in data.document.pages) {
201
     for (let key in data.document.pages) {
211
       data.document.pages[key].shapes = {}
203
       data.document.pages[key].shapes = {}
212
     }
204
     }
213
 
205
 
206
+    // Force selected Ids into sets
207
+    for (let key in data.pageStates) {
208
+      data.pageStates[key].selectedIds = new Set([])
209
+    }
210
+
214
     // Update camera for the new page state
211
     // Update camera for the new page state
215
     document.documentElement.style.setProperty(
212
     document.documentElement.style.setProperty(
216
       '--camera-zoom',
213
       '--camera-zoom',

+ 3
- 3
utils/utils.ts Visa fil

1763
   e: PointerEvent | React.PointerEvent | Touch | React.Touch | WheelEvent
1763
   e: PointerEvent | React.PointerEvent | Touch | React.Touch | WheelEvent
1764
 ) {
1764
 ) {
1765
   return [
1765
   return [
1766
-    Number(e.clientX.toPrecision(4)),
1767
-    Number(e.clientY.toPrecision(4)),
1768
-    'pressure' in e ? e.pressure || 0.5 : 0.5,
1766
+    Number(e.clientX.toPrecision(5)),
1767
+    Number(e.clientY.toPrecision(5)),
1768
+    'pressure' in e ? Number(e.pressure.toPrecision(5)) || 0.5 : 0.5,
1769
   ]
1769
   ]
1770
 }
1770
 }
1771
 
1771
 

+ 2
- 2
utils/vec.ts Visa fil

339
   return isLeft(p1, pc, p2) > 0
339
   return isLeft(p1, pc, p2) > 0
340
 }
340
 }
341
 
341
 
342
-export function round(a: number[], d = 2) {
343
-  return a.map((v) => +v.toFixed(d))
342
+export function round(a: number[], d = 5) {
343
+  return a.map((v) => Number(v.toPrecision(d)))
344
 }
344
 }
345
 
345
 
346
 /**
346
 /**

Laddar…
Avbryt
Spara