-
-
Notifications
You must be signed in to change notification settings - Fork 3.5k
/
Copy pathdefault_controls.ts
123 lines (110 loc) · 2.86 KB
/
default_controls.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
// @ts-nocheck
import { fabric } from '../../HEADER';
import { FabricObject } from '../shapes/fabricObject.class';
import {
changeWidth,
rotationStyleHandler,
rotationWithSnapping,
scaleCursorStyleHandler,
scaleOrSkewActionName,
scaleSkewCursorStyleHandler,
scalingEqually,
scalingXOrSkewingY,
scalingYOrSkewingX,
} from './actions';
import { Control } from './control.class';
export const defaultControls = {
ml: new Control({
x: -0.5,
y: 0,
cursorStyleHandler: scaleSkewCursorStyleHandler,
actionHandler: scalingXOrSkewingY,
getActionName: scaleOrSkewActionName,
}),
mr: new Control({
x: 0.5,
y: 0,
cursorStyleHandler: scaleSkewCursorStyleHandler,
actionHandler: scalingXOrSkewingY,
getActionName: scaleOrSkewActionName,
}),
mb: new Control({
x: 0,
y: 0.5,
cursorStyleHandler: scaleSkewCursorStyleHandler,
actionHandler: scalingYOrSkewingX,
getActionName: scaleOrSkewActionName,
}),
mt: new Control({
x: 0,
y: -0.5,
cursorStyleHandler: scaleSkewCursorStyleHandler,
actionHandler: scalingYOrSkewingX,
getActionName: scaleOrSkewActionName,
}),
tl: new Control({
x: -0.5,
y: -0.5,
cursorStyleHandler: scaleCursorStyleHandler,
actionHandler: scalingEqually,
}),
tr: new Control({
x: 0.5,
y: -0.5,
cursorStyleHandler: scaleCursorStyleHandler,
actionHandler: scalingEqually,
}),
bl: new Control({
x: -0.5,
y: 0.5,
cursorStyleHandler: scaleCursorStyleHandler,
actionHandler: scalingEqually,
}),
br: new Control({
x: 0.5,
y: 0.5,
cursorStyleHandler: scaleCursorStyleHandler,
actionHandler: scalingEqually,
}),
mtr: new Control({
x: 0,
y: -0.5,
actionHandler: rotationWithSnapping,
cursorStyleHandler: rotationStyleHandler,
offsetY: -40,
withConnection: true,
actionName: 'rotate',
}),
};
export const textboxDefaultControls = {
...defaultControls,
mr: new Control({
x: 0.5,
y: 0,
actionHandler: changeWidth,
cursorStyleHandler: scaleSkewCursorStyleHandler,
actionName: 'resizing',
}),
ml: new Control({
x: -0.5,
y: 0,
actionHandler: changeWidth,
cursorStyleHandler: scaleSkewCursorStyleHandler,
actionName: 'resizing',
}),
};
FabricObject.prototype.controls = {
...(FabricObject.prototype.controls || {}),
...defaultControls,
};
if (fabric.Textbox) {
// this is breaking the prototype inheritance, no time / ideas to fix it.
// is important to document that if you want to have all objects to have a
// specific custom control, you have to add it to Object prototype and to Textbox
// prototype. The controls are shared as references. So changes to control `tr`
// can still apply to all objects if needed.
fabric.Textbox.prototype.controls = {
...(fabric.Textbox.prototype.controls || {}),
...textboxDefaultControls,
};
}