@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 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
@@ -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
+ }
@@ -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 };