-
-
Notifications
You must be signed in to change notification settings - Fork 3.5k
/
default_controls.ts
132 lines (117 loc) · 3.31 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
124
125
126
127
128
129
130
131
132
import { FabricObject } from '../shapes/Object/FabricObject';
import { Textbox } from '../shapes/textbox.class';
import { scaleCursorStyleHandler, scalingEqually } from './scale';
import { changeWidth } from './changeWidth';
import { rotationStyleHandler, rotationWithSnapping } from './rotate';
import {
scaleOrSkewActionName,
scaleSkewCursorStyleHandler,
scalingXOrSkewingY,
scalingYOrSkewingX,
} from './scaleSkew';
import { Control } from './control.class';
// use this function if you want to generate new controls for every instance
export const createObjectDefaultControls = () => ({
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 createResizeControls = () => ({
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',
}),
});
export const createTextboxDefaultControls = () => ({
...createObjectDefaultControls(),
...createResizeControls(),
});
export const defaultControls = createObjectDefaultControls();
// shared with the default object on purpose
export const textboxDefaultControls = {
...defaultControls,
...createResizeControls(),
};
FabricObject.prototype.controls = {
...(FabricObject.prototype.controls || {}),
...defaultControls,
};
if (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.
Textbox.prototype.controls = {
...(Textbox.prototype.controls || {}),
...textboxDefaultControls,
};
}