@al8b/image 0.1.0
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/README.md +30 -0
- package/dist/blending.d.mts +3 -0
- package/dist/blending.d.ts +3 -0
- package/dist/blending.js +65 -0
- package/dist/blending.js.map +1 -0
- package/dist/blending.mjs +40 -0
- package/dist/blending.mjs.map +1 -0
- package/dist/color-DJyRSbpZ.d.mts +16 -0
- package/dist/color-DJyRSbpZ.d.ts +16 -0
- package/dist/core/color.d.mts +1 -0
- package/dist/core/color.d.ts +1 -0
- package/dist/core/color.js +61 -0
- package/dist/core/color.js.map +1 -0
- package/dist/core/color.mjs +36 -0
- package/dist/core/color.mjs.map +1 -0
- package/dist/core/context.d.mts +25 -0
- package/dist/core/context.d.ts +25 -0
- package/dist/core/context.js +77 -0
- package/dist/core/context.js.map +1 -0
- package/dist/core/context.mjs +53 -0
- package/dist/core/context.mjs.map +1 -0
- package/dist/core/drawing.d.mts +2 -0
- package/dist/core/drawing.d.ts +2 -0
- package/dist/core/drawing.js +165 -0
- package/dist/core/drawing.js.map +1 -0
- package/dist/core/drawing.mjs +134 -0
- package/dist/core/drawing.mjs.map +1 -0
- package/dist/core/font.d.mts +19 -0
- package/dist/core/font.d.ts +19 -0
- package/dist/core/font.js +80 -0
- package/dist/core/font.js.map +1 -0
- package/dist/core/font.mjs +55 -0
- package/dist/core/font.mjs.map +1 -0
- package/dist/core/image.d.mts +84 -0
- package/dist/core/image.d.ts +84 -0
- package/dist/core/image.js +1018 -0
- package/dist/core/image.js.map +1 -0
- package/dist/core/image.mjs +993 -0
- package/dist/core/image.mjs.map +1 -0
- package/dist/core/map-rendering.d.mts +2 -0
- package/dist/core/map-rendering.d.ts +2 -0
- package/dist/core/map-rendering.js +95 -0
- package/dist/core/map-rendering.js.map +1 -0
- package/dist/core/map-rendering.mjs +70 -0
- package/dist/core/map-rendering.mjs.map +1 -0
- package/dist/core/pixel.d.mts +18 -0
- package/dist/core/pixel.d.ts +18 -0
- package/dist/core/pixel.js +99 -0
- package/dist/core/pixel.js.map +1 -0
- package/dist/core/pixel.mjs +73 -0
- package/dist/core/pixel.mjs.map +1 -0
- package/dist/core/shapes.d.mts +2 -0
- package/dist/core/shapes.d.ts +2 -0
- package/dist/core/shapes.js +218 -0
- package/dist/core/shapes.js.map +1 -0
- package/dist/core/shapes.mjs +187 -0
- package/dist/core/shapes.mjs.map +1 -0
- package/dist/core/sprite-rendering.d.mts +2 -0
- package/dist/core/sprite-rendering.d.ts +2 -0
- package/dist/core/sprite-rendering.js +135 -0
- package/dist/core/sprite-rendering.js.map +1 -0
- package/dist/core/sprite-rendering.mjs +108 -0
- package/dist/core/sprite-rendering.mjs.map +1 -0
- package/dist/core/text.d.mts +2 -0
- package/dist/core/text.d.ts +2 -0
- package/dist/core/text.js +105 -0
- package/dist/core/text.js.map +1 -0
- package/dist/core/text.mjs +78 -0
- package/dist/core/text.mjs.map +1 -0
- package/dist/core/transform.d.mts +2 -0
- package/dist/core/transform.d.ts +2 -0
- package/dist/core/transform.js +101 -0
- package/dist/core/transform.js.map +1 -0
- package/dist/core/transform.mjs +71 -0
- package/dist/core/transform.mjs.map +1 -0
- package/dist/drawing-Bo2U4IUE.d.mts +31 -0
- package/dist/drawing-e7iVDl14.d.ts +31 -0
- package/dist/index.d.mts +12 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +1098 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +1066 -0
- package/dist/index.mjs.map +1 -0
- package/dist/map-rendering-CzeC061I.d.mts +20 -0
- package/dist/map-rendering-DcldCBtY.d.ts +20 -0
- package/dist/shapes-BY37IuhJ.d.ts +27 -0
- package/dist/shapes-CpCwX9Rp.d.mts +27 -0
- package/dist/sprite-rendering-Dac9FQ2x.d.ts +30 -0
- package/dist/sprite-rendering-DfQuLVXT.d.mts +30 -0
- package/dist/text-CIoUSRc-.d.mts +19 -0
- package/dist/text-HW25Qq3e.d.ts +19 -0
- package/dist/transform-Dqo6bY4r.d.mts +25 -0
- package/dist/transform-iwq8WdqR.d.ts +25 -0
- package/package.json +43 -0
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
|
+
|
|
21
|
+
// src/core/shapes.ts
|
|
22
|
+
var shapes_exports = {};
|
|
23
|
+
__export(shapes_exports, {
|
|
24
|
+
drawArc: () => drawArc,
|
|
25
|
+
drawBezierCurve: () => drawBezierCurve,
|
|
26
|
+
drawPolygon: () => drawPolygon,
|
|
27
|
+
drawPolyline: () => drawPolyline,
|
|
28
|
+
drawQuadCurve: () => drawQuadCurve,
|
|
29
|
+
fillArc: () => fillArc,
|
|
30
|
+
fillPolygon: () => fillPolygon
|
|
31
|
+
});
|
|
32
|
+
module.exports = __toCommonJS(shapes_exports);
|
|
33
|
+
|
|
34
|
+
// src/core/drawing.ts
|
|
35
|
+
function initDrawOp(context, state, x, y, object_transform = true) {
|
|
36
|
+
let res = false;
|
|
37
|
+
if (state.image_transform) {
|
|
38
|
+
context.save();
|
|
39
|
+
res = true;
|
|
40
|
+
context.translate(state.translation_x, state.translation_y);
|
|
41
|
+
context.scale(state.scale_x, state.scale_y);
|
|
42
|
+
context.rotate(state.rotation / 180 * Math.PI);
|
|
43
|
+
context.translate(x, y);
|
|
44
|
+
}
|
|
45
|
+
if (object_transform && (state.object_rotation !== 0 || state.object_scale_x !== 1 || state.object_scale_y !== 1)) {
|
|
46
|
+
if (!res) {
|
|
47
|
+
context.save();
|
|
48
|
+
res = true;
|
|
49
|
+
context.translate(x, y);
|
|
50
|
+
}
|
|
51
|
+
if (state.object_rotation !== 0) {
|
|
52
|
+
context.rotate(state.object_rotation / 180 * Math.PI);
|
|
53
|
+
}
|
|
54
|
+
if (state.object_scale_x !== 1 || state.object_scale_y !== 1) {
|
|
55
|
+
context.scale(state.object_scale_x, state.object_scale_y);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return res;
|
|
59
|
+
}
|
|
60
|
+
__name(initDrawOp, "initDrawOp");
|
|
61
|
+
function closeDrawOp(context) {
|
|
62
|
+
context.restore();
|
|
63
|
+
}
|
|
64
|
+
__name(closeDrawOp, "closeDrawOp");
|
|
65
|
+
|
|
66
|
+
// src/core/shapes.ts
|
|
67
|
+
function drawPolyline(context, state, args) {
|
|
68
|
+
if (Array.isArray(args[0])) {
|
|
69
|
+
args = args[0];
|
|
70
|
+
}
|
|
71
|
+
context.globalAlpha = state.alpha;
|
|
72
|
+
context.lineWidth = state.line_width;
|
|
73
|
+
if (args.length < 4) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
const len = Math.floor(args.length / 2);
|
|
77
|
+
const transform = initDrawOp(context, state, 0, 0, false);
|
|
78
|
+
context.beginPath();
|
|
79
|
+
context.moveTo(args[0], args[1]);
|
|
80
|
+
for (let i = 1; i <= len - 1; i++) {
|
|
81
|
+
context.lineTo(args[i * 2], args[i * 2 + 1]);
|
|
82
|
+
}
|
|
83
|
+
context.stroke();
|
|
84
|
+
if (transform) {
|
|
85
|
+
closeDrawOp(context);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
__name(drawPolyline, "drawPolyline");
|
|
89
|
+
function drawPolygon(context, state, args) {
|
|
90
|
+
if (Array.isArray(args[0])) {
|
|
91
|
+
args = args[0];
|
|
92
|
+
}
|
|
93
|
+
context.globalAlpha = state.alpha;
|
|
94
|
+
context.lineWidth = state.line_width;
|
|
95
|
+
if (args.length < 4) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
const len = Math.floor(args.length / 2);
|
|
99
|
+
const transform = initDrawOp(context, state, 0, 0, false);
|
|
100
|
+
context.beginPath();
|
|
101
|
+
context.moveTo(args[0], args[1]);
|
|
102
|
+
for (let i = 1; i <= len - 1; i++) {
|
|
103
|
+
context.lineTo(args[i * 2], args[i * 2 + 1]);
|
|
104
|
+
}
|
|
105
|
+
context.closePath();
|
|
106
|
+
context.stroke();
|
|
107
|
+
if (transform) {
|
|
108
|
+
closeDrawOp(context);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
__name(drawPolygon, "drawPolygon");
|
|
112
|
+
function fillPolygon(context, state, args) {
|
|
113
|
+
if (Array.isArray(args[0])) {
|
|
114
|
+
args = args[0];
|
|
115
|
+
}
|
|
116
|
+
context.globalAlpha = state.alpha;
|
|
117
|
+
if (args.length < 4) {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
const len = Math.floor(args.length / 2);
|
|
121
|
+
const transform = initDrawOp(context, state, 0, 0, false);
|
|
122
|
+
context.beginPath();
|
|
123
|
+
context.moveTo(args[0], args[1]);
|
|
124
|
+
for (let i = 1; i <= len - 1; i++) {
|
|
125
|
+
context.lineTo(args[i * 2], args[i * 2 + 1]);
|
|
126
|
+
}
|
|
127
|
+
context.fill();
|
|
128
|
+
if (transform) {
|
|
129
|
+
closeDrawOp(context);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
__name(fillPolygon, "fillPolygon");
|
|
133
|
+
function drawQuadCurve(context, state, args) {
|
|
134
|
+
if (Array.isArray(args[0])) {
|
|
135
|
+
args = args[0];
|
|
136
|
+
}
|
|
137
|
+
context.globalAlpha = state.alpha;
|
|
138
|
+
context.lineWidth = state.line_width;
|
|
139
|
+
if (args.length < 4) {
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
const transform = initDrawOp(context, state, 0, 0, false);
|
|
143
|
+
context.beginPath();
|
|
144
|
+
context.moveTo(args[0], args[1]);
|
|
145
|
+
let index = 2;
|
|
146
|
+
while (index <= args.length - 4) {
|
|
147
|
+
context.quadraticCurveTo(args[index], args[index + 1], args[index + 2], args[index + 3]);
|
|
148
|
+
index += 4;
|
|
149
|
+
}
|
|
150
|
+
context.stroke();
|
|
151
|
+
if (transform) {
|
|
152
|
+
closeDrawOp(context);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
__name(drawQuadCurve, "drawQuadCurve");
|
|
156
|
+
function drawBezierCurve(context, state, args) {
|
|
157
|
+
if (Array.isArray(args[0])) {
|
|
158
|
+
args = args[0];
|
|
159
|
+
}
|
|
160
|
+
context.globalAlpha = state.alpha;
|
|
161
|
+
context.lineWidth = state.line_width;
|
|
162
|
+
if (args.length < 4) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
const transform = initDrawOp(context, state, 0, 0, false);
|
|
166
|
+
context.beginPath();
|
|
167
|
+
context.moveTo(args[0], args[1]);
|
|
168
|
+
let index = 2;
|
|
169
|
+
while (index <= args.length - 6) {
|
|
170
|
+
context.bezierCurveTo(args[index], args[index + 1], args[index + 2], args[index + 3], args[index + 4], args[index + 5]);
|
|
171
|
+
index += 6;
|
|
172
|
+
}
|
|
173
|
+
context.stroke();
|
|
174
|
+
if (transform) {
|
|
175
|
+
closeDrawOp(context);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
__name(drawBezierCurve, "drawBezierCurve");
|
|
179
|
+
function drawArc(context, state, x, y, radius, angle1, angle2, ccw) {
|
|
180
|
+
context.globalAlpha = state.alpha;
|
|
181
|
+
context.lineWidth = state.line_width;
|
|
182
|
+
if (initDrawOp(context, state, x, y)) {
|
|
183
|
+
context.beginPath();
|
|
184
|
+
context.arc(0, 0, radius, angle1 / 180 * Math.PI, angle2 / 180 * Math.PI, ccw);
|
|
185
|
+
context.stroke();
|
|
186
|
+
closeDrawOp(context);
|
|
187
|
+
} else {
|
|
188
|
+
context.beginPath();
|
|
189
|
+
context.arc(x, y, radius, angle1 / 180 * Math.PI, angle2 / 180 * Math.PI, ccw);
|
|
190
|
+
context.stroke();
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
__name(drawArc, "drawArc");
|
|
194
|
+
function fillArc(context, state, x, y, radius, angle1, angle2, ccw) {
|
|
195
|
+
context.globalAlpha = state.alpha;
|
|
196
|
+
if (initDrawOp(context, state, x, y)) {
|
|
197
|
+
context.beginPath();
|
|
198
|
+
context.arc(0, 0, radius, angle1 / 180 * Math.PI, angle2 / 180 * Math.PI, ccw);
|
|
199
|
+
context.fill();
|
|
200
|
+
closeDrawOp(context);
|
|
201
|
+
} else {
|
|
202
|
+
context.beginPath();
|
|
203
|
+
context.arc(x, y, radius, angle1 / 180 * Math.PI, angle2 / 180 * Math.PI, ccw);
|
|
204
|
+
context.fill();
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
__name(fillArc, "fillArc");
|
|
208
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
209
|
+
0 && (module.exports = {
|
|
210
|
+
drawArc,
|
|
211
|
+
drawBezierCurve,
|
|
212
|
+
drawPolygon,
|
|
213
|
+
drawPolyline,
|
|
214
|
+
drawQuadCurve,
|
|
215
|
+
fillArc,
|
|
216
|
+
fillPolygon
|
|
217
|
+
});
|
|
218
|
+
//# sourceMappingURL=shapes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/core/shapes.ts","../../src/core/drawing.ts"],"sourcesContent":["/**\n * Advanced shape drawing operations\n * Handles polygons, polylines, curves, and arcs\n */\n\nimport type { ImageContextState } from \"./context\";\nimport { closeDrawOp, initDrawOp } from \"./drawing\";\n\nexport function drawPolyline(context: CanvasRenderingContext2D, state: ImageContextState, args: any[]): void {\n\tif (Array.isArray(args[0])) {\n\t\targs = args[0];\n\t}\n\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\n\tif (args.length < 4) {\n\t\treturn;\n\t}\n\n\tconst len = Math.floor(args.length / 2);\n\tconst transform = initDrawOp(context, state, 0, 0, false);\n\tcontext.beginPath();\n\tcontext.moveTo(args[0], args[1]);\n\n\tfor (let i = 1; i <= len - 1; i++) {\n\t\tcontext.lineTo(args[i * 2], args[i * 2 + 1]);\n\t}\n\n\tcontext.stroke();\n\tif (transform) {\n\t\tcloseDrawOp(context);\n\t}\n}\n\nexport function drawPolygon(context: CanvasRenderingContext2D, state: ImageContextState, args: any[]): void {\n\tif (Array.isArray(args[0])) {\n\t\targs = args[0];\n\t}\n\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\n\tif (args.length < 4) {\n\t\treturn;\n\t}\n\n\tconst len = Math.floor(args.length / 2);\n\tconst transform = initDrawOp(context, state, 0, 0, false);\n\tcontext.beginPath();\n\tcontext.moveTo(args[0], args[1]);\n\n\tfor (let i = 1; i <= len - 1; i++) {\n\t\tcontext.lineTo(args[i * 2], args[i * 2 + 1]);\n\t}\n\n\tcontext.closePath();\n\tcontext.stroke();\n\tif (transform) {\n\t\tcloseDrawOp(context);\n\t}\n}\n\nexport function fillPolygon(context: CanvasRenderingContext2D, state: ImageContextState, args: any[]): void {\n\tif (Array.isArray(args[0])) {\n\t\targs = args[0];\n\t}\n\n\tcontext.globalAlpha = state.alpha;\n\n\tif (args.length < 4) {\n\t\treturn;\n\t}\n\n\tconst len = Math.floor(args.length / 2);\n\tconst transform = initDrawOp(context, state, 0, 0, false);\n\tcontext.beginPath();\n\tcontext.moveTo(args[0], args[1]);\n\n\tfor (let i = 1; i <= len - 1; i++) {\n\t\tcontext.lineTo(args[i * 2], args[i * 2 + 1]);\n\t}\n\n\tcontext.fill();\n\tif (transform) {\n\t\tcloseDrawOp(context);\n\t}\n}\n\nexport function drawQuadCurve(context: CanvasRenderingContext2D, state: ImageContextState, args: any[]): void {\n\tif (Array.isArray(args[0])) {\n\t\targs = args[0];\n\t}\n\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\n\tif (args.length < 4) {\n\t\treturn;\n\t}\n\n\tconst transform = initDrawOp(context, state, 0, 0, false);\n\tcontext.beginPath();\n\tcontext.moveTo(args[0], args[1]);\n\n\tlet index = 2;\n\twhile (index <= args.length - 4) {\n\t\tcontext.quadraticCurveTo(args[index], args[index + 1], args[index + 2], args[index + 3]);\n\t\tindex += 4;\n\t}\n\n\tcontext.stroke();\n\tif (transform) {\n\t\tcloseDrawOp(context);\n\t}\n}\n\nexport function drawBezierCurve(context: CanvasRenderingContext2D, state: ImageContextState, args: any[]): void {\n\tif (Array.isArray(args[0])) {\n\t\targs = args[0];\n\t}\n\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\n\tif (args.length < 4) {\n\t\treturn;\n\t}\n\n\tconst transform = initDrawOp(context, state, 0, 0, false);\n\tcontext.beginPath();\n\tcontext.moveTo(args[0], args[1]);\n\n\tlet index = 2;\n\twhile (index <= args.length - 6) {\n\t\tcontext.bezierCurveTo(\n\t\t\targs[index],\n\t\t\targs[index + 1],\n\t\t\targs[index + 2],\n\t\t\targs[index + 3],\n\t\t\targs[index + 4],\n\t\t\targs[index + 5],\n\t\t);\n\t\tindex += 6;\n\t}\n\n\tcontext.stroke();\n\tif (transform) {\n\t\tcloseDrawOp(context);\n\t}\n}\n\nexport function drawArc(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tradius: number,\n\tangle1: number,\n\tangle2: number,\n\tccw: boolean,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.beginPath();\n\t\tcontext.arc(0, 0, radius, (angle1 / 180) * Math.PI, (angle2 / 180) * Math.PI, ccw);\n\t\tcontext.stroke();\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.beginPath();\n\t\tcontext.arc(x, y, radius, (angle1 / 180) * Math.PI, (angle2 / 180) * Math.PI, ccw);\n\t\tcontext.stroke();\n\t}\n}\n\nexport function fillArc(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tradius: number,\n\tangle1: number,\n\tangle2: number,\n\tccw: boolean,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.beginPath();\n\t\tcontext.arc(0, 0, radius, (angle1 / 180) * Math.PI, (angle2 / 180) * Math.PI, ccw);\n\t\tcontext.fill();\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.beginPath();\n\t\tcontext.arc(x, y, radius, (angle1 / 180) * Math.PI, (angle2 / 180) * Math.PI, ccw);\n\t\tcontext.fill();\n\t}\n}\n","/**\n * Drawing operations for Image class\n * Handles all drawing primitives (rectangles, circles, lines, etc.)\n */\n\nimport type { ImageContextState } from \"./context\";\n\nexport function initDrawOp(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tobject_transform = true,\n): boolean {\n\tlet res = false;\n\n\tif (state.image_transform) {\n\t\tcontext.save();\n\t\tres = true;\n\t\tcontext.translate(state.translation_x, state.translation_y);\n\t\tcontext.scale(state.scale_x, state.scale_y);\n\t\tcontext.rotate((state.rotation / 180) * Math.PI);\n\t\tcontext.translate(x, y);\n\t}\n\n\tif (object_transform && (state.object_rotation !== 0 || state.object_scale_x !== 1 || state.object_scale_y !== 1)) {\n\t\tif (!res) {\n\t\t\tcontext.save();\n\t\t\tres = true;\n\t\t\tcontext.translate(x, y);\n\t\t}\n\t\tif (state.object_rotation !== 0) {\n\t\t\tcontext.rotate((state.object_rotation / 180) * Math.PI);\n\t\t}\n\t\tif (state.object_scale_x !== 1 || state.object_scale_y !== 1) {\n\t\t\tcontext.scale(state.object_scale_x, state.object_scale_y);\n\t\t}\n\t}\n\n\treturn res;\n}\n\nexport function closeDrawOp(context: CanvasRenderingContext2D): void {\n\tcontext.restore();\n}\n\nexport function fillRect(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tw: number,\n\th: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.fillRect(-w / 2 - (state.anchor_x * w) / 2, -h / 2 + (state.anchor_y * h) / 2, w, h);\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.fillRect(x - w / 2 - (state.anchor_x * w) / 2, y - h / 2 + (state.anchor_y * h) / 2, w, h);\n\t}\n}\n\nexport function fillRoundRect(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tw: number,\n\th: number,\n\tround: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tif (initDrawOp(context, state, x, y)) {\n\t\t(context as any).fillRoundRect(-w / 2 - (state.anchor_x * w) / 2, -h / 2 + (state.anchor_y * h) / 2, w, h, round);\n\t\tcloseDrawOp(context);\n\t} else {\n\t\t(context as any).fillRoundRect(\n\t\t\tx - w / 2 - (state.anchor_x * w) / 2,\n\t\t\ty - h / 2 + (state.anchor_y * h) / 2,\n\t\t\tw,\n\t\t\th,\n\t\t\tround,\n\t\t);\n\t}\n}\n\nexport function fillRound(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tw: number,\n\th: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tw = Math.abs(w);\n\th = Math.abs(h);\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.beginPath();\n\t\tcontext.ellipse((-state.anchor_x * w) / 2, 0 + (state.anchor_y * h) / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false);\n\t\tcontext.fill();\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.beginPath();\n\t\tcontext.ellipse(x - (state.anchor_x * w) / 2, y + (state.anchor_y * h) / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false);\n\t\tcontext.fill();\n\t}\n}\n\nexport function drawRect(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tw: number,\n\th: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.strokeRect(-w / 2 - (state.anchor_x * w) / 2, -h / 2 + (state.anchor_y * h) / 2, w, h);\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.strokeRect(x - w / 2 - (state.anchor_x * w) / 2, y - h / 2 + (state.anchor_y * h) / 2, w, h);\n\t}\n}\n\nexport function drawRoundRect(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tw: number,\n\th: number,\n\tround: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\tif (initDrawOp(context, state, x, y)) {\n\t\t(context as any).strokeRoundRect(-w / 2 - (state.anchor_x * w) / 2, -h / 2 + (state.anchor_y * h) / 2, w, h, round);\n\t\tcloseDrawOp(context);\n\t} else {\n\t\t(context as any).strokeRoundRect(\n\t\t\tx - w / 2 - (state.anchor_x * w) / 2,\n\t\t\ty - h / 2 + (state.anchor_y * h) / 2,\n\t\t\tw,\n\t\t\th,\n\t\t\tround,\n\t\t);\n\t}\n}\n\nexport function drawRound(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tw: number,\n\th: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\tw = Math.abs(w);\n\th = Math.abs(h);\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.beginPath();\n\t\tcontext.ellipse(0 - (state.anchor_x * w) / 2, 0 + (state.anchor_y * h) / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false);\n\t\tcontext.stroke();\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.beginPath();\n\t\tcontext.ellipse(x - (state.anchor_x * w) / 2, y + (state.anchor_y * h) / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false);\n\t\tcontext.stroke();\n\t}\n}\n\nexport function drawLine(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx1: number,\n\ty1: number,\n\tx2: number,\n\ty2: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\tconst transform = initDrawOp(context, state, 0, 0, false);\n\tcontext.beginPath();\n\tcontext.moveTo(x1, y1);\n\tcontext.lineTo(x2, y2);\n\tcontext.stroke();\n\tif (transform) {\n\t\tcloseDrawOp(context);\n\t}\n}\n"],"mappings":"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","names":["initDrawOp","context","state","x","y","object_transform","res","image_transform","save","translate","translation_x","translation_y","scale","scale_x","scale_y","rotate","rotation","Math","PI","object_rotation","object_scale_x","object_scale_y","closeDrawOp","restore","drawPolyline","context","state","args","Array","isArray","globalAlpha","alpha","lineWidth","line_width","length","len","Math","floor","transform","initDrawOp","beginPath","moveTo","i","lineTo","stroke","closeDrawOp","drawPolygon","closePath","fillPolygon","fill","drawQuadCurve","index","quadraticCurveTo","drawBezierCurve","bezierCurveTo","drawArc","x","y","radius","angle1","angle2","ccw","arc","PI","fillArc"]}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
|
|
4
|
+
// src/core/drawing.ts
|
|
5
|
+
function initDrawOp(context, state, x, y, object_transform = true) {
|
|
6
|
+
let res = false;
|
|
7
|
+
if (state.image_transform) {
|
|
8
|
+
context.save();
|
|
9
|
+
res = true;
|
|
10
|
+
context.translate(state.translation_x, state.translation_y);
|
|
11
|
+
context.scale(state.scale_x, state.scale_y);
|
|
12
|
+
context.rotate(state.rotation / 180 * Math.PI);
|
|
13
|
+
context.translate(x, y);
|
|
14
|
+
}
|
|
15
|
+
if (object_transform && (state.object_rotation !== 0 || state.object_scale_x !== 1 || state.object_scale_y !== 1)) {
|
|
16
|
+
if (!res) {
|
|
17
|
+
context.save();
|
|
18
|
+
res = true;
|
|
19
|
+
context.translate(x, y);
|
|
20
|
+
}
|
|
21
|
+
if (state.object_rotation !== 0) {
|
|
22
|
+
context.rotate(state.object_rotation / 180 * Math.PI);
|
|
23
|
+
}
|
|
24
|
+
if (state.object_scale_x !== 1 || state.object_scale_y !== 1) {
|
|
25
|
+
context.scale(state.object_scale_x, state.object_scale_y);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return res;
|
|
29
|
+
}
|
|
30
|
+
__name(initDrawOp, "initDrawOp");
|
|
31
|
+
function closeDrawOp(context) {
|
|
32
|
+
context.restore();
|
|
33
|
+
}
|
|
34
|
+
__name(closeDrawOp, "closeDrawOp");
|
|
35
|
+
|
|
36
|
+
// src/core/shapes.ts
|
|
37
|
+
function drawPolyline(context, state, args) {
|
|
38
|
+
if (Array.isArray(args[0])) {
|
|
39
|
+
args = args[0];
|
|
40
|
+
}
|
|
41
|
+
context.globalAlpha = state.alpha;
|
|
42
|
+
context.lineWidth = state.line_width;
|
|
43
|
+
if (args.length < 4) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const len = Math.floor(args.length / 2);
|
|
47
|
+
const transform = initDrawOp(context, state, 0, 0, false);
|
|
48
|
+
context.beginPath();
|
|
49
|
+
context.moveTo(args[0], args[1]);
|
|
50
|
+
for (let i = 1; i <= len - 1; i++) {
|
|
51
|
+
context.lineTo(args[i * 2], args[i * 2 + 1]);
|
|
52
|
+
}
|
|
53
|
+
context.stroke();
|
|
54
|
+
if (transform) {
|
|
55
|
+
closeDrawOp(context);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
__name(drawPolyline, "drawPolyline");
|
|
59
|
+
function drawPolygon(context, state, args) {
|
|
60
|
+
if (Array.isArray(args[0])) {
|
|
61
|
+
args = args[0];
|
|
62
|
+
}
|
|
63
|
+
context.globalAlpha = state.alpha;
|
|
64
|
+
context.lineWidth = state.line_width;
|
|
65
|
+
if (args.length < 4) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const len = Math.floor(args.length / 2);
|
|
69
|
+
const transform = initDrawOp(context, state, 0, 0, false);
|
|
70
|
+
context.beginPath();
|
|
71
|
+
context.moveTo(args[0], args[1]);
|
|
72
|
+
for (let i = 1; i <= len - 1; i++) {
|
|
73
|
+
context.lineTo(args[i * 2], args[i * 2 + 1]);
|
|
74
|
+
}
|
|
75
|
+
context.closePath();
|
|
76
|
+
context.stroke();
|
|
77
|
+
if (transform) {
|
|
78
|
+
closeDrawOp(context);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
__name(drawPolygon, "drawPolygon");
|
|
82
|
+
function fillPolygon(context, state, args) {
|
|
83
|
+
if (Array.isArray(args[0])) {
|
|
84
|
+
args = args[0];
|
|
85
|
+
}
|
|
86
|
+
context.globalAlpha = state.alpha;
|
|
87
|
+
if (args.length < 4) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const len = Math.floor(args.length / 2);
|
|
91
|
+
const transform = initDrawOp(context, state, 0, 0, false);
|
|
92
|
+
context.beginPath();
|
|
93
|
+
context.moveTo(args[0], args[1]);
|
|
94
|
+
for (let i = 1; i <= len - 1; i++) {
|
|
95
|
+
context.lineTo(args[i * 2], args[i * 2 + 1]);
|
|
96
|
+
}
|
|
97
|
+
context.fill();
|
|
98
|
+
if (transform) {
|
|
99
|
+
closeDrawOp(context);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
__name(fillPolygon, "fillPolygon");
|
|
103
|
+
function drawQuadCurve(context, state, args) {
|
|
104
|
+
if (Array.isArray(args[0])) {
|
|
105
|
+
args = args[0];
|
|
106
|
+
}
|
|
107
|
+
context.globalAlpha = state.alpha;
|
|
108
|
+
context.lineWidth = state.line_width;
|
|
109
|
+
if (args.length < 4) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
const transform = initDrawOp(context, state, 0, 0, false);
|
|
113
|
+
context.beginPath();
|
|
114
|
+
context.moveTo(args[0], args[1]);
|
|
115
|
+
let index = 2;
|
|
116
|
+
while (index <= args.length - 4) {
|
|
117
|
+
context.quadraticCurveTo(args[index], args[index + 1], args[index + 2], args[index + 3]);
|
|
118
|
+
index += 4;
|
|
119
|
+
}
|
|
120
|
+
context.stroke();
|
|
121
|
+
if (transform) {
|
|
122
|
+
closeDrawOp(context);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
__name(drawQuadCurve, "drawQuadCurve");
|
|
126
|
+
function drawBezierCurve(context, state, args) {
|
|
127
|
+
if (Array.isArray(args[0])) {
|
|
128
|
+
args = args[0];
|
|
129
|
+
}
|
|
130
|
+
context.globalAlpha = state.alpha;
|
|
131
|
+
context.lineWidth = state.line_width;
|
|
132
|
+
if (args.length < 4) {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
const transform = initDrawOp(context, state, 0, 0, false);
|
|
136
|
+
context.beginPath();
|
|
137
|
+
context.moveTo(args[0], args[1]);
|
|
138
|
+
let index = 2;
|
|
139
|
+
while (index <= args.length - 6) {
|
|
140
|
+
context.bezierCurveTo(args[index], args[index + 1], args[index + 2], args[index + 3], args[index + 4], args[index + 5]);
|
|
141
|
+
index += 6;
|
|
142
|
+
}
|
|
143
|
+
context.stroke();
|
|
144
|
+
if (transform) {
|
|
145
|
+
closeDrawOp(context);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
__name(drawBezierCurve, "drawBezierCurve");
|
|
149
|
+
function drawArc(context, state, x, y, radius, angle1, angle2, ccw) {
|
|
150
|
+
context.globalAlpha = state.alpha;
|
|
151
|
+
context.lineWidth = state.line_width;
|
|
152
|
+
if (initDrawOp(context, state, x, y)) {
|
|
153
|
+
context.beginPath();
|
|
154
|
+
context.arc(0, 0, radius, angle1 / 180 * Math.PI, angle2 / 180 * Math.PI, ccw);
|
|
155
|
+
context.stroke();
|
|
156
|
+
closeDrawOp(context);
|
|
157
|
+
} else {
|
|
158
|
+
context.beginPath();
|
|
159
|
+
context.arc(x, y, radius, angle1 / 180 * Math.PI, angle2 / 180 * Math.PI, ccw);
|
|
160
|
+
context.stroke();
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
__name(drawArc, "drawArc");
|
|
164
|
+
function fillArc(context, state, x, y, radius, angle1, angle2, ccw) {
|
|
165
|
+
context.globalAlpha = state.alpha;
|
|
166
|
+
if (initDrawOp(context, state, x, y)) {
|
|
167
|
+
context.beginPath();
|
|
168
|
+
context.arc(0, 0, radius, angle1 / 180 * Math.PI, angle2 / 180 * Math.PI, ccw);
|
|
169
|
+
context.fill();
|
|
170
|
+
closeDrawOp(context);
|
|
171
|
+
} else {
|
|
172
|
+
context.beginPath();
|
|
173
|
+
context.arc(x, y, radius, angle1 / 180 * Math.PI, angle2 / 180 * Math.PI, ccw);
|
|
174
|
+
context.fill();
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
__name(fillArc, "fillArc");
|
|
178
|
+
export {
|
|
179
|
+
drawArc,
|
|
180
|
+
drawBezierCurve,
|
|
181
|
+
drawPolygon,
|
|
182
|
+
drawPolyline,
|
|
183
|
+
drawQuadCurve,
|
|
184
|
+
fillArc,
|
|
185
|
+
fillPolygon
|
|
186
|
+
};
|
|
187
|
+
//# sourceMappingURL=shapes.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/core/drawing.ts","../../src/core/shapes.ts"],"sourcesContent":["/**\n * Drawing operations for Image class\n * Handles all drawing primitives (rectangles, circles, lines, etc.)\n */\n\nimport type { ImageContextState } from \"./context\";\n\nexport function initDrawOp(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tobject_transform = true,\n): boolean {\n\tlet res = false;\n\n\tif (state.image_transform) {\n\t\tcontext.save();\n\t\tres = true;\n\t\tcontext.translate(state.translation_x, state.translation_y);\n\t\tcontext.scale(state.scale_x, state.scale_y);\n\t\tcontext.rotate((state.rotation / 180) * Math.PI);\n\t\tcontext.translate(x, y);\n\t}\n\n\tif (object_transform && (state.object_rotation !== 0 || state.object_scale_x !== 1 || state.object_scale_y !== 1)) {\n\t\tif (!res) {\n\t\t\tcontext.save();\n\t\t\tres = true;\n\t\t\tcontext.translate(x, y);\n\t\t}\n\t\tif (state.object_rotation !== 0) {\n\t\t\tcontext.rotate((state.object_rotation / 180) * Math.PI);\n\t\t}\n\t\tif (state.object_scale_x !== 1 || state.object_scale_y !== 1) {\n\t\t\tcontext.scale(state.object_scale_x, state.object_scale_y);\n\t\t}\n\t}\n\n\treturn res;\n}\n\nexport function closeDrawOp(context: CanvasRenderingContext2D): void {\n\tcontext.restore();\n}\n\nexport function fillRect(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tw: number,\n\th: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.fillRect(-w / 2 - (state.anchor_x * w) / 2, -h / 2 + (state.anchor_y * h) / 2, w, h);\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.fillRect(x - w / 2 - (state.anchor_x * w) / 2, y - h / 2 + (state.anchor_y * h) / 2, w, h);\n\t}\n}\n\nexport function fillRoundRect(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tw: number,\n\th: number,\n\tround: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tif (initDrawOp(context, state, x, y)) {\n\t\t(context as any).fillRoundRect(-w / 2 - (state.anchor_x * w) / 2, -h / 2 + (state.anchor_y * h) / 2, w, h, round);\n\t\tcloseDrawOp(context);\n\t} else {\n\t\t(context as any).fillRoundRect(\n\t\t\tx - w / 2 - (state.anchor_x * w) / 2,\n\t\t\ty - h / 2 + (state.anchor_y * h) / 2,\n\t\t\tw,\n\t\t\th,\n\t\t\tround,\n\t\t);\n\t}\n}\n\nexport function fillRound(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tw: number,\n\th: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tw = Math.abs(w);\n\th = Math.abs(h);\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.beginPath();\n\t\tcontext.ellipse((-state.anchor_x * w) / 2, 0 + (state.anchor_y * h) / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false);\n\t\tcontext.fill();\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.beginPath();\n\t\tcontext.ellipse(x - (state.anchor_x * w) / 2, y + (state.anchor_y * h) / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false);\n\t\tcontext.fill();\n\t}\n}\n\nexport function drawRect(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tw: number,\n\th: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.strokeRect(-w / 2 - (state.anchor_x * w) / 2, -h / 2 + (state.anchor_y * h) / 2, w, h);\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.strokeRect(x - w / 2 - (state.anchor_x * w) / 2, y - h / 2 + (state.anchor_y * h) / 2, w, h);\n\t}\n}\n\nexport function drawRoundRect(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tw: number,\n\th: number,\n\tround: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\tif (initDrawOp(context, state, x, y)) {\n\t\t(context as any).strokeRoundRect(-w / 2 - (state.anchor_x * w) / 2, -h / 2 + (state.anchor_y * h) / 2, w, h, round);\n\t\tcloseDrawOp(context);\n\t} else {\n\t\t(context as any).strokeRoundRect(\n\t\t\tx - w / 2 - (state.anchor_x * w) / 2,\n\t\t\ty - h / 2 + (state.anchor_y * h) / 2,\n\t\t\tw,\n\t\t\th,\n\t\t\tround,\n\t\t);\n\t}\n}\n\nexport function drawRound(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tw: number,\n\th: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\tw = Math.abs(w);\n\th = Math.abs(h);\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.beginPath();\n\t\tcontext.ellipse(0 - (state.anchor_x * w) / 2, 0 + (state.anchor_y * h) / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false);\n\t\tcontext.stroke();\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.beginPath();\n\t\tcontext.ellipse(x - (state.anchor_x * w) / 2, y + (state.anchor_y * h) / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false);\n\t\tcontext.stroke();\n\t}\n}\n\nexport function drawLine(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx1: number,\n\ty1: number,\n\tx2: number,\n\ty2: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\tconst transform = initDrawOp(context, state, 0, 0, false);\n\tcontext.beginPath();\n\tcontext.moveTo(x1, y1);\n\tcontext.lineTo(x2, y2);\n\tcontext.stroke();\n\tif (transform) {\n\t\tcloseDrawOp(context);\n\t}\n}\n","/**\n * Advanced shape drawing operations\n * Handles polygons, polylines, curves, and arcs\n */\n\nimport type { ImageContextState } from \"./context\";\nimport { closeDrawOp, initDrawOp } from \"./drawing\";\n\nexport function drawPolyline(context: CanvasRenderingContext2D, state: ImageContextState, args: any[]): void {\n\tif (Array.isArray(args[0])) {\n\t\targs = args[0];\n\t}\n\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\n\tif (args.length < 4) {\n\t\treturn;\n\t}\n\n\tconst len = Math.floor(args.length / 2);\n\tconst transform = initDrawOp(context, state, 0, 0, false);\n\tcontext.beginPath();\n\tcontext.moveTo(args[0], args[1]);\n\n\tfor (let i = 1; i <= len - 1; i++) {\n\t\tcontext.lineTo(args[i * 2], args[i * 2 + 1]);\n\t}\n\n\tcontext.stroke();\n\tif (transform) {\n\t\tcloseDrawOp(context);\n\t}\n}\n\nexport function drawPolygon(context: CanvasRenderingContext2D, state: ImageContextState, args: any[]): void {\n\tif (Array.isArray(args[0])) {\n\t\targs = args[0];\n\t}\n\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\n\tif (args.length < 4) {\n\t\treturn;\n\t}\n\n\tconst len = Math.floor(args.length / 2);\n\tconst transform = initDrawOp(context, state, 0, 0, false);\n\tcontext.beginPath();\n\tcontext.moveTo(args[0], args[1]);\n\n\tfor (let i = 1; i <= len - 1; i++) {\n\t\tcontext.lineTo(args[i * 2], args[i * 2 + 1]);\n\t}\n\n\tcontext.closePath();\n\tcontext.stroke();\n\tif (transform) {\n\t\tcloseDrawOp(context);\n\t}\n}\n\nexport function fillPolygon(context: CanvasRenderingContext2D, state: ImageContextState, args: any[]): void {\n\tif (Array.isArray(args[0])) {\n\t\targs = args[0];\n\t}\n\n\tcontext.globalAlpha = state.alpha;\n\n\tif (args.length < 4) {\n\t\treturn;\n\t}\n\n\tconst len = Math.floor(args.length / 2);\n\tconst transform = initDrawOp(context, state, 0, 0, false);\n\tcontext.beginPath();\n\tcontext.moveTo(args[0], args[1]);\n\n\tfor (let i = 1; i <= len - 1; i++) {\n\t\tcontext.lineTo(args[i * 2], args[i * 2 + 1]);\n\t}\n\n\tcontext.fill();\n\tif (transform) {\n\t\tcloseDrawOp(context);\n\t}\n}\n\nexport function drawQuadCurve(context: CanvasRenderingContext2D, state: ImageContextState, args: any[]): void {\n\tif (Array.isArray(args[0])) {\n\t\targs = args[0];\n\t}\n\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\n\tif (args.length < 4) {\n\t\treturn;\n\t}\n\n\tconst transform = initDrawOp(context, state, 0, 0, false);\n\tcontext.beginPath();\n\tcontext.moveTo(args[0], args[1]);\n\n\tlet index = 2;\n\twhile (index <= args.length - 4) {\n\t\tcontext.quadraticCurveTo(args[index], args[index + 1], args[index + 2], args[index + 3]);\n\t\tindex += 4;\n\t}\n\n\tcontext.stroke();\n\tif (transform) {\n\t\tcloseDrawOp(context);\n\t}\n}\n\nexport function drawBezierCurve(context: CanvasRenderingContext2D, state: ImageContextState, args: any[]): void {\n\tif (Array.isArray(args[0])) {\n\t\targs = args[0];\n\t}\n\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\n\tif (args.length < 4) {\n\t\treturn;\n\t}\n\n\tconst transform = initDrawOp(context, state, 0, 0, false);\n\tcontext.beginPath();\n\tcontext.moveTo(args[0], args[1]);\n\n\tlet index = 2;\n\twhile (index <= args.length - 6) {\n\t\tcontext.bezierCurveTo(\n\t\t\targs[index],\n\t\t\targs[index + 1],\n\t\t\targs[index + 2],\n\t\t\targs[index + 3],\n\t\t\targs[index + 4],\n\t\t\targs[index + 5],\n\t\t);\n\t\tindex += 6;\n\t}\n\n\tcontext.stroke();\n\tif (transform) {\n\t\tcloseDrawOp(context);\n\t}\n}\n\nexport function drawArc(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tradius: number,\n\tangle1: number,\n\tangle2: number,\n\tccw: boolean,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.beginPath();\n\t\tcontext.arc(0, 0, radius, (angle1 / 180) * Math.PI, (angle2 / 180) * Math.PI, ccw);\n\t\tcontext.stroke();\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.beginPath();\n\t\tcontext.arc(x, y, radius, (angle1 / 180) * Math.PI, (angle2 / 180) * Math.PI, ccw);\n\t\tcontext.stroke();\n\t}\n}\n\nexport function fillArc(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tradius: number,\n\tangle1: number,\n\tangle2: number,\n\tccw: boolean,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.beginPath();\n\t\tcontext.arc(0, 0, radius, (angle1 / 180) * Math.PI, (angle2 / 180) * Math.PI, ccw);\n\t\tcontext.fill();\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.beginPath();\n\t\tcontext.arc(x, y, radius, (angle1 / 180) * Math.PI, (angle2 / 180) * Math.PI, ccw);\n\t\tcontext.fill();\n\t}\n}\n"],"mappings":"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","names":["initDrawOp","context","state","x","y","object_transform","res","image_transform","save","translate","translation_x","translation_y","scale","scale_x","scale_y","rotate","rotation","Math","PI","object_rotation","object_scale_x","object_scale_y","closeDrawOp","restore","drawPolyline","context","state","args","Array","isArray","globalAlpha","alpha","lineWidth","line_width","length","len","Math","floor","transform","initDrawOp","beginPath","moveTo","i","lineTo","stroke","closeDrawOp","drawPolygon","closePath","fillPolygon","fill","drawQuadCurve","index","quadraticCurveTo","drawBezierCurve","bezierCurveTo","drawArc","x","y","radius","angle1","angle2","ccw","arc","PI","fillArc"]}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
|
+
|
|
21
|
+
// src/core/sprite-rendering.ts
|
|
22
|
+
var sprite_rendering_exports = {};
|
|
23
|
+
__export(sprite_rendering_exports, {
|
|
24
|
+
drawSprite: () => drawSprite,
|
|
25
|
+
drawSpritePart: () => drawSpritePart,
|
|
26
|
+
getSpriteFrame: () => getSpriteFrame
|
|
27
|
+
});
|
|
28
|
+
module.exports = __toCommonJS(sprite_rendering_exports);
|
|
29
|
+
|
|
30
|
+
// src/core/drawing.ts
|
|
31
|
+
function initDrawOp(context, state, x, y, object_transform = true) {
|
|
32
|
+
let res = false;
|
|
33
|
+
if (state.image_transform) {
|
|
34
|
+
context.save();
|
|
35
|
+
res = true;
|
|
36
|
+
context.translate(state.translation_x, state.translation_y);
|
|
37
|
+
context.scale(state.scale_x, state.scale_y);
|
|
38
|
+
context.rotate(state.rotation / 180 * Math.PI);
|
|
39
|
+
context.translate(x, y);
|
|
40
|
+
}
|
|
41
|
+
if (object_transform && (state.object_rotation !== 0 || state.object_scale_x !== 1 || state.object_scale_y !== 1)) {
|
|
42
|
+
if (!res) {
|
|
43
|
+
context.save();
|
|
44
|
+
res = true;
|
|
45
|
+
context.translate(x, y);
|
|
46
|
+
}
|
|
47
|
+
if (state.object_rotation !== 0) {
|
|
48
|
+
context.rotate(state.object_rotation / 180 * Math.PI);
|
|
49
|
+
}
|
|
50
|
+
if (state.object_scale_x !== 1 || state.object_scale_y !== 1) {
|
|
51
|
+
context.scale(state.object_scale_x, state.object_scale_y);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return res;
|
|
55
|
+
}
|
|
56
|
+
__name(initDrawOp, "initDrawOp");
|
|
57
|
+
function closeDrawOp(context) {
|
|
58
|
+
context.restore();
|
|
59
|
+
}
|
|
60
|
+
__name(closeDrawOp, "closeDrawOp");
|
|
61
|
+
|
|
62
|
+
// src/core/sprite-rendering.ts
|
|
63
|
+
function getSpriteFrame(sprite) {
|
|
64
|
+
if (typeof sprite === "object" && "canvas" in sprite && !("frames" in sprite)) {
|
|
65
|
+
return sprite.canvas || sprite.image || null;
|
|
66
|
+
}
|
|
67
|
+
if (typeof sprite === "object" && sprite.frames && sprite.frames.length > 0) {
|
|
68
|
+
if (!sprite.ready) {
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
if (sprite.frames.length > 1) {
|
|
72
|
+
if (!sprite.animation_start || sprite.animation_start === 0) {
|
|
73
|
+
sprite.animation_start = Date.now();
|
|
74
|
+
}
|
|
75
|
+
const dt = 1e3 / (sprite.fps || 5);
|
|
76
|
+
const frame = Math.floor((Date.now() - sprite.animation_start) / dt) % sprite.frames.length;
|
|
77
|
+
if (frame >= 0 && frame < sprite.frames.length) {
|
|
78
|
+
return sprite.frames[frame].canvas;
|
|
79
|
+
}
|
|
80
|
+
return sprite.frames[0].canvas;
|
|
81
|
+
}
|
|
82
|
+
return sprite.frames[0].canvas;
|
|
83
|
+
}
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
__name(getSpriteFrame, "getSpriteFrame");
|
|
87
|
+
function drawSprite(context, state, sprite, x, y, w, h) {
|
|
88
|
+
const canvas = getSpriteFrame(sprite);
|
|
89
|
+
if (canvas == null) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
if (w == null) {
|
|
93
|
+
w = canvas.width;
|
|
94
|
+
}
|
|
95
|
+
if (!h) {
|
|
96
|
+
h = w / canvas.width * canvas.height;
|
|
97
|
+
}
|
|
98
|
+
context.globalAlpha = state.alpha;
|
|
99
|
+
context.imageSmoothingEnabled = !state.pixelated;
|
|
100
|
+
if (initDrawOp(context, state, x, y)) {
|
|
101
|
+
context.drawImage(canvas, -w / 2 - state.anchor_x * w / 2, -h / 2 + state.anchor_y * h / 2, w, h);
|
|
102
|
+
closeDrawOp(context);
|
|
103
|
+
} else {
|
|
104
|
+
context.drawImage(canvas, x - w / 2 - state.anchor_x * w / 2, y - h / 2 + state.anchor_y * h / 2, w, h);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
__name(drawSprite, "drawSprite");
|
|
108
|
+
function drawSpritePart(context, state, sprite, sx, sy, sw, sh, x, y, w, h) {
|
|
109
|
+
const canvas = getSpriteFrame(sprite);
|
|
110
|
+
if (canvas == null) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
if (w == null) {
|
|
114
|
+
w = canvas.width;
|
|
115
|
+
}
|
|
116
|
+
if (!h) {
|
|
117
|
+
h = w / sw * sh;
|
|
118
|
+
}
|
|
119
|
+
context.globalAlpha = state.alpha;
|
|
120
|
+
context.imageSmoothingEnabled = !state.pixelated;
|
|
121
|
+
if (initDrawOp(context, state, x, y)) {
|
|
122
|
+
context.drawImage(canvas, sx, sy, sw, sh, -w / 2 - state.anchor_x * w / 2, -h / 2 + state.anchor_y * h / 2, w, h);
|
|
123
|
+
closeDrawOp(context);
|
|
124
|
+
} else {
|
|
125
|
+
context.drawImage(canvas, sx, sy, sw, sh, x - w / 2 - state.anchor_x * w / 2, y - h / 2 + state.anchor_y * h / 2, w, h);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
__name(drawSpritePart, "drawSpritePart");
|
|
129
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
130
|
+
0 && (module.exports = {
|
|
131
|
+
drawSprite,
|
|
132
|
+
drawSpritePart,
|
|
133
|
+
getSpriteFrame
|
|
134
|
+
});
|
|
135
|
+
//# sourceMappingURL=sprite-rendering.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/core/sprite-rendering.ts","../../src/core/drawing.ts"],"sourcesContent":["/**\n * Sprite and image rendering for Image class\n * Handles drawing sprites and images onto the canvas\n */\n\nimport type { ImageContextState } from \"./context\";\nimport { closeDrawOp, initDrawOp } from \"./drawing\";\n\nexport interface SpriteSource {\n\tframes?: Array<{\n\t\tcanvas: HTMLCanvasElement;\n\t}>;\n\tcanvas?: HTMLCanvasElement;\n\timage?: HTMLImageElement;\n\tready?: boolean | number;\n\tfps?: number;\n\tanimation_start?: number;\n}\n\nexport function getSpriteFrame(sprite: SpriteSource | string): HTMLCanvasElement | null {\n\t// Handle Image instances\n\tif (typeof sprite === \"object\" && \"canvas\" in sprite && !(\"frames\" in sprite)) {\n\t\treturn sprite.canvas || (sprite.image as any) || null;\n\t}\n\n\t// Handle Sprite instances\n\tif (typeof sprite === \"object\" && sprite.frames && sprite.frames.length > 0) {\n\t\tif (!sprite.ready) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (sprite.frames.length > 1) {\n\t\t\t// Initialize animation_start lazily on first use to ensure animation starts from frame 0\n\t\t\t// This ensures smooth sequential animation: 0->1->2->...->N->0->1->...\n\t\t\tif (!sprite.animation_start || sprite.animation_start === 0) {\n\t\t\t\tsprite.animation_start = Date.now();\n\t\t\t}\n\t\t\tconst dt = 1000 / (sprite.fps || 5);\n\t\t\tconst frame = Math.floor((Date.now() - sprite.animation_start) / dt) % sprite.frames.length;\n\t\t\tif (frame >= 0 && frame < sprite.frames.length) {\n\t\t\t\treturn sprite.frames[frame].canvas;\n\t\t\t}\n\t\t\treturn sprite.frames[0].canvas;\n\t\t}\n\t\treturn sprite.frames[0].canvas;\n\t}\n\n\treturn null;\n}\n\nexport function drawSprite(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tsprite: SpriteSource | string,\n\tx: number,\n\ty: number,\n\tw?: number,\n\th?: number,\n): void {\n\tconst canvas = getSpriteFrame(sprite);\n\tif (canvas == null) {\n\t\treturn;\n\t}\n\n\tif (w == null) {\n\t\tw = canvas.width;\n\t}\n\tif (!h) {\n\t\th = (w / canvas.width) * canvas.height;\n\t}\n\n\tcontext.globalAlpha = state.alpha;\n\tcontext.imageSmoothingEnabled = !state.pixelated;\n\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.drawImage(canvas, -w / 2 - (state.anchor_x * w) / 2, -h / 2 + (state.anchor_y * h) / 2, w, h);\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.drawImage(canvas, x - w / 2 - (state.anchor_x * w) / 2, y - h / 2 + (state.anchor_y * h) / 2, w, h);\n\t}\n}\n\nexport function drawSpritePart(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tsprite: SpriteSource | string,\n\tsx: number,\n\tsy: number,\n\tsw: number,\n\tsh: number,\n\tx: number,\n\ty: number,\n\tw?: number,\n\th?: number,\n): void {\n\tconst canvas = getSpriteFrame(sprite);\n\tif (canvas == null) {\n\t\treturn;\n\t}\n\n\t// Image class uses w = canvas.width (Screen uses w = sw)\n\tif (w == null) {\n\t\tw = canvas.width;\n\t}\n\tif (!h) {\n\t\th = (w / sw) * sh;\n\t}\n\n\tcontext.globalAlpha = state.alpha;\n\tcontext.imageSmoothingEnabled = !state.pixelated;\n\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.drawImage(canvas, sx, sy, sw, sh, -w / 2 - (state.anchor_x * w) / 2, -h / 2 + (state.anchor_y * h) / 2, w, h);\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.drawImage(\n\t\t\tcanvas,\n\t\t\tsx,\n\t\t\tsy,\n\t\t\tsw,\n\t\t\tsh,\n\t\t\tx - w / 2 - (state.anchor_x * w) / 2,\n\t\t\ty - h / 2 + (state.anchor_y * h) / 2,\n\t\t\tw,\n\t\t\th,\n\t\t);\n\t}\n}\n","/**\n * Drawing operations for Image class\n * Handles all drawing primitives (rectangles, circles, lines, etc.)\n */\n\nimport type { ImageContextState } from \"./context\";\n\nexport function initDrawOp(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tobject_transform = true,\n): boolean {\n\tlet res = false;\n\n\tif (state.image_transform) {\n\t\tcontext.save();\n\t\tres = true;\n\t\tcontext.translate(state.translation_x, state.translation_y);\n\t\tcontext.scale(state.scale_x, state.scale_y);\n\t\tcontext.rotate((state.rotation / 180) * Math.PI);\n\t\tcontext.translate(x, y);\n\t}\n\n\tif (object_transform && (state.object_rotation !== 0 || state.object_scale_x !== 1 || state.object_scale_y !== 1)) {\n\t\tif (!res) {\n\t\t\tcontext.save();\n\t\t\tres = true;\n\t\t\tcontext.translate(x, y);\n\t\t}\n\t\tif (state.object_rotation !== 0) {\n\t\t\tcontext.rotate((state.object_rotation / 180) * Math.PI);\n\t\t}\n\t\tif (state.object_scale_x !== 1 || state.object_scale_y !== 1) {\n\t\t\tcontext.scale(state.object_scale_x, state.object_scale_y);\n\t\t}\n\t}\n\n\treturn res;\n}\n\nexport function closeDrawOp(context: CanvasRenderingContext2D): void {\n\tcontext.restore();\n}\n\nexport function fillRect(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tw: number,\n\th: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.fillRect(-w / 2 - (state.anchor_x * w) / 2, -h / 2 + (state.anchor_y * h) / 2, w, h);\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.fillRect(x - w / 2 - (state.anchor_x * w) / 2, y - h / 2 + (state.anchor_y * h) / 2, w, h);\n\t}\n}\n\nexport function fillRoundRect(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tw: number,\n\th: number,\n\tround: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tif (initDrawOp(context, state, x, y)) {\n\t\t(context as any).fillRoundRect(-w / 2 - (state.anchor_x * w) / 2, -h / 2 + (state.anchor_y * h) / 2, w, h, round);\n\t\tcloseDrawOp(context);\n\t} else {\n\t\t(context as any).fillRoundRect(\n\t\t\tx - w / 2 - (state.anchor_x * w) / 2,\n\t\t\ty - h / 2 + (state.anchor_y * h) / 2,\n\t\t\tw,\n\t\t\th,\n\t\t\tround,\n\t\t);\n\t}\n}\n\nexport function fillRound(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tw: number,\n\th: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tw = Math.abs(w);\n\th = Math.abs(h);\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.beginPath();\n\t\tcontext.ellipse((-state.anchor_x * w) / 2, 0 + (state.anchor_y * h) / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false);\n\t\tcontext.fill();\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.beginPath();\n\t\tcontext.ellipse(x - (state.anchor_x * w) / 2, y + (state.anchor_y * h) / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false);\n\t\tcontext.fill();\n\t}\n}\n\nexport function drawRect(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tw: number,\n\th: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.strokeRect(-w / 2 - (state.anchor_x * w) / 2, -h / 2 + (state.anchor_y * h) / 2, w, h);\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.strokeRect(x - w / 2 - (state.anchor_x * w) / 2, y - h / 2 + (state.anchor_y * h) / 2, w, h);\n\t}\n}\n\nexport function drawRoundRect(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tw: number,\n\th: number,\n\tround: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\tif (initDrawOp(context, state, x, y)) {\n\t\t(context as any).strokeRoundRect(-w / 2 - (state.anchor_x * w) / 2, -h / 2 + (state.anchor_y * h) / 2, w, h, round);\n\t\tcloseDrawOp(context);\n\t} else {\n\t\t(context as any).strokeRoundRect(\n\t\t\tx - w / 2 - (state.anchor_x * w) / 2,\n\t\t\ty - h / 2 + (state.anchor_y * h) / 2,\n\t\t\tw,\n\t\t\th,\n\t\t\tround,\n\t\t);\n\t}\n}\n\nexport function drawRound(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx: number,\n\ty: number,\n\tw: number,\n\th: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\tw = Math.abs(w);\n\th = Math.abs(h);\n\tif (initDrawOp(context, state, x, y)) {\n\t\tcontext.beginPath();\n\t\tcontext.ellipse(0 - (state.anchor_x * w) / 2, 0 + (state.anchor_y * h) / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false);\n\t\tcontext.stroke();\n\t\tcloseDrawOp(context);\n\t} else {\n\t\tcontext.beginPath();\n\t\tcontext.ellipse(x - (state.anchor_x * w) / 2, y + (state.anchor_y * h) / 2, w / 2, h / 2, 0, 0, Math.PI * 2, false);\n\t\tcontext.stroke();\n\t}\n}\n\nexport function drawLine(\n\tcontext: CanvasRenderingContext2D,\n\tstate: ImageContextState,\n\tx1: number,\n\ty1: number,\n\tx2: number,\n\ty2: number,\n): void {\n\tcontext.globalAlpha = state.alpha;\n\tcontext.lineWidth = state.line_width;\n\tconst transform = initDrawOp(context, state, 0, 0, false);\n\tcontext.beginPath();\n\tcontext.moveTo(x1, y1);\n\tcontext.lineTo(x2, y2);\n\tcontext.stroke();\n\tif (transform) {\n\t\tcloseDrawOp(context);\n\t}\n}\n"],"mappings":"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","names":["initDrawOp","context","state","x","y","object_transform","res","image_transform","save","translate","translation_x","translation_y","scale","scale_x","scale_y","rotate","rotation","Math","PI","object_rotation","object_scale_x","object_scale_y","closeDrawOp","restore","getSpriteFrame","sprite","canvas","image","frames","length","ready","animation_start","Date","now","dt","fps","frame","Math","floor","drawSprite","context","state","x","y","w","h","width","height","globalAlpha","alpha","imageSmoothingEnabled","pixelated","initDrawOp","drawImage","anchor_x","anchor_y","closeDrawOp","drawSpritePart","sx","sy","sw","sh"]}
|