Procházet zdrojové kódy

Improving draw

main
Steve Ruiz před 4 roky
rodič
revize
9123fd62fc
6 změnil soubory, kde provedl 32 přidání a 25 odebrání
  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 Zobrazit soubor

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

+ 3
- 3
state/history.ts Zobrazit soubor

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

+ 10
- 0
state/sessions/draw-session.ts Zobrazit soubor

@@ -103,6 +103,16 @@ export default class BrushSession extends BaseSession {
103 103
     // Update the points and update the shape's parents.
104 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 116
     getShapeUtils(shape).setProperty(shape, 'points', [...this.points])
107 117
 
108 118
     updateParents(data, [shape.id])

+ 13
- 16
state/storage.ts Zobrazit soubor

@@ -27,16 +27,13 @@ class Storage {
27 27
 
28 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 32
     localStorage.setItem(`${CURRENT_VERSION}_lastOpened`, data.document.id)
33 33
   }
34 34
 
35 35
   load(data: Data, restoredData: any) {
36 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 38
     // Empty current state.
42 39
     data.document = {} as TLDocument
@@ -71,11 +68,6 @@ class Storage {
71 68
 
72 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 71
     this.load(data, restoredData)
80 72
   }
81 73
 
@@ -92,7 +84,7 @@ class Storage {
92 84
         dataToSave.document.pages[pageId] = restored
93 85
       }
94 86
 
95
-      const pageState = dataToSave.pageStates[pageId]
87
+      const pageState = { ...dataToSave.pageStates[pageId] }
96 88
       pageState.selectedIds = setToArray(pageState.selectedIds)
97 89
     }
98 90
 
@@ -114,6 +106,11 @@ class Storage {
114 106
 
115 107
   loadDocumentFromJson(data: Data, restoredData: any) {
116 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 114
     this.loadPage(data, data.currentPageId)
118 115
     this.saveToLocalStorage(data, data.document.id)
119 116
     localStorage.setItem(`${CURRENT_VERSION}_lastOpened`, data.document.id)
@@ -166,10 +163,10 @@ class Storage {
166 163
     const fileId = data.document.id
167 164
 
168 165
     // Page
169
-
170 166
     const savedPage = localStorage.getItem(storageId(fileId, 'page', pageId))
171 167
 
172 168
     if (savedPage !== null) {
169
+      console.log(lzw_decode(savedPage))
173 170
       data.document.pages[pageId] = JSON.parse(lzw_decode(savedPage))
174 171
     } else {
175 172
       data.document.pages[pageId] = {
@@ -182,7 +179,6 @@ class Storage {
182 179
     }
183 180
 
184 181
     // Page state
185
-
186 182
     const savedPageState = localStorage.getItem(
187 183
       storageId(fileId, 'pageState', pageId)
188 184
     )
@@ -200,10 +196,6 @@ class Storage {
200 196
       }
201 197
     }
202 198
 
203
-    data.pageStates[pageId].selectedIds = new Set(
204
-      data.pageStates[pageId].selectedIds
205
-    )
206
-
207 199
     // Empty shapes in state for other pages
208 200
 
209 201
     for (let key in data.document.pages) {
@@ -211,6 +203,11 @@ class Storage {
211 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 211
     // Update camera for the new page state
215 212
     document.documentElement.style.setProperty(
216 213
       '--camera-zoom',

+ 3
- 3
utils/utils.ts Zobrazit soubor

@@ -1763,9 +1763,9 @@ export function getPoint(
1763 1763
   e: PointerEvent | React.PointerEvent | Touch | React.Touch | WheelEvent
1764 1764
 ) {
1765 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 Zobrazit soubor

@@ -339,8 +339,8 @@ export function clockwise(p1: number[], pc: number[], p2: number[]) {
339 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
 /**

Načítá se…
Zrušit
Uložit