|
|
@@ -25,6 +25,7 @@ import {
|
|
25
|
25
|
rotateBounds,
|
|
26
|
26
|
getBoundsCenter,
|
|
27
|
27
|
getDocumentBranch,
|
|
|
28
|
+ getCameraZoom,
|
|
28
|
29
|
} from 'utils/utils'
|
|
29
|
30
|
import {
|
|
30
|
31
|
Data,
|
|
|
@@ -43,6 +44,7 @@ import {
|
|
43
|
44
|
SizeStyle,
|
|
44
|
45
|
ColorStyle,
|
|
45
|
46
|
} from 'types'
|
|
|
47
|
+import session from './session'
|
|
46
|
48
|
|
|
47
|
49
|
const initialData: Data = {
|
|
48
|
50
|
isReadOnly: false,
|
|
|
@@ -324,28 +326,31 @@ const state = createState({
|
|
324
|
326
|
],
|
|
325
|
327
|
on: {
|
|
326
|
328
|
STARTED_PINCHING: { do: 'completeSession', to: 'pinching' },
|
|
327
|
|
- MOVED_POINTER: 'updateBrushSession',
|
|
|
329
|
+ // Currently using hacks.fastBrushSelect
|
|
|
330
|
+ // MOVED_POINTER: 'updateBrushSession',
|
|
328
|
331
|
PANNED_CAMERA: 'updateBrushSession',
|
|
329
|
332
|
STOPPED_POINTING: { do: 'completeSession', to: 'selecting' },
|
|
330
|
333
|
CANCELLED: { do: 'cancelSession', to: 'selecting' },
|
|
331
|
334
|
},
|
|
332
|
335
|
},
|
|
333
|
|
- pinching: {
|
|
|
336
|
+ },
|
|
|
337
|
+ },
|
|
|
338
|
+ pinching: {
|
|
|
339
|
+ on: {
|
|
|
340
|
+ // Pinching uses hacks.fastPinchCamera
|
|
|
341
|
+ // PINCHED: { do: 'pinchCamera' },
|
|
|
342
|
+ },
|
|
|
343
|
+ initial: 'selectPinching',
|
|
|
344
|
+ onExit: { secretlyDo: 'updateZoomCSS' },
|
|
|
345
|
+ states: {
|
|
|
346
|
+ selectPinching: {
|
|
334
|
347
|
on: {
|
|
335
|
|
- PINCHED: { do: 'pinchCamera' },
|
|
|
348
|
+ STOPPED_PINCHING: { to: 'selecting' },
|
|
336
|
349
|
},
|
|
337
|
|
- initial: 'selectPinching',
|
|
338
|
|
- states: {
|
|
339
|
|
- selectPinching: {
|
|
340
|
|
- on: {
|
|
341
|
|
- STOPPED_PINCHING: { to: 'selecting' },
|
|
342
|
|
- },
|
|
343
|
|
- },
|
|
344
|
|
- toolPinching: {
|
|
345
|
|
- on: {
|
|
346
|
|
- STOPPED_PINCHING: { to: 'usingTool.previous' },
|
|
347
|
|
- },
|
|
348
|
|
- },
|
|
|
350
|
+ },
|
|
|
351
|
+ toolPinching: {
|
|
|
352
|
+ on: {
|
|
|
353
|
+ STOPPED_PINCHING: { to: 'usingTool.previous' },
|
|
349
|
354
|
},
|
|
350
|
355
|
},
|
|
351
|
356
|
},
|
|
|
@@ -385,17 +390,17 @@ const state = createState({
|
|
385
|
390
|
editing: {
|
|
386
|
391
|
onEnter: 'startDrawSession',
|
|
387
|
392
|
on: {
|
|
388
|
|
- STOPPED_POINTING: {
|
|
389
|
|
- do: 'completeSession',
|
|
390
|
|
- to: 'draw.creating',
|
|
391
|
|
- },
|
|
392
|
393
|
CANCELLED: {
|
|
393
|
394
|
do: 'breakSession',
|
|
394
|
395
|
to: 'selecting',
|
|
395
|
396
|
},
|
|
|
397
|
+ STOPPED_POINTING: {
|
|
|
398
|
+ do: 'completeSession',
|
|
|
399
|
+ to: 'draw.creating',
|
|
|
400
|
+ },
|
|
396
|
401
|
PRESSED_SHIFT: 'keyUpdateDrawSession',
|
|
397
|
402
|
RELEASED_SHIFT: 'keyUpdateDrawSession',
|
|
398
|
|
- MOVED_POINTER: 'updateDrawSession',
|
|
|
403
|
+ // MOVED_POINTER: 'updateDrawSession',
|
|
399
|
404
|
PANNED_CAMERA: 'updateDrawSession',
|
|
400
|
405
|
},
|
|
401
|
406
|
},
|
|
|
@@ -816,53 +821,57 @@ const state = createState({
|
|
816
|
821
|
|
|
817
|
822
|
// Shared
|
|
818
|
823
|
breakSession(data) {
|
|
819
|
|
- session?.cancel(data)
|
|
820
|
|
- session = undefined
|
|
|
824
|
+ session.current?.cancel(data)
|
|
|
825
|
+ session.clear()
|
|
821
|
826
|
history.disable()
|
|
822
|
827
|
commands.deleteSelected(data)
|
|
823
|
828
|
history.enable()
|
|
824
|
829
|
},
|
|
825
|
830
|
cancelSession(data) {
|
|
826
|
|
- session?.cancel(data)
|
|
827
|
|
- session = undefined
|
|
|
831
|
+ session.current?.cancel(data)
|
|
|
832
|
+ session.clear()
|
|
828
|
833
|
},
|
|
829
|
834
|
completeSession(data) {
|
|
830
|
|
- session?.complete(data)
|
|
831
|
|
- session = undefined
|
|
|
835
|
+ session.current?.complete(data)
|
|
|
836
|
+ session.clear()
|
|
832
|
837
|
},
|
|
833
|
838
|
|
|
834
|
839
|
// Brushing
|
|
835
|
840
|
startBrushSession(data, payload: PointerInfo) {
|
|
836
|
|
- session = new Sessions.BrushSession(
|
|
|
841
|
+ session.current = new Sessions.BrushSession(
|
|
837
|
842
|
data,
|
|
838
|
843
|
screenToWorld(payload.point, data)
|
|
839
|
844
|
)
|
|
840
|
845
|
},
|
|
841
|
846
|
updateBrushSession(data, payload: PointerInfo) {
|
|
842
|
|
- session.update(data, screenToWorld(payload.point, data))
|
|
|
847
|
+ session.current.update(data, screenToWorld(payload.point, data))
|
|
843
|
848
|
},
|
|
844
|
849
|
|
|
845
|
850
|
// Rotating
|
|
846
|
851
|
startRotateSession(data, payload: PointerInfo) {
|
|
847
|
|
- session = new Sessions.RotateSession(
|
|
|
852
|
+ session.current = new Sessions.RotateSession(
|
|
848
|
853
|
data,
|
|
849
|
854
|
screenToWorld(payload.point, data)
|
|
850
|
855
|
)
|
|
851
|
856
|
},
|
|
852
|
857
|
keyUpdateRotateSession(data, payload: PointerInfo) {
|
|
853
|
|
- session.update(
|
|
|
858
|
+ session.current.update(
|
|
854
|
859
|
data,
|
|
855
|
860
|
screenToWorld(inputs.pointer.point, data),
|
|
856
|
861
|
payload.shiftKey
|
|
857
|
862
|
)
|
|
858
|
863
|
},
|
|
859
|
864
|
updateRotateSession(data, payload: PointerInfo) {
|
|
860
|
|
- session.update(data, screenToWorld(payload.point, data), payload.shiftKey)
|
|
|
865
|
+ session.current.update(
|
|
|
866
|
+ data,
|
|
|
867
|
+ screenToWorld(payload.point, data),
|
|
|
868
|
+ payload.shiftKey
|
|
|
869
|
+ )
|
|
861
|
870
|
},
|
|
862
|
871
|
|
|
863
|
872
|
// Dragging / Translating
|
|
864
|
873
|
startTranslateSession(data) {
|
|
865
|
|
- session = new Sessions.TranslateSession(
|
|
|
874
|
+ session.current = new Sessions.TranslateSession(
|
|
866
|
875
|
data,
|
|
867
|
876
|
screenToWorld(inputs.pointer.origin, data)
|
|
868
|
877
|
)
|
|
|
@@ -871,7 +880,7 @@ const state = createState({
|
|
871
|
880
|
data,
|
|
872
|
881
|
payload: { shiftKey: boolean; altKey: boolean }
|
|
873
|
882
|
) {
|
|
874
|
|
- session.update(
|
|
|
883
|
+ session.current.update(
|
|
875
|
884
|
data,
|
|
876
|
885
|
screenToWorld(inputs.pointer.point, data),
|
|
877
|
886
|
payload.shiftKey,
|
|
|
@@ -879,7 +888,7 @@ const state = createState({
|
|
879
|
888
|
)
|
|
880
|
889
|
},
|
|
881
|
890
|
updateTranslateSession(data, payload: PointerInfo) {
|
|
882
|
|
- session.update(
|
|
|
891
|
+ session.current.update(
|
|
883
|
892
|
data,
|
|
884
|
893
|
screenToWorld(payload.point, data),
|
|
885
|
894
|
payload.shiftKey,
|
|
|
@@ -892,7 +901,7 @@ const state = createState({
|
|
892
|
901
|
const shapeId = Array.from(data.selectedIds.values())[0]
|
|
893
|
902
|
const handleId = payload.target
|
|
894
|
903
|
|
|
895
|
|
- session = new Sessions.HandleSession(
|
|
|
904
|
+ session.current = new Sessions.HandleSession(
|
|
896
|
905
|
data,
|
|
897
|
906
|
shapeId,
|
|
898
|
907
|
handleId,
|
|
|
@@ -903,7 +912,7 @@ const state = createState({
|
|
903
|
912
|
data,
|
|
904
|
913
|
payload: { shiftKey: boolean; altKey: boolean }
|
|
905
|
914
|
) {
|
|
906
|
|
- session.update(
|
|
|
915
|
+ session.current.update(
|
|
907
|
916
|
data,
|
|
908
|
917
|
screenToWorld(inputs.pointer.point, data),
|
|
909
|
918
|
payload.shiftKey,
|
|
|
@@ -911,7 +920,7 @@ const state = createState({
|
|
911
|
920
|
)
|
|
912
|
921
|
},
|
|
913
|
922
|
updateHandleSession(data, payload: PointerInfo) {
|
|
914
|
|
- session.update(
|
|
|
923
|
+ session.current.update(
|
|
915
|
924
|
data,
|
|
916
|
925
|
screenToWorld(payload.point, data),
|
|
917
|
926
|
payload.shiftKey,
|
|
|
@@ -925,14 +934,13 @@ const state = createState({
|
|
925
|
934
|
payload: PointerInfo & { target: Corner | Edge }
|
|
926
|
935
|
) {
|
|
927
|
936
|
const point = screenToWorld(inputs.pointer.origin, data)
|
|
928
|
|
- session = new Sessions.TransformSession(data, payload.target, point)
|
|
929
|
|
- session =
|
|
|
937
|
+ session.current =
|
|
930
|
938
|
data.selectedIds.size === 1
|
|
931
|
939
|
? new Sessions.TransformSingleSession(data, payload.target, point)
|
|
932
|
940
|
: new Sessions.TransformSession(data, payload.target, point)
|
|
933
|
941
|
},
|
|
934
|
942
|
startDrawTransformSession(data, payload: PointerInfo) {
|
|
935
|
|
- session = new Sessions.TransformSingleSession(
|
|
|
943
|
+ session.current = new Sessions.TransformSingleSession(
|
|
936
|
944
|
data,
|
|
937
|
945
|
Corner.BottomRight,
|
|
938
|
946
|
screenToWorld(payload.point, data),
|
|
|
@@ -940,7 +948,7 @@ const state = createState({
|
|
940
|
948
|
)
|
|
941
|
949
|
},
|
|
942
|
950
|
keyUpdateTransformSession(data, payload: PointerInfo) {
|
|
943
|
|
- session.update(
|
|
|
951
|
+ session.current.update(
|
|
944
|
952
|
data,
|
|
945
|
953
|
screenToWorld(inputs.pointer.point, data),
|
|
946
|
954
|
payload.shiftKey,
|
|
|
@@ -948,7 +956,7 @@ const state = createState({
|
|
948
|
956
|
)
|
|
949
|
957
|
},
|
|
950
|
958
|
updateTransformSession(data, payload: PointerInfo) {
|
|
951
|
|
- session.update(
|
|
|
959
|
+ session.current.update(
|
|
952
|
960
|
data,
|
|
953
|
961
|
screenToWorld(payload.point, data),
|
|
954
|
962
|
payload.shiftKey,
|
|
|
@@ -958,19 +966,19 @@ const state = createState({
|
|
958
|
966
|
|
|
959
|
967
|
// Direction
|
|
960
|
968
|
startDirectionSession(data, payload: PointerInfo) {
|
|
961
|
|
- session = new Sessions.DirectionSession(
|
|
|
969
|
+ session.current = new Sessions.DirectionSession(
|
|
962
|
970
|
data,
|
|
963
|
971
|
screenToWorld(inputs.pointer.origin, data)
|
|
964
|
972
|
)
|
|
965
|
973
|
},
|
|
966
|
974
|
updateDirectionSession(data, payload: PointerInfo) {
|
|
967
|
|
- session.update(data, screenToWorld(payload.point, data))
|
|
|
975
|
+ session.current.update(data, screenToWorld(payload.point, data))
|
|
968
|
976
|
},
|
|
969
|
977
|
|
|
970
|
978
|
// Drawing
|
|
971
|
979
|
startDrawSession(data, payload: PointerInfo) {
|
|
972
|
980
|
const id = Array.from(data.selectedIds.values())[0]
|
|
973
|
|
- session = new Sessions.DrawSession(
|
|
|
981
|
+ session.current = new Sessions.DrawSession(
|
|
974
|
982
|
data,
|
|
975
|
983
|
id,
|
|
976
|
984
|
screenToWorld(inputs.pointer.origin, data),
|
|
|
@@ -978,7 +986,7 @@ const state = createState({
|
|
978
|
986
|
)
|
|
979
|
987
|
},
|
|
980
|
988
|
keyUpdateDrawSession(data, payload: PointerInfo) {
|
|
981
|
|
- session.update(
|
|
|
989
|
+ session.current.update(
|
|
982
|
990
|
data,
|
|
983
|
991
|
screenToWorld(inputs.pointer.point, data),
|
|
984
|
992
|
payload.pressure,
|
|
|
@@ -986,7 +994,7 @@ const state = createState({
|
|
986
|
994
|
)
|
|
987
|
995
|
},
|
|
988
|
996
|
updateDrawSession(data, payload: PointerInfo) {
|
|
989
|
|
- session.update(
|
|
|
997
|
+ session.current.update(
|
|
990
|
998
|
data,
|
|
991
|
999
|
screenToWorld(payload.point, data),
|
|
992
|
1000
|
payload.pressure,
|
|
|
@@ -997,7 +1005,7 @@ const state = createState({
|
|
997
|
1005
|
// Arrow
|
|
998
|
1006
|
startArrowSession(data, payload: PointerInfo) {
|
|
999
|
1007
|
const id = Array.from(data.selectedIds.values())[0]
|
|
1000
|
|
- session = new Sessions.ArrowSession(
|
|
|
1008
|
+ session.current = new Sessions.ArrowSession(
|
|
1001
|
1009
|
data,
|
|
1002
|
1010
|
id,
|
|
1003
|
1011
|
screenToWorld(inputs.pointer.origin, data),
|
|
|
@@ -1005,14 +1013,18 @@ const state = createState({
|
|
1005
|
1013
|
)
|
|
1006
|
1014
|
},
|
|
1007
|
1015
|
keyUpdateArrowSession(data, payload: PointerInfo) {
|
|
1008
|
|
- session.update(
|
|
|
1016
|
+ session.current.update(
|
|
1009
|
1017
|
data,
|
|
1010
|
1018
|
screenToWorld(inputs.pointer.point, data),
|
|
1011
|
1019
|
payload.shiftKey
|
|
1012
|
1020
|
)
|
|
1013
|
1021
|
},
|
|
1014
|
1022
|
updateArrowSession(data, payload: PointerInfo) {
|
|
1015
|
|
- session.update(data, screenToWorld(payload.point, data), payload.shiftKey)
|
|
|
1023
|
+ session.current.update(
|
|
|
1024
|
+ data,
|
|
|
1025
|
+ screenToWorld(payload.point, data),
|
|
|
1026
|
+ payload.shiftKey
|
|
|
1027
|
+ )
|
|
1016
|
1028
|
},
|
|
1017
|
1029
|
|
|
1018
|
1030
|
// Nudges
|
|
|
@@ -1257,6 +1269,10 @@ const state = createState({
|
|
1257
|
1269
|
const camera = getCurrentCamera(data)
|
|
1258
|
1270
|
camera.point = vec.sub(camera.point, vec.div(payload.delta, camera.zoom))
|
|
1259
|
1271
|
},
|
|
|
1272
|
+ updateZoomCSS(data) {
|
|
|
1273
|
+ const camera = getCurrentCamera(data)
|
|
|
1274
|
+ setZoomCSS(camera.zoom)
|
|
|
1275
|
+ },
|
|
1260
|
1276
|
pinchCamera(
|
|
1261
|
1277
|
data,
|
|
1262
|
1278
|
payload: {
|
|
|
@@ -1509,16 +1525,10 @@ const state = createState({
|
|
1509
|
1525
|
},
|
|
1510
|
1526
|
})
|
|
1511
|
1527
|
|
|
1512
|
|
-let session: Sessions.BaseSession
|
|
1513
|
|
-
|
|
1514
|
1528
|
export default state
|
|
1515
|
1529
|
|
|
1516
|
1530
|
export const useSelector = createSelectorHook(state)
|
|
1517
|
1531
|
|
|
1518
|
|
-function getCameraZoom(zoom: number) {
|
|
1519
|
|
- return clamp(zoom, 0.1, 5)
|
|
1520
|
|
-}
|
|
1521
|
|
-
|
|
1522
|
1532
|
function getParentId(data: Data, id: string) {
|
|
1523
|
1533
|
const shape = getPage(data).shapes[id]
|
|
1524
|
1534
|
return shape.parentId
|