@flighthq/shape 0.3.0-next.1530.70058bd → 0.3.0-next.1560.03a2b36
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/dist/contract.d.ts +1 -0
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +1 -0
- package/dist/contract.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/scale9ShapeCommands.d.ts +3 -0
- package/dist/scale9ShapeCommands.d.ts.map +1 -0
- package/dist/scale9ShapeCommands.js +119 -0
- package/dist/scale9ShapeCommands.js.map +1 -0
- package/package.json +6 -6
- package/src/scale9ShapeCommands.test.ts +64 -0
package/dist/contract.d.ts
CHANGED
package/dist/contract.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC"}
|
package/dist/contract.js
CHANGED
package/dist/contract.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
export { PathCommand, appendShapeArc, appendShapeArcTo, appendShapeBeginTextureFill, appendShapeBeginFill, appendShapeBeginGradientFill, appendShapeCircle, appendShapeCubicCurveTo, appendShapeCurveTo, appendShapeDrawTriangles, appendShapeEllipse, appendShapeEndFill, appendShapeGeometryCommand, appendShapeLineTextureStyle, appendShapeLineGradientStyle, appendShapeLineStyle, appendShapeLineTo, appendShapeMoveTo, appendShapePath, appendShapePolygon, appendShapePolyline, appendShapeRectangle, appendShapeRoundRectangle, appendShapeRoundRectangleVarying, clearShapeCommands, computeShapeLocalBoundsRectangle, copyShapeCommands, createScale9Shape, createShape, enableShapeHitTesting, getPathCommandOperandCount, getShapeBounds, getShapeCommandCount, getShapeFillRegions, getShapeStrokeRegions, getShapeStrokeOutlineRegions, hasNonSolidShapeFill, hasNonSolidShapeStroke, hasShapeFill, hitTestShapeCommandPoint, isShapeEmpty, registerShapeHitTestCommand, } from './contract';
|
|
2
|
+
export * from './scale9ShapeCommands';
|
|
2
3
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,2BAA2B,EAC3B,oBAAoB,EACpB,4BAA4B,EAC5B,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,EAClB,wBAAwB,EACxB,kBAAkB,EAClB,kBAAkB,EAClB,0BAA0B,EAC1B,2BAA2B,EAC3B,4BAA4B,EAC5B,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,yBAAyB,EACzB,gCAAgC,EAChC,kBAAkB,EAClB,gCAAgC,EAChC,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACX,qBAAqB,EACrB,0BAA0B,EAC1B,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,4BAA4B,EAC5B,oBAAoB,EACpB,sBAAsB,EACtB,YAAY,EACZ,wBAAwB,EACxB,YAAY,EACZ,2BAA2B,GAC5B,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,2BAA2B,EAC3B,oBAAoB,EACpB,4BAA4B,EAC5B,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,EAClB,wBAAwB,EACxB,kBAAkB,EAClB,kBAAkB,EAClB,0BAA0B,EAC1B,2BAA2B,EAC3B,4BAA4B,EAC5B,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,yBAAyB,EACzB,gCAAgC,EAChC,kBAAkB,EAClB,gCAAgC,EAChC,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACX,qBAAqB,EACrB,0BAA0B,EAC1B,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,4BAA4B,EAC5B,oBAAoB,EACpB,sBAAsB,EACtB,YAAY,EACZ,wBAAwB,EACxB,YAAY,EACZ,2BAA2B,GAC5B,MAAM,YAAY,CAAC;AACpB,cAAc,uBAAuB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
export { PathCommand, appendShapeArc, appendShapeArcTo, appendShapeBeginTextureFill, appendShapeBeginFill, appendShapeBeginGradientFill, appendShapeCircle, appendShapeCubicCurveTo, appendShapeCurveTo, appendShapeDrawTriangles, appendShapeEllipse, appendShapeEndFill, appendShapeGeometryCommand, appendShapeLineTextureStyle, appendShapeLineGradientStyle, appendShapeLineStyle, appendShapeLineTo, appendShapeMoveTo, appendShapePath, appendShapePolygon, appendShapePolyline, appendShapeRectangle, appendShapeRoundRectangle, appendShapeRoundRectangleVarying, clearShapeCommands, computeShapeLocalBoundsRectangle, copyShapeCommands, createScale9Shape, createShape, enableShapeHitTesting, getPathCommandOperandCount, getShapeBounds, getShapeCommandCount, getShapeFillRegions, getShapeStrokeRegions, getShapeStrokeOutlineRegions, hasNonSolidShapeFill, hasNonSolidShapeStroke, hasShapeFill, hitTestShapeCommandPoint, isShapeEmpty, registerShapeHitTestCommand, } from './contract';
|
|
2
|
+
export * from './scale9ShapeCommands';
|
|
2
3
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,2BAA2B,EAC3B,oBAAoB,EACpB,4BAA4B,EAC5B,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,EAClB,wBAAwB,EACxB,kBAAkB,EAClB,kBAAkB,EAClB,0BAA0B,EAC1B,2BAA2B,EAC3B,4BAA4B,EAC5B,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,yBAAyB,EACzB,gCAAgC,EAChC,kBAAkB,EAClB,gCAAgC,EAChC,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACX,qBAAqB,EACrB,0BAA0B,EAC1B,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,4BAA4B,EAC5B,oBAAoB,EACpB,sBAAsB,EACtB,YAAY,EACZ,wBAAwB,EACxB,YAAY,EACZ,2BAA2B,GAC5B,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,2BAA2B,EAC3B,oBAAoB,EACpB,4BAA4B,EAC5B,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,EAClB,wBAAwB,EACxB,kBAAkB,EAClB,kBAAkB,EAClB,0BAA0B,EAC1B,2BAA2B,EAC3B,4BAA4B,EAC5B,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,yBAAyB,EACzB,gCAAgC,EAChC,kBAAkB,EAClB,gCAAgC,EAChC,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACX,qBAAqB,EACrB,0BAA0B,EAC1B,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,4BAA4B,EAC5B,oBAAoB,EACpB,sBAAsB,EACtB,YAAY,EACZ,wBAAwB,EACxB,YAAY,EACZ,2BAA2B,GAC5B,MAAM,YAAY,CAAC;AACpB,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scale9ShapeCommands.d.ts","sourceRoot":"","sources":["../src/scale9ShapeCommands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAQhF,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,iBAAiB,EAAE,EACxB,MAAM,EAAE,SAAS,iBAAiB,EAAE,EACpC,MAAM,EAAE,YAAY,GACnB,IAAI,CAsEN"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
// Rewrites a shape's command stream through a nine-slice mapper, so the corners of a scaled shape keep
|
|
2
|
+
// their size while the edges and centre stretch. This is pure command geometry — no renderer, no
|
|
3
|
+
// context — which is why it lives beside the commands rather than in the backend that happens to
|
|
4
|
+
// rasterize the result: every backend that supports nine-slice needs the same rewrite.
|
|
5
|
+
//
|
|
6
|
+
// `out` may be `source`, in which case the rewrite is in place.
|
|
7
|
+
export function mapScale9ShapeCommands(out, source, mapper) {
|
|
8
|
+
if (out !== source) {
|
|
9
|
+
out.length = source.length;
|
|
10
|
+
for (let k = 0; k < source.length; k++)
|
|
11
|
+
out[k] = source[k];
|
|
12
|
+
}
|
|
13
|
+
let i = 0;
|
|
14
|
+
while (i < out.length) {
|
|
15
|
+
const key = out[i];
|
|
16
|
+
const argCount = out[i + 1];
|
|
17
|
+
switch (key) {
|
|
18
|
+
case 'moveTo':
|
|
19
|
+
case 'lineTo':
|
|
20
|
+
out[i + 2] = mapper.mapX(out[i + 2]);
|
|
21
|
+
out[i + 3] = mapper.mapY(out[i + 3]);
|
|
22
|
+
break;
|
|
23
|
+
case 'curveTo':
|
|
24
|
+
out[i + 2] = mapper.mapX(out[i + 2]);
|
|
25
|
+
out[i + 3] = mapper.mapY(out[i + 3]);
|
|
26
|
+
out[i + 4] = mapper.mapX(out[i + 4]);
|
|
27
|
+
out[i + 5] = mapper.mapY(out[i + 5]);
|
|
28
|
+
break;
|
|
29
|
+
case 'cubicCurveTo':
|
|
30
|
+
out[i + 2] = mapper.mapX(out[i + 2]);
|
|
31
|
+
out[i + 3] = mapper.mapY(out[i + 3]);
|
|
32
|
+
out[i + 4] = mapper.mapX(out[i + 4]);
|
|
33
|
+
out[i + 5] = mapper.mapY(out[i + 5]);
|
|
34
|
+
out[i + 6] = mapper.mapX(out[i + 6]);
|
|
35
|
+
out[i + 7] = mapper.mapY(out[i + 7]);
|
|
36
|
+
break;
|
|
37
|
+
case 'drawRectangle':
|
|
38
|
+
case 'drawEllipse': {
|
|
39
|
+
const x = out[i + 2];
|
|
40
|
+
const y = out[i + 3];
|
|
41
|
+
const w = out[i + 4];
|
|
42
|
+
const h = out[i + 5];
|
|
43
|
+
const mx = mapper.mapX(x);
|
|
44
|
+
const my = mapper.mapY(y);
|
|
45
|
+
out[i + 2] = mx;
|
|
46
|
+
out[i + 3] = my;
|
|
47
|
+
out[i + 4] = mapper.mapX(x + w) - mx;
|
|
48
|
+
out[i + 5] = mapper.mapY(y + h) - my;
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
case 'drawRoundRectangle': {
|
|
52
|
+
const x = out[i + 2];
|
|
53
|
+
const y = out[i + 3];
|
|
54
|
+
const w = out[i + 4];
|
|
55
|
+
const h = out[i + 5];
|
|
56
|
+
const mx = mapper.mapX(x);
|
|
57
|
+
const my = mapper.mapY(y);
|
|
58
|
+
out[i + 2] = mx;
|
|
59
|
+
out[i + 3] = my;
|
|
60
|
+
out[i + 4] = mapper.mapX(x + w) - mx;
|
|
61
|
+
out[i + 5] = mapper.mapY(y + h) - my;
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
case 'drawCircle':
|
|
65
|
+
out[i + 2] = mapper.mapX(out[i + 2]);
|
|
66
|
+
out[i + 3] = mapper.mapY(out[i + 3]);
|
|
67
|
+
break;
|
|
68
|
+
case 'drawPath':
|
|
69
|
+
remapPathData(_remappedPathData, out[i + 3], out[i + 2], mapper);
|
|
70
|
+
out[i + 3] = _remappedPathData;
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
i += argCount + 2;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function remapPathData(out, source, cmds, mapper) {
|
|
77
|
+
if (out !== source) {
|
|
78
|
+
out.length = source.length;
|
|
79
|
+
for (let k = 0; k < source.length; k++)
|
|
80
|
+
out[k] = source[k];
|
|
81
|
+
}
|
|
82
|
+
let di = 0;
|
|
83
|
+
for (const pc of cmds) {
|
|
84
|
+
switch (pc) {
|
|
85
|
+
case 1: // MOVE_TO [x, y]
|
|
86
|
+
case 2: // LINE_TO [x, y]
|
|
87
|
+
out[di] = mapper.mapX(out[di]);
|
|
88
|
+
out[di + 1] = mapper.mapY(out[di + 1]);
|
|
89
|
+
di += 2;
|
|
90
|
+
break;
|
|
91
|
+
case 3: // CURVE_TO [cx, cy, ax, ay]
|
|
92
|
+
out[di] = mapper.mapX(out[di]);
|
|
93
|
+
out[di + 1] = mapper.mapY(out[di + 1]);
|
|
94
|
+
out[di + 2] = mapper.mapX(out[di + 2]);
|
|
95
|
+
out[di + 3] = mapper.mapY(out[di + 3]);
|
|
96
|
+
di += 4;
|
|
97
|
+
break;
|
|
98
|
+
case 4: // WIDE_MOVE_TO [?, ?, x, y]
|
|
99
|
+
case 5: // WIDE_LINE_TO [?, ?, x, y]
|
|
100
|
+
out[di + 2] = mapper.mapX(out[di + 2]);
|
|
101
|
+
out[di + 3] = mapper.mapY(out[di + 3]);
|
|
102
|
+
di += 4;
|
|
103
|
+
break;
|
|
104
|
+
case 6: // CUBIC_CURVE_TO [cx1, cy1, cx2, cy2, ax, ay]
|
|
105
|
+
out[di] = mapper.mapX(out[di]);
|
|
106
|
+
out[di + 1] = mapper.mapY(out[di + 1]);
|
|
107
|
+
out[di + 2] = mapper.mapX(out[di + 2]);
|
|
108
|
+
out[di + 3] = mapper.mapY(out[di + 3]);
|
|
109
|
+
out[di + 4] = mapper.mapX(out[di + 4]);
|
|
110
|
+
out[di + 5] = mapper.mapY(out[di + 5]);
|
|
111
|
+
di += 6;
|
|
112
|
+
break;
|
|
113
|
+
default:
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
const _remappedPathData = [];
|
|
119
|
+
//# sourceMappingURL=scale9ShapeCommands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scale9ShapeCommands.js","sourceRoot":"","sources":["../src/scale9ShapeCommands.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flighthq/shape",
|
|
3
|
-
"version": "0.3.0-next.
|
|
3
|
+
"version": "0.3.0-next.1560.03a2b36",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "https://github.com/flighthq/flight.git",
|
|
@@ -36,11 +36,11 @@
|
|
|
36
36
|
"clean:dist": "tsx ../../scripts/clean-package-dist.ts"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@flighthq/scene2d": "0.3.0-next.
|
|
40
|
-
"@flighthq/geometry": "0.3.0-next.
|
|
41
|
-
"@flighthq/node": "0.3.0-next.
|
|
42
|
-
"@flighthq/path": "0.3.0-next.
|
|
43
|
-
"@flighthq/types": "0.3.0-next.
|
|
39
|
+
"@flighthq/scene2d": "0.3.0-next.1560.03a2b36",
|
|
40
|
+
"@flighthq/geometry": "0.3.0-next.1560.03a2b36",
|
|
41
|
+
"@flighthq/node": "0.3.0-next.1560.03a2b36",
|
|
42
|
+
"@flighthq/path": "0.3.0-next.1560.03a2b36",
|
|
43
|
+
"@flighthq/types": "0.3.0-next.1560.03a2b36"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"typescript": "^5.3.0"
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { ShapeCommandToken } from '@flighthq/types/contract';
|
|
2
|
+
|
|
3
|
+
import { createScale9Shape } from './scale9Shape';
|
|
4
|
+
import { mapScale9ShapeCommands } from './scale9ShapeCommands';
|
|
5
|
+
import { appendShapeBeginFill, appendShapeRectangle } from './shapeCommands';
|
|
6
|
+
|
|
7
|
+
const grid = { x: 10, y: 10, width: 80, height: 80 };
|
|
8
|
+
|
|
9
|
+
describe('mapScale9ShapeCommands', () => {
|
|
10
|
+
const out: ShapeCommandToken[] = [];
|
|
11
|
+
|
|
12
|
+
it('passes style commands through unchanged', () => {
|
|
13
|
+
const mapper = { mapX: (x: number) => x, mapY: (y: number) => y };
|
|
14
|
+
mapScale9ShapeCommands(out, ['beginFill', 2, 0xff0000, 1], mapper);
|
|
15
|
+
expect(out).toEqual(['beginFill', 2, 0xff0000, 1]);
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
it('remaps moveTo coordinates', () => {
|
|
19
|
+
const mapper = { mapX: (x: number) => x * 2, mapY: (y: number) => y * 3 };
|
|
20
|
+
mapScale9ShapeCommands(out, ['moveTo', 2, 10, 20], mapper);
|
|
21
|
+
expect(out).toEqual(['moveTo', 2, 20, 60]);
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
it('remaps lineTo coordinates', () => {
|
|
25
|
+
const mapper = { mapX: (x: number) => x + 5, mapY: (y: number) => y + 10 };
|
|
26
|
+
mapScale9ShapeCommands(out, ['lineTo', 2, 100, 50], mapper);
|
|
27
|
+
expect(out).toEqual(['lineTo', 2, 105, 60]);
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
it('remaps drawRectangle corners and recomputes size', () => {
|
|
31
|
+
const mapper = { mapX: (x: number) => x * 2, mapY: (y: number) => y * 2 };
|
|
32
|
+
mapScale9ShapeCommands(out, ['drawRectangle', 4, 10, 20, 50, 30], mapper);
|
|
33
|
+
// x=10→20, y=20→40, x+w=60→120 (w=100), y+h=50→100 (h=60)
|
|
34
|
+
expect(out).toEqual(['drawRectangle', 4, 20, 40, 100, 60]);
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
it('remaps drawRoundRectangle corners but leaves ellipse radii unchanged', () => {
|
|
38
|
+
const mapper = { mapX: (x: number) => x * 2, mapY: (y: number) => y * 2 };
|
|
39
|
+
mapScale9ShapeCommands(out, ['drawRoundRectangle', 6, 10, 20, 50, 30, 8, 8], mapper);
|
|
40
|
+
expect(out).toEqual(['drawRoundRectangle', 6, 20, 40, 100, 60, 8, 8]);
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it('remaps drawCircle center but leaves radius unchanged', () => {
|
|
44
|
+
const mapper = { mapX: (x: number) => x + 5, mapY: (y: number) => y + 10 };
|
|
45
|
+
mapScale9ShapeCommands(out, ['drawCircle', 3, 50, 50, 25], mapper);
|
|
46
|
+
expect(out).toEqual(['drawCircle', 3, 55, 60, 25]);
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
it('remaps drawEllipse corners and recomputes size', () => {
|
|
50
|
+
const mapper = { mapX: (x: number) => x * 2, mapY: (y: number) => y * 2 };
|
|
51
|
+
mapScale9ShapeCommands(out, ['drawEllipse', 4, 0, 0, 100, 50], mapper);
|
|
52
|
+
expect(out).toEqual(['drawEllipse', 4, 0, 0, 200, 100]);
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
it('returns a buffer with the same element count as the input', () => {
|
|
56
|
+
const shape = createScale9Shape(grid);
|
|
57
|
+
appendShapeBeginFill(shape, 0xff0000);
|
|
58
|
+
appendShapeRectangle(shape, 0, 0, 100, 100);
|
|
59
|
+
// A mapper is any pair of coordinate functions; building one from a grid is a renderer's job, and
|
|
60
|
+
// the rewrite under test does not care where the mapping came from.
|
|
61
|
+
mapScale9ShapeCommands(out, shape.data.commands, { mapX: (x) => x * 2, mapY: (y) => y * 2 });
|
|
62
|
+
expect(out).toHaveLength(shape.data.commands.length);
|
|
63
|
+
});
|
|
64
|
+
});
|