@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.
Files changed (94) hide show
  1. package/README.md +30 -0
  2. package/dist/blending.d.mts +3 -0
  3. package/dist/blending.d.ts +3 -0
  4. package/dist/blending.js +65 -0
  5. package/dist/blending.js.map +1 -0
  6. package/dist/blending.mjs +40 -0
  7. package/dist/blending.mjs.map +1 -0
  8. package/dist/color-DJyRSbpZ.d.mts +16 -0
  9. package/dist/color-DJyRSbpZ.d.ts +16 -0
  10. package/dist/core/color.d.mts +1 -0
  11. package/dist/core/color.d.ts +1 -0
  12. package/dist/core/color.js +61 -0
  13. package/dist/core/color.js.map +1 -0
  14. package/dist/core/color.mjs +36 -0
  15. package/dist/core/color.mjs.map +1 -0
  16. package/dist/core/context.d.mts +25 -0
  17. package/dist/core/context.d.ts +25 -0
  18. package/dist/core/context.js +77 -0
  19. package/dist/core/context.js.map +1 -0
  20. package/dist/core/context.mjs +53 -0
  21. package/dist/core/context.mjs.map +1 -0
  22. package/dist/core/drawing.d.mts +2 -0
  23. package/dist/core/drawing.d.ts +2 -0
  24. package/dist/core/drawing.js +165 -0
  25. package/dist/core/drawing.js.map +1 -0
  26. package/dist/core/drawing.mjs +134 -0
  27. package/dist/core/drawing.mjs.map +1 -0
  28. package/dist/core/font.d.mts +19 -0
  29. package/dist/core/font.d.ts +19 -0
  30. package/dist/core/font.js +80 -0
  31. package/dist/core/font.js.map +1 -0
  32. package/dist/core/font.mjs +55 -0
  33. package/dist/core/font.mjs.map +1 -0
  34. package/dist/core/image.d.mts +84 -0
  35. package/dist/core/image.d.ts +84 -0
  36. package/dist/core/image.js +1018 -0
  37. package/dist/core/image.js.map +1 -0
  38. package/dist/core/image.mjs +993 -0
  39. package/dist/core/image.mjs.map +1 -0
  40. package/dist/core/map-rendering.d.mts +2 -0
  41. package/dist/core/map-rendering.d.ts +2 -0
  42. package/dist/core/map-rendering.js +95 -0
  43. package/dist/core/map-rendering.js.map +1 -0
  44. package/dist/core/map-rendering.mjs +70 -0
  45. package/dist/core/map-rendering.mjs.map +1 -0
  46. package/dist/core/pixel.d.mts +18 -0
  47. package/dist/core/pixel.d.ts +18 -0
  48. package/dist/core/pixel.js +99 -0
  49. package/dist/core/pixel.js.map +1 -0
  50. package/dist/core/pixel.mjs +73 -0
  51. package/dist/core/pixel.mjs.map +1 -0
  52. package/dist/core/shapes.d.mts +2 -0
  53. package/dist/core/shapes.d.ts +2 -0
  54. package/dist/core/shapes.js +218 -0
  55. package/dist/core/shapes.js.map +1 -0
  56. package/dist/core/shapes.mjs +187 -0
  57. package/dist/core/shapes.mjs.map +1 -0
  58. package/dist/core/sprite-rendering.d.mts +2 -0
  59. package/dist/core/sprite-rendering.d.ts +2 -0
  60. package/dist/core/sprite-rendering.js +135 -0
  61. package/dist/core/sprite-rendering.js.map +1 -0
  62. package/dist/core/sprite-rendering.mjs +108 -0
  63. package/dist/core/sprite-rendering.mjs.map +1 -0
  64. package/dist/core/text.d.mts +2 -0
  65. package/dist/core/text.d.ts +2 -0
  66. package/dist/core/text.js +105 -0
  67. package/dist/core/text.js.map +1 -0
  68. package/dist/core/text.mjs +78 -0
  69. package/dist/core/text.mjs.map +1 -0
  70. package/dist/core/transform.d.mts +2 -0
  71. package/dist/core/transform.d.ts +2 -0
  72. package/dist/core/transform.js +101 -0
  73. package/dist/core/transform.js.map +1 -0
  74. package/dist/core/transform.mjs +71 -0
  75. package/dist/core/transform.mjs.map +1 -0
  76. package/dist/drawing-Bo2U4IUE.d.mts +31 -0
  77. package/dist/drawing-e7iVDl14.d.ts +31 -0
  78. package/dist/index.d.mts +12 -0
  79. package/dist/index.d.ts +12 -0
  80. package/dist/index.js +1098 -0
  81. package/dist/index.js.map +1 -0
  82. package/dist/index.mjs +1066 -0
  83. package/dist/index.mjs.map +1 -0
  84. package/dist/map-rendering-CzeC061I.d.mts +20 -0
  85. package/dist/map-rendering-DcldCBtY.d.ts +20 -0
  86. package/dist/shapes-BY37IuhJ.d.ts +27 -0
  87. package/dist/shapes-CpCwX9Rp.d.mts +27 -0
  88. package/dist/sprite-rendering-Dac9FQ2x.d.ts +30 -0
  89. package/dist/sprite-rendering-DfQuLVXT.d.mts +30 -0
  90. package/dist/text-CIoUSRc-.d.mts +19 -0
  91. package/dist/text-HW25Qq3e.d.ts +19 -0
  92. package/dist/transform-Dqo6bY4r.d.mts +25 -0
  93. package/dist/transform-iwq8WdqR.d.ts +25 -0
  94. package/package.json +43 -0
@@ -0,0 +1,2 @@
1
+ import './context.js';
2
+ export { d as drawArc, a as drawBezierCurve, b as drawPolygon, c as drawPolyline, e as drawQuadCurve, f as fillArc, g as fillPolygon } from '../shapes-BY37IuhJ.js';
@@ -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,2 @@
1
+ import './context.mjs';
2
+ export { S as SpriteSource, d as drawSprite, a as drawSpritePart, g as getSpriteFrame } from '../sprite-rendering-DfQuLVXT.mjs';
@@ -0,0 +1,2 @@
1
+ import './context.js';
2
+ export { S as SpriteSource, d as drawSprite, a as drawSpritePart, g as getSpriteFrame } from '../sprite-rendering-Dac9FQ2x.js';
@@ -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"]}