@leafer-in/resize 1.0.0-rc.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +1 -0
- package/dist/resize.cjs +193 -0
- package/dist/resize.esm.js +186 -0
- package/dist/resize.esm.min.js +1 -0
- package/dist/resize.js +197 -0
- package/dist/resize.min.cjs +1 -0
- package/dist/resize.min.js +1 -0
- package/package.json +40 -0
- package/src/PathScaler.ts +93 -0
- package/src/index.ts +74 -0
- package/src/scaler.ts +48 -0
- package/types/index.d.ts +14 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2023-present, Chao (Leafer) Wan
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
|
13
|
+
all copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
21
|
+
THE SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# @leafer-in/resize
|
package/dist/resize.cjs
ADDED
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var draw = require('@leafer-ui/draw');
|
|
4
|
+
|
|
5
|
+
const { M, L, C, Q, Z, N, D, X, G, F, O, P, U } = draw.PathCommandMap;
|
|
6
|
+
const PathScaler = {
|
|
7
|
+
scale(data, scaleX, scaleY) {
|
|
8
|
+
if (!data)
|
|
9
|
+
return;
|
|
10
|
+
let command;
|
|
11
|
+
let i = 0, len = data.length;
|
|
12
|
+
while (i < len) {
|
|
13
|
+
command = data[i];
|
|
14
|
+
switch (command) {
|
|
15
|
+
case M:
|
|
16
|
+
scalePoints(data, scaleX, scaleY, i, 1);
|
|
17
|
+
i += 3;
|
|
18
|
+
break;
|
|
19
|
+
case L:
|
|
20
|
+
scalePoints(data, scaleX, scaleY, i, 1);
|
|
21
|
+
i += 3;
|
|
22
|
+
break;
|
|
23
|
+
case C:
|
|
24
|
+
scalePoints(data, scaleX, scaleY, i, 3);
|
|
25
|
+
i += 7;
|
|
26
|
+
break;
|
|
27
|
+
case Q:
|
|
28
|
+
scalePoints(data, scaleX, scaleY, i, 2);
|
|
29
|
+
i += 5;
|
|
30
|
+
break;
|
|
31
|
+
case Z:
|
|
32
|
+
i += 1;
|
|
33
|
+
break;
|
|
34
|
+
case N:
|
|
35
|
+
scalePoints(data, scaleX, scaleY, i, 2);
|
|
36
|
+
i += 5;
|
|
37
|
+
break;
|
|
38
|
+
case D:
|
|
39
|
+
scalePoints(data, scaleX, scaleY, i, 2);
|
|
40
|
+
i += 9;
|
|
41
|
+
break;
|
|
42
|
+
case X:
|
|
43
|
+
scalePoints(data, scaleX, scaleY, i, 2);
|
|
44
|
+
i += 6;
|
|
45
|
+
break;
|
|
46
|
+
case G:
|
|
47
|
+
scalePoints(data, scaleX, scaleY, i, 2);
|
|
48
|
+
i += 9;
|
|
49
|
+
break;
|
|
50
|
+
case F:
|
|
51
|
+
scalePoints(data, scaleX, scaleY, i, 2);
|
|
52
|
+
i += 5;
|
|
53
|
+
break;
|
|
54
|
+
case O:
|
|
55
|
+
data[i] = G;
|
|
56
|
+
data.splice(i + 4, 0, data[i + 3], 0);
|
|
57
|
+
scalePoints(data, scaleX, scaleY, i, 2);
|
|
58
|
+
i += 7 + 2;
|
|
59
|
+
len += 2;
|
|
60
|
+
break;
|
|
61
|
+
case P:
|
|
62
|
+
data[i] = F;
|
|
63
|
+
data.splice(i + 4, 0, data[i + 3]);
|
|
64
|
+
scalePoints(data, scaleX, scaleY, i, 2);
|
|
65
|
+
i += 4 + 1;
|
|
66
|
+
len += 1;
|
|
67
|
+
break;
|
|
68
|
+
case U:
|
|
69
|
+
scalePoints(data, scaleX, scaleY, i, 2);
|
|
70
|
+
i += 6;
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
scalePoints(data, scaleX, scaleY, start, pointCount) {
|
|
76
|
+
for (let i = pointCount ? start + 1 : 0, end = pointCount ? i + pointCount * 2 : data.length; i < end; i += 2) {
|
|
77
|
+
data[i] *= scaleX;
|
|
78
|
+
data[i + 1] *= scaleY;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
const { scalePoints } = PathScaler;
|
|
83
|
+
|
|
84
|
+
const matrix = draw.MatrixHelper.get();
|
|
85
|
+
function scaleResize(leaf, scaleX, scaleY) {
|
|
86
|
+
if (leaf.pathInputed) {
|
|
87
|
+
scaleResizePath(leaf, scaleX, scaleY);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
if (scaleX !== 1)
|
|
91
|
+
leaf.width *= scaleX;
|
|
92
|
+
if (scaleY !== 1)
|
|
93
|
+
leaf.height *= scaleY;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
function scaleResizeFontSize(leaf, scaleX, scaleY) {
|
|
97
|
+
const { width, height } = leaf.__localBoxBounds;
|
|
98
|
+
if (scaleX !== 1) {
|
|
99
|
+
leaf.fontSize *= scaleX;
|
|
100
|
+
leaf.y -= height * (scaleX - scaleY) / 2;
|
|
101
|
+
}
|
|
102
|
+
else if (scaleY !== 1) {
|
|
103
|
+
leaf.fontSize *= scaleY;
|
|
104
|
+
leaf.x -= width * (scaleY - scaleX) / 2;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function scaleResizePath(leaf, scaleX, scaleY) {
|
|
108
|
+
PathScaler.scale(leaf.__.path, scaleX, scaleY);
|
|
109
|
+
leaf.path = leaf.__.path;
|
|
110
|
+
}
|
|
111
|
+
function scaleResizePoints(leaf, scaleX, scaleY) {
|
|
112
|
+
PathScaler.scalePoints(leaf.__.points, scaleX, scaleY);
|
|
113
|
+
leaf.points = leaf.__.points;
|
|
114
|
+
}
|
|
115
|
+
function scaleResizeGroup(group, scaleX, scaleY) {
|
|
116
|
+
const { children } = group;
|
|
117
|
+
for (let i = 0; i < children.length; i++) {
|
|
118
|
+
matrix.a = scaleX;
|
|
119
|
+
matrix.d = scaleY;
|
|
120
|
+
children[i].transform(matrix, true);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
draw.Leaf.prototype.scaleResize = function (scaleX, scaleY = scaleX, noResize) {
|
|
125
|
+
const data = this;
|
|
126
|
+
if (noResize || (data.editConfig && data.editConfig.editSize === 'scale')) {
|
|
127
|
+
data.scaleX *= scaleX;
|
|
128
|
+
data.scaleY *= scaleY;
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
if (scaleX < 0)
|
|
132
|
+
data.scaleX *= -1, scaleX = -scaleX;
|
|
133
|
+
if (scaleY < 0)
|
|
134
|
+
data.scaleY *= -1, scaleY = -scaleY;
|
|
135
|
+
this.__scaleResize(scaleX, scaleY);
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
draw.Leaf.prototype.__scaleResize = function (scaleX, scaleY) {
|
|
139
|
+
scaleResize(this, scaleX, scaleY);
|
|
140
|
+
};
|
|
141
|
+
draw.Text.prototype.__scaleResize = function (scaleX, scaleY) {
|
|
142
|
+
if (this.__.__autoSize && (this.__.resizeFontSize || (this.editConfig && this.editConfig.editSize === 'font-size'))) {
|
|
143
|
+
scaleResizeFontSize(this, scaleX, scaleY);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
scaleResize(this, scaleX, scaleY);
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
draw.Path.prototype.__scaleResize = function (scaleX, scaleY) {
|
|
150
|
+
scaleResizePath(this, scaleX, scaleY);
|
|
151
|
+
};
|
|
152
|
+
draw.Line.prototype.__scaleResize = function (scaleX, scaleY) {
|
|
153
|
+
if (this.pathInputed) {
|
|
154
|
+
scaleResizePath(this, scaleX, scaleY);
|
|
155
|
+
}
|
|
156
|
+
else if (this.points) {
|
|
157
|
+
scaleResizePoints(this, scaleX, scaleY);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
this.width *= scaleX;
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
draw.Polygon.prototype.__scaleResize = function (scaleX, scaleY) {
|
|
164
|
+
if (this.pathInputed) {
|
|
165
|
+
scaleResizePath(this, scaleX, scaleY);
|
|
166
|
+
}
|
|
167
|
+
else if (this.points) {
|
|
168
|
+
scaleResizePoints(this, scaleX, scaleY);
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
scaleResize(this, scaleX, scaleY);
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
draw.Group.prototype.__scaleResize = function (scaleX, scaleY) {
|
|
175
|
+
scaleResizeGroup(this, scaleX, scaleY);
|
|
176
|
+
};
|
|
177
|
+
draw.Box.prototype.__scaleResize = function (scaleX, scaleY) {
|
|
178
|
+
if (this.__.__autoSize && this.children.length) {
|
|
179
|
+
scaleResizeGroup(this, scaleX, scaleY);
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
scaleResize(this, scaleX, scaleY);
|
|
183
|
+
if (this.__.resizeChildren)
|
|
184
|
+
scaleResizeGroup(this, scaleX, scaleY);
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
exports.PathScaler = PathScaler;
|
|
189
|
+
exports.scaleResize = scaleResize;
|
|
190
|
+
exports.scaleResizeFontSize = scaleResizeFontSize;
|
|
191
|
+
exports.scaleResizeGroup = scaleResizeGroup;
|
|
192
|
+
exports.scaleResizePath = scaleResizePath;
|
|
193
|
+
exports.scaleResizePoints = scaleResizePoints;
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { PathCommandMap, MatrixHelper, Leaf, Text, Path, Line, Polygon, Group, Box } from '@leafer-ui/draw';
|
|
2
|
+
|
|
3
|
+
const { M, L, C, Q, Z, N, D, X, G, F, O, P, U } = PathCommandMap;
|
|
4
|
+
const PathScaler = {
|
|
5
|
+
scale(data, scaleX, scaleY) {
|
|
6
|
+
if (!data)
|
|
7
|
+
return;
|
|
8
|
+
let command;
|
|
9
|
+
let i = 0, len = data.length;
|
|
10
|
+
while (i < len) {
|
|
11
|
+
command = data[i];
|
|
12
|
+
switch (command) {
|
|
13
|
+
case M:
|
|
14
|
+
scalePoints(data, scaleX, scaleY, i, 1);
|
|
15
|
+
i += 3;
|
|
16
|
+
break;
|
|
17
|
+
case L:
|
|
18
|
+
scalePoints(data, scaleX, scaleY, i, 1);
|
|
19
|
+
i += 3;
|
|
20
|
+
break;
|
|
21
|
+
case C:
|
|
22
|
+
scalePoints(data, scaleX, scaleY, i, 3);
|
|
23
|
+
i += 7;
|
|
24
|
+
break;
|
|
25
|
+
case Q:
|
|
26
|
+
scalePoints(data, scaleX, scaleY, i, 2);
|
|
27
|
+
i += 5;
|
|
28
|
+
break;
|
|
29
|
+
case Z:
|
|
30
|
+
i += 1;
|
|
31
|
+
break;
|
|
32
|
+
case N:
|
|
33
|
+
scalePoints(data, scaleX, scaleY, i, 2);
|
|
34
|
+
i += 5;
|
|
35
|
+
break;
|
|
36
|
+
case D:
|
|
37
|
+
scalePoints(data, scaleX, scaleY, i, 2);
|
|
38
|
+
i += 9;
|
|
39
|
+
break;
|
|
40
|
+
case X:
|
|
41
|
+
scalePoints(data, scaleX, scaleY, i, 2);
|
|
42
|
+
i += 6;
|
|
43
|
+
break;
|
|
44
|
+
case G:
|
|
45
|
+
scalePoints(data, scaleX, scaleY, i, 2);
|
|
46
|
+
i += 9;
|
|
47
|
+
break;
|
|
48
|
+
case F:
|
|
49
|
+
scalePoints(data, scaleX, scaleY, i, 2);
|
|
50
|
+
i += 5;
|
|
51
|
+
break;
|
|
52
|
+
case O:
|
|
53
|
+
data[i] = G;
|
|
54
|
+
data.splice(i + 4, 0, data[i + 3], 0);
|
|
55
|
+
scalePoints(data, scaleX, scaleY, i, 2);
|
|
56
|
+
i += 7 + 2;
|
|
57
|
+
len += 2;
|
|
58
|
+
break;
|
|
59
|
+
case P:
|
|
60
|
+
data[i] = F;
|
|
61
|
+
data.splice(i + 4, 0, data[i + 3]);
|
|
62
|
+
scalePoints(data, scaleX, scaleY, i, 2);
|
|
63
|
+
i += 4 + 1;
|
|
64
|
+
len += 1;
|
|
65
|
+
break;
|
|
66
|
+
case U:
|
|
67
|
+
scalePoints(data, scaleX, scaleY, i, 2);
|
|
68
|
+
i += 6;
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
scalePoints(data, scaleX, scaleY, start, pointCount) {
|
|
74
|
+
for (let i = pointCount ? start + 1 : 0, end = pointCount ? i + pointCount * 2 : data.length; i < end; i += 2) {
|
|
75
|
+
data[i] *= scaleX;
|
|
76
|
+
data[i + 1] *= scaleY;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
const { scalePoints } = PathScaler;
|
|
81
|
+
|
|
82
|
+
const matrix = MatrixHelper.get();
|
|
83
|
+
function scaleResize(leaf, scaleX, scaleY) {
|
|
84
|
+
if (leaf.pathInputed) {
|
|
85
|
+
scaleResizePath(leaf, scaleX, scaleY);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
if (scaleX !== 1)
|
|
89
|
+
leaf.width *= scaleX;
|
|
90
|
+
if (scaleY !== 1)
|
|
91
|
+
leaf.height *= scaleY;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
function scaleResizeFontSize(leaf, scaleX, scaleY) {
|
|
95
|
+
const { width, height } = leaf.__localBoxBounds;
|
|
96
|
+
if (scaleX !== 1) {
|
|
97
|
+
leaf.fontSize *= scaleX;
|
|
98
|
+
leaf.y -= height * (scaleX - scaleY) / 2;
|
|
99
|
+
}
|
|
100
|
+
else if (scaleY !== 1) {
|
|
101
|
+
leaf.fontSize *= scaleY;
|
|
102
|
+
leaf.x -= width * (scaleY - scaleX) / 2;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
function scaleResizePath(leaf, scaleX, scaleY) {
|
|
106
|
+
PathScaler.scale(leaf.__.path, scaleX, scaleY);
|
|
107
|
+
leaf.path = leaf.__.path;
|
|
108
|
+
}
|
|
109
|
+
function scaleResizePoints(leaf, scaleX, scaleY) {
|
|
110
|
+
PathScaler.scalePoints(leaf.__.points, scaleX, scaleY);
|
|
111
|
+
leaf.points = leaf.__.points;
|
|
112
|
+
}
|
|
113
|
+
function scaleResizeGroup(group, scaleX, scaleY) {
|
|
114
|
+
const { children } = group;
|
|
115
|
+
for (let i = 0; i < children.length; i++) {
|
|
116
|
+
matrix.a = scaleX;
|
|
117
|
+
matrix.d = scaleY;
|
|
118
|
+
children[i].transform(matrix, true);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
Leaf.prototype.scaleResize = function (scaleX, scaleY = scaleX, noResize) {
|
|
123
|
+
const data = this;
|
|
124
|
+
if (noResize || (data.editConfig && data.editConfig.editSize === 'scale')) {
|
|
125
|
+
data.scaleX *= scaleX;
|
|
126
|
+
data.scaleY *= scaleY;
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
if (scaleX < 0)
|
|
130
|
+
data.scaleX *= -1, scaleX = -scaleX;
|
|
131
|
+
if (scaleY < 0)
|
|
132
|
+
data.scaleY *= -1, scaleY = -scaleY;
|
|
133
|
+
this.__scaleResize(scaleX, scaleY);
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
Leaf.prototype.__scaleResize = function (scaleX, scaleY) {
|
|
137
|
+
scaleResize(this, scaleX, scaleY);
|
|
138
|
+
};
|
|
139
|
+
Text.prototype.__scaleResize = function (scaleX, scaleY) {
|
|
140
|
+
if (this.__.__autoSize && (this.__.resizeFontSize || (this.editConfig && this.editConfig.editSize === 'font-size'))) {
|
|
141
|
+
scaleResizeFontSize(this, scaleX, scaleY);
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
scaleResize(this, scaleX, scaleY);
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
Path.prototype.__scaleResize = function (scaleX, scaleY) {
|
|
148
|
+
scaleResizePath(this, scaleX, scaleY);
|
|
149
|
+
};
|
|
150
|
+
Line.prototype.__scaleResize = function (scaleX, scaleY) {
|
|
151
|
+
if (this.pathInputed) {
|
|
152
|
+
scaleResizePath(this, scaleX, scaleY);
|
|
153
|
+
}
|
|
154
|
+
else if (this.points) {
|
|
155
|
+
scaleResizePoints(this, scaleX, scaleY);
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
this.width *= scaleX;
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
Polygon.prototype.__scaleResize = function (scaleX, scaleY) {
|
|
162
|
+
if (this.pathInputed) {
|
|
163
|
+
scaleResizePath(this, scaleX, scaleY);
|
|
164
|
+
}
|
|
165
|
+
else if (this.points) {
|
|
166
|
+
scaleResizePoints(this, scaleX, scaleY);
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
scaleResize(this, scaleX, scaleY);
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
Group.prototype.__scaleResize = function (scaleX, scaleY) {
|
|
173
|
+
scaleResizeGroup(this, scaleX, scaleY);
|
|
174
|
+
};
|
|
175
|
+
Box.prototype.__scaleResize = function (scaleX, scaleY) {
|
|
176
|
+
if (this.__.__autoSize && this.children.length) {
|
|
177
|
+
scaleResizeGroup(this, scaleX, scaleY);
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
scaleResize(this, scaleX, scaleY);
|
|
181
|
+
if (this.__.resizeChildren)
|
|
182
|
+
scaleResizeGroup(this, scaleX, scaleY);
|
|
183
|
+
}
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
export { PathScaler, scaleResize, scaleResizeFontSize, scaleResizeGroup, scaleResizePath, scaleResizePoints };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{PathCommandMap as e,MatrixHelper as t,Leaf as i,Text as s,Path as o,Line as n,Polygon as a,Group as c,Box as h}from"@leafer-ui/draw";const{M:_,L:r,C:l,Q:p,Z:f,N:u,D:z,X:d,G:b,F:g,O:k,P:y,U:R}=e,S={scale(e,t,i){if(!e)return;let s,o=0,n=e.length;for(;o<n;)switch(s=e[o],s){case _:case r:C(e,t,i,o,1),o+=3;break;case l:C(e,t,i,o,3),o+=7;break;case p:C(e,t,i,o,2),o+=5;break;case f:o+=1;break;case u:C(e,t,i,o,2),o+=5;break;case z:C(e,t,i,o,2),o+=9;break;case d:C(e,t,i,o,2),o+=6;break;case b:C(e,t,i,o,2),o+=9;break;case g:C(e,t,i,o,2),o+=5;break;case k:e[o]=b,e.splice(o+4,0,e[o+3],0),C(e,t,i,o,2),o+=9,n+=2;break;case y:e[o]=g,e.splice(o+4,0,e[o+3]),C(e,t,i,o,2),o+=5,n+=1;break;case R:C(e,t,i,o,2),o+=6}},scalePoints(e,t,i,s,o){for(let n=o?s+1:0,a=o?n+2*o:e.length;n<a;n+=2)e[n]*=t,e[n+1]*=i}},{scalePoints:C}=S,w=t.get();function P(e,t,i){e.pathInputed?x(e,t,i):(1!==t&&(e.width*=t),1!==i&&(e.height*=i))}function m(e,t,i){const{width:s,height:o}=e.__localBoxBounds;1!==t?(e.fontSize*=t,e.y-=o*(t-i)/2):1!==i&&(e.fontSize*=i,e.x-=s*(i-t)/2)}function x(e,t,i){S.scale(e.__.path,t,i),e.path=e.__.path}function I(e,t,i){S.scalePoints(e.__.points,t,i),e.points=e.__.points}function X(e,t,i){const{children:s}=e;for(let e=0;e<s.length;e++)w.a=t,w.d=i,s[e].transform(w,!0)}i.prototype.scaleResize=function(e,t=e,i){const s=this;i||s.editConfig&&"scale"===s.editConfig.editSize?(s.scaleX*=e,s.scaleY*=t):(e<0&&(s.scaleX*=-1,e=-e),t<0&&(s.scaleY*=-1,t=-t),this.__scaleResize(e,t))},i.prototype.__scaleResize=function(e,t){P(this,e,t)},s.prototype.__scaleResize=function(e,t){this.__.__autoSize&&(this.__.resizeFontSize||this.editConfig&&"font-size"===this.editConfig.editSize)?m(this,e,t):P(this,e,t)},o.prototype.__scaleResize=function(e,t){x(this,e,t)},n.prototype.__scaleResize=function(e,t){this.pathInputed?x(this,e,t):this.points?I(this,e,t):this.width*=e},a.prototype.__scaleResize=function(e,t){this.pathInputed?x(this,e,t):this.points?I(this,e,t):P(this,e,t)},c.prototype.__scaleResize=function(e,t){X(this,e,t)},h.prototype.__scaleResize=function(e,t){this.__.__autoSize&&this.children.length?X(this,e,t):(P(this,e,t),this.__.resizeChildren&&X(this,e,t))};export{S as PathScaler,P as scaleResize,m as scaleResizeFontSize,X as scaleResizeGroup,x as scaleResizePath,I as scaleResizePoints};
|
package/dist/resize.js
ADDED
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
this.LeaferIN = this.LeaferIN || {};
|
|
2
|
+
this.LeaferIN.resize = (function (exports, draw) {
|
|
3
|
+
'use strict';
|
|
4
|
+
|
|
5
|
+
const { M, L, C, Q, Z, N, D, X, G, F, O, P, U } = draw.PathCommandMap;
|
|
6
|
+
const PathScaler = {
|
|
7
|
+
scale(data, scaleX, scaleY) {
|
|
8
|
+
if (!data)
|
|
9
|
+
return;
|
|
10
|
+
let command;
|
|
11
|
+
let i = 0, len = data.length;
|
|
12
|
+
while (i < len) {
|
|
13
|
+
command = data[i];
|
|
14
|
+
switch (command) {
|
|
15
|
+
case M:
|
|
16
|
+
scalePoints(data, scaleX, scaleY, i, 1);
|
|
17
|
+
i += 3;
|
|
18
|
+
break;
|
|
19
|
+
case L:
|
|
20
|
+
scalePoints(data, scaleX, scaleY, i, 1);
|
|
21
|
+
i += 3;
|
|
22
|
+
break;
|
|
23
|
+
case C:
|
|
24
|
+
scalePoints(data, scaleX, scaleY, i, 3);
|
|
25
|
+
i += 7;
|
|
26
|
+
break;
|
|
27
|
+
case Q:
|
|
28
|
+
scalePoints(data, scaleX, scaleY, i, 2);
|
|
29
|
+
i += 5;
|
|
30
|
+
break;
|
|
31
|
+
case Z:
|
|
32
|
+
i += 1;
|
|
33
|
+
break;
|
|
34
|
+
case N:
|
|
35
|
+
scalePoints(data, scaleX, scaleY, i, 2);
|
|
36
|
+
i += 5;
|
|
37
|
+
break;
|
|
38
|
+
case D:
|
|
39
|
+
scalePoints(data, scaleX, scaleY, i, 2);
|
|
40
|
+
i += 9;
|
|
41
|
+
break;
|
|
42
|
+
case X:
|
|
43
|
+
scalePoints(data, scaleX, scaleY, i, 2);
|
|
44
|
+
i += 6;
|
|
45
|
+
break;
|
|
46
|
+
case G:
|
|
47
|
+
scalePoints(data, scaleX, scaleY, i, 2);
|
|
48
|
+
i += 9;
|
|
49
|
+
break;
|
|
50
|
+
case F:
|
|
51
|
+
scalePoints(data, scaleX, scaleY, i, 2);
|
|
52
|
+
i += 5;
|
|
53
|
+
break;
|
|
54
|
+
case O:
|
|
55
|
+
data[i] = G;
|
|
56
|
+
data.splice(i + 4, 0, data[i + 3], 0);
|
|
57
|
+
scalePoints(data, scaleX, scaleY, i, 2);
|
|
58
|
+
i += 7 + 2;
|
|
59
|
+
len += 2;
|
|
60
|
+
break;
|
|
61
|
+
case P:
|
|
62
|
+
data[i] = F;
|
|
63
|
+
data.splice(i + 4, 0, data[i + 3]);
|
|
64
|
+
scalePoints(data, scaleX, scaleY, i, 2);
|
|
65
|
+
i += 4 + 1;
|
|
66
|
+
len += 1;
|
|
67
|
+
break;
|
|
68
|
+
case U:
|
|
69
|
+
scalePoints(data, scaleX, scaleY, i, 2);
|
|
70
|
+
i += 6;
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
scalePoints(data, scaleX, scaleY, start, pointCount) {
|
|
76
|
+
for (let i = pointCount ? start + 1 : 0, end = pointCount ? i + pointCount * 2 : data.length; i < end; i += 2) {
|
|
77
|
+
data[i] *= scaleX;
|
|
78
|
+
data[i + 1] *= scaleY;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
const { scalePoints } = PathScaler;
|
|
83
|
+
|
|
84
|
+
const matrix = draw.MatrixHelper.get();
|
|
85
|
+
function scaleResize(leaf, scaleX, scaleY) {
|
|
86
|
+
if (leaf.pathInputed) {
|
|
87
|
+
scaleResizePath(leaf, scaleX, scaleY);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
if (scaleX !== 1)
|
|
91
|
+
leaf.width *= scaleX;
|
|
92
|
+
if (scaleY !== 1)
|
|
93
|
+
leaf.height *= scaleY;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
function scaleResizeFontSize(leaf, scaleX, scaleY) {
|
|
97
|
+
const { width, height } = leaf.__localBoxBounds;
|
|
98
|
+
if (scaleX !== 1) {
|
|
99
|
+
leaf.fontSize *= scaleX;
|
|
100
|
+
leaf.y -= height * (scaleX - scaleY) / 2;
|
|
101
|
+
}
|
|
102
|
+
else if (scaleY !== 1) {
|
|
103
|
+
leaf.fontSize *= scaleY;
|
|
104
|
+
leaf.x -= width * (scaleY - scaleX) / 2;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function scaleResizePath(leaf, scaleX, scaleY) {
|
|
108
|
+
PathScaler.scale(leaf.__.path, scaleX, scaleY);
|
|
109
|
+
leaf.path = leaf.__.path;
|
|
110
|
+
}
|
|
111
|
+
function scaleResizePoints(leaf, scaleX, scaleY) {
|
|
112
|
+
PathScaler.scalePoints(leaf.__.points, scaleX, scaleY);
|
|
113
|
+
leaf.points = leaf.__.points;
|
|
114
|
+
}
|
|
115
|
+
function scaleResizeGroup(group, scaleX, scaleY) {
|
|
116
|
+
const { children } = group;
|
|
117
|
+
for (let i = 0; i < children.length; i++) {
|
|
118
|
+
matrix.a = scaleX;
|
|
119
|
+
matrix.d = scaleY;
|
|
120
|
+
children[i].transform(matrix, true);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
draw.Leaf.prototype.scaleResize = function (scaleX, scaleY = scaleX, noResize) {
|
|
125
|
+
const data = this;
|
|
126
|
+
if (noResize || (data.editConfig && data.editConfig.editSize === 'scale')) {
|
|
127
|
+
data.scaleX *= scaleX;
|
|
128
|
+
data.scaleY *= scaleY;
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
if (scaleX < 0)
|
|
132
|
+
data.scaleX *= -1, scaleX = -scaleX;
|
|
133
|
+
if (scaleY < 0)
|
|
134
|
+
data.scaleY *= -1, scaleY = -scaleY;
|
|
135
|
+
this.__scaleResize(scaleX, scaleY);
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
draw.Leaf.prototype.__scaleResize = function (scaleX, scaleY) {
|
|
139
|
+
scaleResize(this, scaleX, scaleY);
|
|
140
|
+
};
|
|
141
|
+
draw.Text.prototype.__scaleResize = function (scaleX, scaleY) {
|
|
142
|
+
if (this.__.__autoSize && (this.__.resizeFontSize || (this.editConfig && this.editConfig.editSize === 'font-size'))) {
|
|
143
|
+
scaleResizeFontSize(this, scaleX, scaleY);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
scaleResize(this, scaleX, scaleY);
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
draw.Path.prototype.__scaleResize = function (scaleX, scaleY) {
|
|
150
|
+
scaleResizePath(this, scaleX, scaleY);
|
|
151
|
+
};
|
|
152
|
+
draw.Line.prototype.__scaleResize = function (scaleX, scaleY) {
|
|
153
|
+
if (this.pathInputed) {
|
|
154
|
+
scaleResizePath(this, scaleX, scaleY);
|
|
155
|
+
}
|
|
156
|
+
else if (this.points) {
|
|
157
|
+
scaleResizePoints(this, scaleX, scaleY);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
this.width *= scaleX;
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
draw.Polygon.prototype.__scaleResize = function (scaleX, scaleY) {
|
|
164
|
+
if (this.pathInputed) {
|
|
165
|
+
scaleResizePath(this, scaleX, scaleY);
|
|
166
|
+
}
|
|
167
|
+
else if (this.points) {
|
|
168
|
+
scaleResizePoints(this, scaleX, scaleY);
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
scaleResize(this, scaleX, scaleY);
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
draw.Group.prototype.__scaleResize = function (scaleX, scaleY) {
|
|
175
|
+
scaleResizeGroup(this, scaleX, scaleY);
|
|
176
|
+
};
|
|
177
|
+
draw.Box.prototype.__scaleResize = function (scaleX, scaleY) {
|
|
178
|
+
if (this.__.__autoSize && this.children.length) {
|
|
179
|
+
scaleResizeGroup(this, scaleX, scaleY);
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
scaleResize(this, scaleX, scaleY);
|
|
183
|
+
if (this.__.resizeChildren)
|
|
184
|
+
scaleResizeGroup(this, scaleX, scaleY);
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
exports.PathScaler = PathScaler;
|
|
189
|
+
exports.scaleResize = scaleResize;
|
|
190
|
+
exports.scaleResizeFontSize = scaleResizeFontSize;
|
|
191
|
+
exports.scaleResizeGroup = scaleResizeGroup;
|
|
192
|
+
exports.scaleResizePath = scaleResizePath;
|
|
193
|
+
exports.scaleResizePoints = scaleResizePoints;
|
|
194
|
+
|
|
195
|
+
return exports;
|
|
196
|
+
|
|
197
|
+
})({}, LeaferUI);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var e=require("@leafer-ui/draw");const{M:t,L:s,C:i,Q:a,Z:o,N:n,D:c,X:h,G:r,F:l,O:p,P:_,U:f}=e.PathCommandMap,u={scale(e,u,d){if(!e)return;let R,g=0,b=e.length;for(;g<b;)switch(R=e[g],R){case t:case s:z(e,u,d,g,1),g+=3;break;case i:z(e,u,d,g,3),g+=7;break;case a:z(e,u,d,g,2),g+=5;break;case o:g+=1;break;case n:z(e,u,d,g,2),g+=5;break;case c:z(e,u,d,g,2),g+=9;break;case h:z(e,u,d,g,2),g+=6;break;case r:z(e,u,d,g,2),g+=9;break;case l:z(e,u,d,g,2),g+=5;break;case p:e[g]=r,e.splice(g+4,0,e[g+3],0),z(e,u,d,g,2),g+=9,b+=2;break;case _:e[g]=l,e.splice(g+4,0,e[g+3]),z(e,u,d,g,2),g+=5,b+=1;break;case f:z(e,u,d,g,2),g+=6}},scalePoints(e,t,s,i,a){for(let o=a?i+1:0,n=a?o+2*a:e.length;o<n;o+=2)e[o]*=t,e[o+1]*=s}},{scalePoints:z}=u,d=e.MatrixHelper.get();function R(e,t,s){e.pathInputed?b(e,t,s):(1!==t&&(e.width*=t),1!==s&&(e.height*=s))}function g(e,t,s){const{width:i,height:a}=e.__localBoxBounds;1!==t?(e.fontSize*=t,e.y-=a*(t-s)/2):1!==s&&(e.fontSize*=s,e.x-=i*(s-t)/2)}function b(e,t,s){u.scale(e.__.path,t,s),e.path=e.__.path}function k(e,t,s){u.scalePoints(e.__.points,t,s),e.points=e.__.points}function x(e,t,s){const{children:i}=e;for(let e=0;e<i.length;e++)d.a=t,d.d=s,i[e].transform(d,!0)}e.Leaf.prototype.scaleResize=function(e,t=e,s){const i=this;s||i.editConfig&&"scale"===i.editConfig.editSize?(i.scaleX*=e,i.scaleY*=t):(e<0&&(i.scaleX*=-1,e=-e),t<0&&(i.scaleY*=-1,t=-t),this.__scaleResize(e,t))},e.Leaf.prototype.__scaleResize=function(e,t){R(this,e,t)},e.Text.prototype.__scaleResize=function(e,t){this.__.__autoSize&&(this.__.resizeFontSize||this.editConfig&&"font-size"===this.editConfig.editSize)?g(this,e,t):R(this,e,t)},e.Path.prototype.__scaleResize=function(e,t){b(this,e,t)},e.Line.prototype.__scaleResize=function(e,t){this.pathInputed?b(this,e,t):this.points?k(this,e,t):this.width*=e},e.Polygon.prototype.__scaleResize=function(e,t){this.pathInputed?b(this,e,t):this.points?k(this,e,t):R(this,e,t)},e.Group.prototype.__scaleResize=function(e,t){x(this,e,t)},e.Box.prototype.__scaleResize=function(e,t){this.__.__autoSize&&this.children.length?x(this,e,t):(R(this,e,t),this.__.resizeChildren&&x(this,e,t))},exports.PathScaler=u,exports.scaleResize=R,exports.scaleResizeFontSize=g,exports.scaleResizeGroup=x,exports.scaleResizePath=b,exports.scaleResizePoints=k;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
this.LeaferIN=this.LeaferIN||{},this.LeaferIN.resize=function(e,t){"use strict";const{M:s,L:i,C:a,Q:n,Z:o,N:c,D:h,X:r,G:l,F:_,O:p,P:f,U:z}=t.PathCommandMap,u={scale(e,t,u){if(!e)return;let R,g=0,b=e.length;for(;g<b;)switch(R=e[g],R){case s:case i:d(e,t,u,g,1),g+=3;break;case a:d(e,t,u,g,3),g+=7;break;case n:d(e,t,u,g,2),g+=5;break;case o:g+=1;break;case c:d(e,t,u,g,2),g+=5;break;case h:d(e,t,u,g,2),g+=9;break;case r:d(e,t,u,g,2),g+=6;break;case l:d(e,t,u,g,2),g+=9;break;case _:d(e,t,u,g,2),g+=5;break;case p:e[g]=l,e.splice(g+4,0,e[g+3],0),d(e,t,u,g,2),g+=9,b+=2;break;case f:e[g]=_,e.splice(g+4,0,e[g+3]),d(e,t,u,g,2),g+=5,b+=1;break;case z:d(e,t,u,g,2),g+=6}},scalePoints(e,t,s,i,a){for(let n=a?i+1:0,o=a?n+2*a:e.length;n<o;n+=2)e[n]*=t,e[n+1]*=s}},{scalePoints:d}=u,R=t.MatrixHelper.get();function g(e,t,s){e.pathInputed?k(e,t,s):(1!==t&&(e.width*=t),1!==s&&(e.height*=s))}function b(e,t,s){const{width:i,height:a}=e.__localBoxBounds;1!==t?(e.fontSize*=t,e.y-=a*(t-s)/2):1!==s&&(e.fontSize*=s,e.x-=i*(s-t)/2)}function k(e,t,s){u.scale(e.__.path,t,s),e.path=e.__.path}function y(e,t,s){u.scalePoints(e.__.points,t,s),e.points=e.__.points}function P(e,t,s){const{children:i}=e;for(let e=0;e<i.length;e++)R.a=t,R.d=s,i[e].transform(R,!0)}return t.Leaf.prototype.scaleResize=function(e,t=e,s){const i=this;s||i.editConfig&&"scale"===i.editConfig.editSize?(i.scaleX*=e,i.scaleY*=t):(e<0&&(i.scaleX*=-1,e=-e),t<0&&(i.scaleY*=-1,t=-t),this.__scaleResize(e,t))},t.Leaf.prototype.__scaleResize=function(e,t){g(this,e,t)},t.Text.prototype.__scaleResize=function(e,t){this.__.__autoSize&&(this.__.resizeFontSize||this.editConfig&&"font-size"===this.editConfig.editSize)?b(this,e,t):g(this,e,t)},t.Path.prototype.__scaleResize=function(e,t){k(this,e,t)},t.Line.prototype.__scaleResize=function(e,t){this.pathInputed?k(this,e,t):this.points?y(this,e,t):this.width*=e},t.Polygon.prototype.__scaleResize=function(e,t){this.pathInputed?k(this,e,t):this.points?y(this,e,t):g(this,e,t)},t.Group.prototype.__scaleResize=function(e,t){P(this,e,t)},t.Box.prototype.__scaleResize=function(e,t){this.__.__autoSize&&this.children.length?P(this,e,t):(g(this,e,t),this.__.resizeChildren&&P(this,e,t))},e.PathScaler=u,e.scaleResize=g,e.scaleResizeFontSize=b,e.scaleResizeGroup=P,e.scaleResizePath=k,e.scaleResizePoints=y,e}({},LeaferUI);
|
package/package.json
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@leafer-in/resize",
|
|
3
|
+
"version": "1.0.0-rc.26",
|
|
4
|
+
"description": "@leafer-in/resize",
|
|
5
|
+
"author": "Chao (Leafer) Wan",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"main": "dist/resize.esm.js",
|
|
9
|
+
"exports": {
|
|
10
|
+
"import": "./dist/resize.esm.js",
|
|
11
|
+
"require": "./dist/resize.cjs",
|
|
12
|
+
"types": "./types/index.d.ts"
|
|
13
|
+
},
|
|
14
|
+
"types": "types/index.d.ts",
|
|
15
|
+
"unpkg": "dist/resize.js",
|
|
16
|
+
"jsdelivr": "dist/resize.js",
|
|
17
|
+
"files": [
|
|
18
|
+
"src",
|
|
19
|
+
"types",
|
|
20
|
+
"dist"
|
|
21
|
+
],
|
|
22
|
+
"repository": {
|
|
23
|
+
"type": "git",
|
|
24
|
+
"url": "https://github.com/leaferjs/in.git"
|
|
25
|
+
},
|
|
26
|
+
"homepage": "https://github.com/leaferjs/in/tree/main/packages/resize",
|
|
27
|
+
"bugs": "https://github.com/leaferjs/in/issues",
|
|
28
|
+
"keywords": [
|
|
29
|
+
"leafer resize",
|
|
30
|
+
"leafer-resize",
|
|
31
|
+
"leafer-in",
|
|
32
|
+
"resize",
|
|
33
|
+
"leafer-ui",
|
|
34
|
+
"leaferjs"
|
|
35
|
+
],
|
|
36
|
+
"dependencies": {
|
|
37
|
+
"@leafer-ui/draw": "1.0.0-rc.26",
|
|
38
|
+
"@leafer-ui/interface": "1.0.0-rc.26"
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { IPathCommandData } from '@leafer-ui/interface'
|
|
2
|
+
|
|
3
|
+
import { PathCommandMap as Command } from '@leafer-ui/draw'
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
const { M, L, C, Q, Z, N, D, X, G, F, O, P, U } = Command
|
|
7
|
+
|
|
8
|
+
export const PathScaler = {
|
|
9
|
+
|
|
10
|
+
scale(data: IPathCommandData, scaleX: number, scaleY: number): void {
|
|
11
|
+
if (!data) return
|
|
12
|
+
|
|
13
|
+
let command: number
|
|
14
|
+
let i = 0, len = data.length
|
|
15
|
+
|
|
16
|
+
while (i < len) {
|
|
17
|
+
command = data[i]
|
|
18
|
+
switch (command) {
|
|
19
|
+
case M: //moveto(x, y)
|
|
20
|
+
scalePoints(data, scaleX, scaleY, i, 1)
|
|
21
|
+
i += 3
|
|
22
|
+
break
|
|
23
|
+
case L: //lineto(x, y)
|
|
24
|
+
scalePoints(data, scaleX, scaleY, i, 1)
|
|
25
|
+
i += 3
|
|
26
|
+
break
|
|
27
|
+
case C: //bezierCurveTo(x1, y1, x2, y2, x, y)
|
|
28
|
+
scalePoints(data, scaleX, scaleY, i, 3)
|
|
29
|
+
i += 7
|
|
30
|
+
break
|
|
31
|
+
case Q: //quadraticCurveTo(x1, y1, x, y)
|
|
32
|
+
scalePoints(data, scaleX, scaleY, i, 2)
|
|
33
|
+
i += 5
|
|
34
|
+
break
|
|
35
|
+
case Z: //closepath()
|
|
36
|
+
i += 1
|
|
37
|
+
break
|
|
38
|
+
|
|
39
|
+
// canvas command
|
|
40
|
+
|
|
41
|
+
case N: // rect(x, y, width, height)
|
|
42
|
+
scalePoints(data, scaleX, scaleY, i, 2)
|
|
43
|
+
i += 5
|
|
44
|
+
break
|
|
45
|
+
case D: // roundRect(x, y, width, height, radius1, radius2, radius3, radius4)
|
|
46
|
+
scalePoints(data, scaleX, scaleY, i, 2)
|
|
47
|
+
i += 9
|
|
48
|
+
break
|
|
49
|
+
case X: // simple roundRect(x, y, width, height, radius)
|
|
50
|
+
scalePoints(data, scaleX, scaleY, i, 2)
|
|
51
|
+
i += 6
|
|
52
|
+
break
|
|
53
|
+
case G: // ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise)
|
|
54
|
+
scalePoints(data, scaleX, scaleY, i, 2)
|
|
55
|
+
i += 9
|
|
56
|
+
break
|
|
57
|
+
case F: // simple ellipse(x, y, radiusX, radiusY)
|
|
58
|
+
scalePoints(data, scaleX, scaleY, i, 2)
|
|
59
|
+
i += 5
|
|
60
|
+
break
|
|
61
|
+
case O: // arc(x, y, radius, startAngle, endAngle, anticlockwise)
|
|
62
|
+
data[i] = G // to ellipse
|
|
63
|
+
data.splice(i + 4, 0, data[i + 3], 0)
|
|
64
|
+
scalePoints(data, scaleX, scaleY, i, 2)
|
|
65
|
+
i += 7 + 2
|
|
66
|
+
len += 2
|
|
67
|
+
break
|
|
68
|
+
case P: // simple arc(x, y, radius)
|
|
69
|
+
data[i] = F // to simple ellipse
|
|
70
|
+
data.splice(i + 4, 0, data[i + 3])
|
|
71
|
+
scalePoints(data, scaleX, scaleY, i, 2)
|
|
72
|
+
i += 4 + 1
|
|
73
|
+
len += 1
|
|
74
|
+
break
|
|
75
|
+
case U: // arcTo(x1, y1, x2, y2, radius)
|
|
76
|
+
scalePoints(data, scaleX, scaleY, i, 2)
|
|
77
|
+
i += 6
|
|
78
|
+
break
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
},
|
|
83
|
+
|
|
84
|
+
scalePoints(data: IPathCommandData, scaleX: number, scaleY: number, start?: number, pointCount?: number): void {
|
|
85
|
+
for (let i = pointCount ? start + 1 : 0, end = pointCount ? i + pointCount * 2 : data.length; i < end; i += 2) {
|
|
86
|
+
data[i] *= scaleX
|
|
87
|
+
data[i + 1] *= scaleY
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const { scalePoints } = PathScaler
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
export { PathScaler } from './PathScaler'
|
|
2
|
+
export { scaleResize, scaleResizeGroup, scaleResizeFontSize, scaleResizePath, scaleResizePoints } from './scaler'
|
|
3
|
+
|
|
4
|
+
import { Leaf, Path, Line, Text, Polygon, Group, Box, UI } from '@leafer-ui/draw'
|
|
5
|
+
|
|
6
|
+
import { scaleResize, scaleResizeFontSize, scaleResizeGroup, scaleResizePath, scaleResizePoints } from './scaler'
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
// leaf
|
|
10
|
+
|
|
11
|
+
Leaf.prototype.scaleResize = function (scaleX: number, scaleY = scaleX, noResize?: boolean): void {
|
|
12
|
+
const data = this as UI
|
|
13
|
+
if (noResize || (data.editConfig && data.editConfig.editSize === 'scale')) {
|
|
14
|
+
data.scaleX *= scaleX
|
|
15
|
+
data.scaleY *= scaleY
|
|
16
|
+
} else {
|
|
17
|
+
if (scaleX < 0) data.scaleX *= -1, scaleX = -scaleX
|
|
18
|
+
if (scaleY < 0) data.scaleY *= -1, scaleY = -scaleY
|
|
19
|
+
this.__scaleResize(scaleX, scaleY)
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
Leaf.prototype.__scaleResize = function (scaleX: number, scaleY: number): void {
|
|
25
|
+
scaleResize(this, scaleX, scaleY)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
Text.prototype.__scaleResize = function (scaleX: number, scaleY: number): void {
|
|
29
|
+
if (this.__.__autoSize && (this.__.resizeFontSize || (this.editConfig && this.editConfig.editSize === 'font-size'))) {
|
|
30
|
+
scaleResizeFontSize(this, scaleX, scaleY)
|
|
31
|
+
} else {
|
|
32
|
+
scaleResize(this, scaleX, scaleY)
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
Path.prototype.__scaleResize = function (scaleX: number, scaleY: number): void {
|
|
37
|
+
scaleResizePath(this, scaleX, scaleY)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
Line.prototype.__scaleResize = function (scaleX: number, scaleY: number): void {
|
|
41
|
+
if (this.pathInputed) {
|
|
42
|
+
scaleResizePath(this, scaleX, scaleY)
|
|
43
|
+
} else if (this.points) {
|
|
44
|
+
scaleResizePoints(this, scaleX, scaleY)
|
|
45
|
+
} else {
|
|
46
|
+
this.width *= scaleX
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
Polygon.prototype.__scaleResize = function (scaleX: number, scaleY: number): void {
|
|
51
|
+
if (this.pathInputed) {
|
|
52
|
+
scaleResizePath(this, scaleX, scaleY)
|
|
53
|
+
} else if (this.points) {
|
|
54
|
+
scaleResizePoints(this, scaleX, scaleY)
|
|
55
|
+
} else {
|
|
56
|
+
scaleResize(this, scaleX, scaleY)
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
// group
|
|
62
|
+
|
|
63
|
+
Group.prototype.__scaleResize = function (scaleX: number, scaleY: number): void {
|
|
64
|
+
scaleResizeGroup(this, scaleX, scaleY)
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
Box.prototype.__scaleResize = function (scaleX: number, scaleY: number): void {
|
|
68
|
+
if (this.__.__autoSize && this.children.length) {
|
|
69
|
+
scaleResizeGroup(this, scaleX, scaleY)
|
|
70
|
+
} else {
|
|
71
|
+
scaleResize(this, scaleX, scaleY)
|
|
72
|
+
if (this.__.resizeChildren) scaleResizeGroup(this, scaleX, scaleY)
|
|
73
|
+
}
|
|
74
|
+
}
|
package/src/scaler.ts
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { IBranch, ILeaf, ILine, IPolygon, IText } from '@leafer-ui/interface'
|
|
2
|
+
import { MatrixHelper } from '@leafer-ui/draw'
|
|
3
|
+
|
|
4
|
+
import { PathScaler } from './PathScaler'
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
const matrix = MatrixHelper.get()
|
|
8
|
+
|
|
9
|
+
export function scaleResize(leaf: ILeaf, scaleX: number, scaleY: number): void {
|
|
10
|
+
if (leaf.pathInputed) {
|
|
11
|
+
scaleResizePath(leaf, scaleX, scaleY)
|
|
12
|
+
} else {
|
|
13
|
+
// fix: Text / Box auto width / height, need check scale === 1
|
|
14
|
+
if (scaleX !== 1) leaf.width *= scaleX
|
|
15
|
+
if (scaleY !== 1) leaf.height *= scaleY
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function scaleResizeFontSize(leaf: IText, scaleX: number, scaleY: number): void {
|
|
20
|
+
const { width, height } = leaf.__localBoxBounds
|
|
21
|
+
if (scaleX !== 1) {
|
|
22
|
+
leaf.fontSize *= scaleX
|
|
23
|
+
leaf.y -= height * (scaleX - scaleY) / 2
|
|
24
|
+
} else if (scaleY !== 1) {
|
|
25
|
+
leaf.fontSize *= scaleY
|
|
26
|
+
leaf.x -= width * (scaleY - scaleX) / 2
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function scaleResizePath(leaf: ILeaf, scaleX: number, scaleY: number): void {
|
|
31
|
+
PathScaler.scale(leaf.__.path, scaleX, scaleY)
|
|
32
|
+
leaf.path = leaf.__.path
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export function scaleResizePoints(leaf: ILine | IPolygon, scaleX: number, scaleY: number): void {
|
|
36
|
+
PathScaler.scalePoints(leaf.__.points, scaleX, scaleY)
|
|
37
|
+
leaf.points = leaf.__.points
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
export function scaleResizeGroup(group: IBranch, scaleX: number, scaleY: number): void {
|
|
42
|
+
const { children } = group
|
|
43
|
+
for (let i = 0; i < children.length; i++) {
|
|
44
|
+
matrix.a = scaleX // must update
|
|
45
|
+
matrix.d = scaleY
|
|
46
|
+
children[i].transform(matrix, true)
|
|
47
|
+
}
|
|
48
|
+
}
|
package/types/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { IPathCommandData, ILeaf, IText, ILine, IPolygon, IBranch } from '@leafer-ui/interface';
|
|
2
|
+
|
|
3
|
+
declare const PathScaler: {
|
|
4
|
+
scale(data: IPathCommandData, scaleX: number, scaleY: number): void;
|
|
5
|
+
scalePoints(data: IPathCommandData, scaleX: number, scaleY: number, start?: number, pointCount?: number): void;
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
declare function scaleResize(leaf: ILeaf, scaleX: number, scaleY: number): void;
|
|
9
|
+
declare function scaleResizeFontSize(leaf: IText, scaleX: number, scaleY: number): void;
|
|
10
|
+
declare function scaleResizePath(leaf: ILeaf, scaleX: number, scaleY: number): void;
|
|
11
|
+
declare function scaleResizePoints(leaf: ILine | IPolygon, scaleX: number, scaleY: number): void;
|
|
12
|
+
declare function scaleResizeGroup(group: IBranch, scaleX: number, scaleY: number): void;
|
|
13
|
+
|
|
14
|
+
export { PathScaler, scaleResize, scaleResizeFontSize, scaleResizeGroup, scaleResizePath, scaleResizePoints };
|