textmode.js 0.2.0-beta.2 → 0.2.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/textmode.esm.js +1239 -1135
- package/dist/textmode.esm.min.js +1288 -1184
- package/dist/textmode.umd.js +20 -19
- package/dist/textmode.umd.min.js +19 -18
- package/dist/types/export/svg/SVGExporter.d.ts +5 -5
- package/dist/types/export/svg/types.d.ts +9 -0
- package/dist/types/rendering/webgl/DrawQueue.d.ts +2 -0
- package/dist/types/rendering/webgl/InstanceData.d.ts +6 -4
- package/dist/types/rendering/webgl/RenderPipeline.d.ts +7 -0
- package/dist/types/rendering/webgl/RenderState.d.ts +12 -4
- package/dist/types/rendering/webgl/Renderer.d.ts +18 -1
- package/dist/types/rendering/webgl/Shader.d.ts +4 -0
- package/dist/types/rendering/webgl/ShaderManager.d.ts +1 -0
- package/dist/types/rendering/webgl/geometries/BaseGeometry.d.ts +4 -2
- package/dist/types/rendering/webgl/geometries/NoiseGrid.d.ts +1 -0
- package/dist/types/rendering/webgl/types/DrawCommand.d.ts +10 -1
- package/dist/types/rendering/webgl/types/RenderTypes.d.ts +2 -0
- package/dist/types/textmode/mixins/RenderingMixin.d.ts +216 -4
- package/dist/types/textmode/mixins/ShaderMixin.d.ts +1 -0
- package/package.json +1 -1
package/dist/textmode.esm.min.js
CHANGED
|
@@ -1,1030 +1,1114 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var c = (a, t, e) =>
|
|
4
|
-
class
|
|
1
|
+
var K = Object.defineProperty;
|
|
2
|
+
var q = (a, t, e) => t in a ? K(a, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : a[t] = e;
|
|
3
|
+
var c = (a, t, e) => q(a, typeof t != "symbol" ? t + "" : t, e);
|
|
4
|
+
class S extends Error {
|
|
5
5
|
constructor(t, e = {}) {
|
|
6
|
-
super(
|
|
6
|
+
super(S.i(t, e)), this.name = "TextmodeError";
|
|
7
7
|
}
|
|
8
8
|
static i(t, e) {
|
|
9
|
-
let
|
|
9
|
+
let r = t;
|
|
10
10
|
if (e && Object.keys(e).length > 0) {
|
|
11
|
-
|
|
11
|
+
r += `
|
|
12
12
|
|
|
13
13
|
📋 Context:`;
|
|
14
|
-
for (const [
|
|
15
|
-
|
|
16
|
-
- ${
|
|
14
|
+
for (const [i, s] of Object.entries(e))
|
|
15
|
+
r += `
|
|
16
|
+
- ${i}: ${S.o(s)}`;
|
|
17
17
|
}
|
|
18
|
-
return
|
|
18
|
+
return r += `
|
|
19
19
|
|
|
20
|
-
`,
|
|
21
|
-
`,
|
|
20
|
+
`, r += "↓".repeat(24) + `
|
|
21
|
+
`, r;
|
|
22
22
|
}
|
|
23
23
|
static o(t) {
|
|
24
24
|
if (t === null) return "null";
|
|
25
25
|
if (t === void 0) return "undefined";
|
|
26
26
|
if (typeof t == "string") return `"${t}"`;
|
|
27
27
|
if (typeof t == "number" || typeof t == "boolean") return t + "";
|
|
28
|
-
if (Array.isArray(t)) return t.length === 0 ? "[]" : t.length <= 5 ? `[${t.map((e) =>
|
|
28
|
+
if (Array.isArray(t)) return t.length === 0 ? "[]" : t.length <= 5 ? `[${t.map((e) => S.o(e)).join(", ")}]` : `[${t.slice(0, 3).map((e) => S.o(e)).join(", ")}, ... +${t.length - 3} more]`;
|
|
29
29
|
if (typeof t == "object") {
|
|
30
30
|
const e = Object.keys(t);
|
|
31
|
-
return e.length === 0 ? "{}" : e.length <= 3 ? `{ ${e.map((
|
|
31
|
+
return e.length === 0 ? "{}" : e.length <= 3 ? `{ ${e.map((r) => `${r}: ${S.o(t[r])}`).join(", ")} }` : `{ ${e.slice(0, 2).map((r) => `${r}: ${S.o(t[r])}`).join(", ")}, ... +${e.length - 2} more }`;
|
|
32
32
|
}
|
|
33
33
|
return t + "";
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
|
-
var
|
|
37
|
-
const
|
|
36
|
+
var J = ((a) => (a[a.SILENT = 0] = "SILENT", a[a.WARNING = 1] = "WARNING", a[a.ERROR = 2] = "ERROR", a[a.THROW = 3] = "THROW", a))(J || {});
|
|
37
|
+
const A = class A {
|
|
38
38
|
constructor() {
|
|
39
|
-
c(this, "
|
|
39
|
+
c(this, "u", { globalLevel: 3 });
|
|
40
40
|
}
|
|
41
|
-
static
|
|
42
|
-
return
|
|
41
|
+
static p() {
|
|
42
|
+
return A.l || (A.l = new A()), A.l;
|
|
43
43
|
}
|
|
44
|
-
|
|
45
|
-
const
|
|
46
|
-
switch (this.
|
|
44
|
+
_(t, e) {
|
|
45
|
+
const r = "%c[textmode.js] Oops! (╯°□°)╯︵ Something went wrong in your code.", i = "color: #f44336; font-weight: bold; background: #ffebee; padding: 2px 6px; border-radius: 3px;";
|
|
46
|
+
switch (this.u.globalLevel) {
|
|
47
47
|
case 0:
|
|
48
48
|
return !1;
|
|
49
49
|
case 1:
|
|
50
|
-
return console.group(
|
|
50
|
+
return console.group(r, i), console.warn(S.i(t, e)), console.groupEnd(), !1;
|
|
51
51
|
case 2:
|
|
52
|
-
return console.group(
|
|
52
|
+
return console.group(r, i), console.error(S.i(t, e)), console.groupEnd(), !1;
|
|
53
53
|
default:
|
|
54
|
-
throw new
|
|
54
|
+
throw new S(t, e);
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
|
-
|
|
58
|
-
return !!t || (this.
|
|
57
|
+
m(t, e, r) {
|
|
58
|
+
return !!t || (this._(e, r), !1);
|
|
59
59
|
}
|
|
60
|
-
|
|
61
|
-
this.
|
|
60
|
+
v(t) {
|
|
61
|
+
this.u.globalLevel = t;
|
|
62
62
|
}
|
|
63
63
|
};
|
|
64
|
-
c(
|
|
65
|
-
let B =
|
|
66
|
-
const
|
|
67
|
-
function
|
|
68
|
-
|
|
64
|
+
c(A, "l", null);
|
|
65
|
+
let B = A;
|
|
66
|
+
const I = B.p(), Q = /* @__PURE__ */ new WeakMap();
|
|
67
|
+
function D(a, t) {
|
|
68
|
+
Q.set(a, t);
|
|
69
69
|
}
|
|
70
|
-
function
|
|
71
|
-
return
|
|
70
|
+
function U(a) {
|
|
71
|
+
return Q.get(a);
|
|
72
72
|
}
|
|
73
|
-
class
|
|
74
|
-
constructor(t, e,
|
|
75
|
-
c(this, "v");
|
|
73
|
+
class $ {
|
|
74
|
+
constructor(t, e, r = e, i = 1, s = {}) {
|
|
76
75
|
c(this, "C");
|
|
77
|
-
c(this, "
|
|
78
|
-
c(this, "
|
|
79
|
-
c(this, "R");
|
|
76
|
+
c(this, "$");
|
|
77
|
+
c(this, "u");
|
|
78
|
+
c(this, "R", null);
|
|
79
|
+
c(this, "S");
|
|
80
80
|
c(this, "M");
|
|
81
|
-
c(this, "S", []);
|
|
82
|
-
c(this, "A");
|
|
83
|
-
c(this, "P", null);
|
|
84
81
|
c(this, "F", []);
|
|
85
|
-
this
|
|
82
|
+
c(this, "G");
|
|
83
|
+
c(this, "D", null);
|
|
84
|
+
c(this, "P", []);
|
|
85
|
+
this.C = e, this.$ = r, this.u = { filter: "nearest", wrap: "clamp", format: "rgba", type: "unsigned_byte", ...s }, this.S = t, this.G = Math.min(Math.max(1, i), 8);
|
|
86
86
|
const n = t.getParameter(t.MAX_DRAW_BUFFERS), o = t.getParameter(t.MAX_COLOR_ATTACHMENTS);
|
|
87
|
-
this.
|
|
87
|
+
this.G = Math.min(this.G, n, o), this.M = t.createFramebuffer(), this.A(), this.I(), this.P = Array(this.G).fill(null);
|
|
88
88
|
}
|
|
89
|
-
|
|
90
|
-
const t = this.
|
|
91
|
-
for (let s = 0; s < this.
|
|
89
|
+
A() {
|
|
90
|
+
const t = this.S, e = this.u.filter === "linear" ? t.LINEAR : t.NEAREST, r = this.u.wrap === "repeat" ? t.REPEAT : t.CLAMP_TO_EDGE, i = this.u.type === "float" ? t.FLOAT : t.UNSIGNED_BYTE;
|
|
91
|
+
for (let s = 0; s < this.G; s++) {
|
|
92
92
|
const n = t.createTexture();
|
|
93
|
-
t.bindTexture(t.TEXTURE_2D, n), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_MIN_FILTER, e), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_MAG_FILTER, e), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_WRAP_S,
|
|
93
|
+
t.bindTexture(t.TEXTURE_2D, n), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_MIN_FILTER, e), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_MAG_FILTER, e), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_WRAP_S, r), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_WRAP_T, r), t.texImage2D(t.TEXTURE_2D, 0, t.RGBA, this.C, this.$, 0, t.RGBA, i, null), this.F.push(n);
|
|
94
94
|
}
|
|
95
95
|
t.bindTexture(t.TEXTURE_2D, null);
|
|
96
96
|
}
|
|
97
|
-
|
|
98
|
-
const t = this.
|
|
99
|
-
if (t.bindFramebuffer(t.FRAMEBUFFER, this.M), this.
|
|
97
|
+
I() {
|
|
98
|
+
const t = this.S;
|
|
99
|
+
if (t.bindFramebuffer(t.FRAMEBUFFER, this.M), this.G === 1) t.framebufferTexture2D(t.FRAMEBUFFER, t.COLOR_ATTACHMENT0, t.TEXTURE_2D, this.F[0], 0);
|
|
100
100
|
else {
|
|
101
|
-
const
|
|
102
|
-
for (let
|
|
103
|
-
const s = t.COLOR_ATTACHMENT0 +
|
|
104
|
-
t.framebufferTexture2D(t.FRAMEBUFFER, s, t.TEXTURE_2D, this.
|
|
101
|
+
const r = [];
|
|
102
|
+
for (let i = 0; i < this.G; i++) {
|
|
103
|
+
const s = t.COLOR_ATTACHMENT0 + i;
|
|
104
|
+
t.framebufferTexture2D(t.FRAMEBUFFER, s, t.TEXTURE_2D, this.F[i], 0), r.push(s);
|
|
105
105
|
}
|
|
106
|
-
t.drawBuffers(
|
|
106
|
+
t.drawBuffers(r);
|
|
107
107
|
}
|
|
108
108
|
const e = t.checkFramebufferStatus(t.FRAMEBUFFER);
|
|
109
109
|
e !== t.FRAMEBUFFER_COMPLETE && console.error("GLFramebuffer is not complete:", e), t.bindFramebuffer(t.FRAMEBUFFER, null);
|
|
110
110
|
}
|
|
111
|
-
|
|
112
|
-
const e = this.
|
|
113
|
-
e.bindTexture(e.TEXTURE_2D, this.
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
this.
|
|
117
|
-
const
|
|
118
|
-
for (const s of this.
|
|
119
|
-
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
const e = this.
|
|
123
|
-
if (t < 0 || t >= this.
|
|
124
|
-
const
|
|
125
|
-
if (
|
|
126
|
-
const
|
|
127
|
-
e.bindFramebuffer(e.READ_FRAMEBUFFER, this.M), e.readBuffer(e.COLOR_ATTACHMENT0 + t), e.readPixels(0, 0,
|
|
128
|
-
const h = 4 *
|
|
129
|
-
for (let
|
|
130
|
-
const
|
|
131
|
-
l.set(n.subarray(
|
|
111
|
+
L(t) {
|
|
112
|
+
const e = this.S;
|
|
113
|
+
e.bindTexture(e.TEXTURE_2D, this.F[0]), e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL, 1), e.texImage2D(e.TEXTURE_2D, 0, e.RGBA, e.RGBA, e.UNSIGNED_BYTE, t), e.bindTexture(e.TEXTURE_2D, null);
|
|
114
|
+
}
|
|
115
|
+
W(t, e) {
|
|
116
|
+
this.C = t, this.$ = e, this.R = null, this.P = Array(this.G).fill(null);
|
|
117
|
+
const r = this.S, i = this.u.type === "float" ? r.FLOAT : r.UNSIGNED_BYTE;
|
|
118
|
+
for (const s of this.F) r.bindTexture(r.TEXTURE_2D, s), r.texImage2D(r.TEXTURE_2D, 0, r.RGBA, this.C, this.$, 0, r.RGBA, i, null);
|
|
119
|
+
r.bindTexture(r.TEXTURE_2D, null);
|
|
120
|
+
}
|
|
121
|
+
k(t) {
|
|
122
|
+
const e = this.S;
|
|
123
|
+
if (t < 0 || t >= this.G) throw Error(`GLFramebuffer: attachment index ${t} out of range (count=${this.G})`);
|
|
124
|
+
const r = this.P[t];
|
|
125
|
+
if (r) return r;
|
|
126
|
+
const i = this.C, s = this.$, n = new Uint8Array(i * s * 4), o = e.getParameter(e.READ_FRAMEBUFFER_BINDING);
|
|
127
|
+
e.bindFramebuffer(e.READ_FRAMEBUFFER, this.M), e.readBuffer(e.COLOR_ATTACHMENT0 + t), e.readPixels(0, 0, i, s, e.RGBA, e.UNSIGNED_BYTE, n), e.bindFramebuffer(e.READ_FRAMEBUFFER, o);
|
|
128
|
+
const h = 4 * i, l = new Uint8Array(n.length);
|
|
129
|
+
for (let d = 0; d < s; d++) {
|
|
130
|
+
const u = (s - 1 - d) * h, f = d * h;
|
|
131
|
+
l.set(n.subarray(u, u + h), f);
|
|
132
132
|
}
|
|
133
|
-
return this.
|
|
133
|
+
return this.P[t] = l, l;
|
|
134
134
|
}
|
|
135
|
-
|
|
136
|
-
for (let t = 0; t < this.
|
|
135
|
+
U() {
|
|
136
|
+
for (let t = 0; t < this.G; t++) this.k(t);
|
|
137
137
|
}
|
|
138
138
|
V() {
|
|
139
|
-
const t = this.
|
|
140
|
-
this.
|
|
141
|
-
for (let e = 0; e < this.
|
|
142
|
-
t.viewport(0, 0, this.
|
|
139
|
+
const t = this.S;
|
|
140
|
+
this.D = { framebuffer: t.getParameter(t.FRAMEBUFFER_BINDING), viewport: t.getParameter(t.VIEWPORT) }, t.bindFramebuffer(t.FRAMEBUFFER, this.M), this.P = Array(this.G).fill(null);
|
|
141
|
+
for (let e = 0; e < this.G; e++) t.clearBufferfv(t.COLOR, e, new Float32Array([0, 0, 0, 0]));
|
|
142
|
+
t.viewport(0, 0, this.C, this.$), D(t, [0, 0, this.C, this.$]);
|
|
143
143
|
}
|
|
144
144
|
O() {
|
|
145
|
-
if (!this.
|
|
146
|
-
const t = this.
|
|
147
|
-
t.bindFramebuffer(t.FRAMEBUFFER, this.
|
|
145
|
+
if (!this.D) return;
|
|
146
|
+
const t = this.S;
|
|
147
|
+
t.bindFramebuffer(t.FRAMEBUFFER, this.D.framebuffer), t.viewport(...this.D.viewport), D(t, this.D.viewport), this.D = null;
|
|
148
148
|
}
|
|
149
|
-
|
|
150
|
-
const t = this.
|
|
149
|
+
j() {
|
|
150
|
+
const t = this.S;
|
|
151
151
|
this.M && t.deleteFramebuffer(this.M);
|
|
152
|
-
for (const e of this.
|
|
153
|
-
this.
|
|
152
|
+
for (const e of this.F) t.deleteTexture(e);
|
|
153
|
+
this.F = [], this.P = [];
|
|
154
154
|
}
|
|
155
155
|
get width() {
|
|
156
|
-
return this.
|
|
156
|
+
return this.C;
|
|
157
157
|
}
|
|
158
158
|
get height() {
|
|
159
|
-
return this
|
|
159
|
+
return this.$;
|
|
160
160
|
}
|
|
161
161
|
get pixels() {
|
|
162
|
-
return this
|
|
162
|
+
return this.R;
|
|
163
163
|
}
|
|
164
164
|
get options() {
|
|
165
|
-
return { ...this.
|
|
165
|
+
return { ...this.u };
|
|
166
166
|
}
|
|
167
167
|
get framebuffer() {
|
|
168
168
|
return this.M;
|
|
169
169
|
}
|
|
170
170
|
get texture() {
|
|
171
|
-
return this.
|
|
171
|
+
return this.F[0];
|
|
172
172
|
}
|
|
173
173
|
get textures() {
|
|
174
|
-
return [...this.
|
|
174
|
+
return [...this.F];
|
|
175
175
|
}
|
|
176
176
|
get attachmentCount() {
|
|
177
|
-
return this.
|
|
177
|
+
return this.G;
|
|
178
178
|
}
|
|
179
179
|
getAttachmentPixels(t) {
|
|
180
|
-
return this.
|
|
180
|
+
return this.P[t] ?? null;
|
|
181
181
|
}
|
|
182
182
|
}
|
|
183
|
-
class
|
|
184
|
-
constructor(t, e,
|
|
185
|
-
c(this, "
|
|
186
|
-
c(this, "
|
|
187
|
-
c(this, "
|
|
188
|
-
c(this, "
|
|
189
|
-
c(this, "
|
|
190
|
-
c(this, "
|
|
191
|
-
this.
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
const t = this.
|
|
183
|
+
class G {
|
|
184
|
+
constructor(t, e, r) {
|
|
185
|
+
c(this, "S");
|
|
186
|
+
c(this, "H");
|
|
187
|
+
c(this, "X", /* @__PURE__ */ new Map());
|
|
188
|
+
c(this, "Y", /* @__PURE__ */ new Map());
|
|
189
|
+
c(this, "q", 0);
|
|
190
|
+
c(this, "Z");
|
|
191
|
+
this.S = t, this.H = this.N(e, r), this.Z = t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS), this.J();
|
|
192
|
+
}
|
|
193
|
+
J() {
|
|
194
|
+
const t = this.S.getProgramParameter(this.H, this.S.ACTIVE_UNIFORMS);
|
|
195
195
|
for (let e = 0; e < t; e++) {
|
|
196
|
-
const
|
|
197
|
-
if (
|
|
198
|
-
const
|
|
199
|
-
|
|
196
|
+
const r = this.S.getActiveUniform(this.H, e);
|
|
197
|
+
if (r) {
|
|
198
|
+
const i = this.S.getUniformLocation(this.H, r.name);
|
|
199
|
+
i && (this.X.set(r.name, i), this.Y.set(r.name, r.type));
|
|
200
200
|
}
|
|
201
201
|
}
|
|
202
202
|
}
|
|
203
|
-
|
|
204
|
-
const
|
|
205
|
-
if (this.
|
|
206
|
-
const n = this.
|
|
203
|
+
N(t, e) {
|
|
204
|
+
const r = this.K(this.S.VERTEX_SHADER, t), i = this.K(this.S.FRAGMENT_SHADER, e), s = this.S.createProgram();
|
|
205
|
+
if (this.S.attachShader(s, r), this.S.attachShader(s, i), this.S.linkProgram(s), !this.S.getProgramParameter(s, this.S.LINK_STATUS)) {
|
|
206
|
+
const n = this.S.getProgramInfoLog(s);
|
|
207
207
|
throw Error("Shader program link error: " + n);
|
|
208
208
|
}
|
|
209
|
-
return this.
|
|
209
|
+
return this.S.deleteShader(r), this.S.deleteShader(i), s;
|
|
210
210
|
}
|
|
211
|
-
|
|
212
|
-
const
|
|
213
|
-
if (this.
|
|
214
|
-
const
|
|
215
|
-
throw this.
|
|
211
|
+
K(t, e) {
|
|
212
|
+
const r = this.S.createShader(t);
|
|
213
|
+
if (this.S.shaderSource(r, e), this.S.compileShader(r), !this.S.getShaderParameter(r, this.S.COMPILE_STATUS)) {
|
|
214
|
+
const i = this.S.getShaderInfoLog(r);
|
|
215
|
+
throw this.S.deleteShader(r), Error("Shader compilation error: " + i);
|
|
216
216
|
}
|
|
217
|
-
return
|
|
218
|
-
}
|
|
219
|
-
K() {
|
|
220
|
-
this.R.useProgram(this.j), this.tt();
|
|
217
|
+
return r;
|
|
221
218
|
}
|
|
222
219
|
tt() {
|
|
223
|
-
this.
|
|
220
|
+
this.S.useProgram(this.H), this.et();
|
|
221
|
+
}
|
|
222
|
+
et() {
|
|
223
|
+
this.q = 0;
|
|
224
|
+
}
|
|
225
|
+
st(t) {
|
|
226
|
+
for (const [e, r] of Object.entries(t)) this.it(e, r);
|
|
224
227
|
}
|
|
225
|
-
|
|
226
|
-
|
|
228
|
+
rt(t) {
|
|
229
|
+
return this.X.has(t);
|
|
227
230
|
}
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
231
|
+
it(t, e) {
|
|
232
|
+
if (this.S.getParameter(this.S.CURRENT_PROGRAM) !== this.H) return void console.warn(`Attempting to set uniform '${t}' on shader that is not currently bound`);
|
|
233
|
+
const r = this.X.get(t);
|
|
234
|
+
if (r) if (typeof e == "number") this.S.uniform1f(r, e);
|
|
235
|
+
else if (typeof e == "boolean") this.S.uniform1i(r, e ? 1 : 0);
|
|
232
236
|
else if (Array.isArray(e)) switch (e.length) {
|
|
233
237
|
case 2:
|
|
234
|
-
this.
|
|
238
|
+
this.S.uniform2f(r, e[0], e[1]);
|
|
235
239
|
break;
|
|
236
240
|
case 3:
|
|
237
|
-
this.
|
|
241
|
+
this.S.uniform3f(r, e[0], e[1], e[2]);
|
|
238
242
|
break;
|
|
239
243
|
case 4:
|
|
240
|
-
this.
|
|
244
|
+
this.S.uniform4f(r, e[0], e[1], e[2], e[3]);
|
|
241
245
|
break;
|
|
242
246
|
default:
|
|
243
247
|
console.warn(`Unsupported array length ${e.length} for uniform '${t}'`);
|
|
244
248
|
}
|
|
245
249
|
else if (e instanceof WebGLTexture) {
|
|
246
|
-
const
|
|
247
|
-
this.
|
|
248
|
-
} else if (e instanceof
|
|
249
|
-
const
|
|
250
|
-
this.
|
|
250
|
+
const i = this.nt();
|
|
251
|
+
this.S.uniform1i(r, i), this.S.activeTexture(this.S.TEXTURE0 + i), this.S.bindTexture(this.S.TEXTURE_2D, e);
|
|
252
|
+
} else if (e instanceof $) {
|
|
253
|
+
const i = this.nt();
|
|
254
|
+
this.S.uniform1i(r, i), this.S.activeTexture(this.S.TEXTURE0 + i), this.S.bindTexture(this.S.TEXTURE_2D, e.texture);
|
|
251
255
|
} else if (typeof e == "object" && "texture" in e) {
|
|
252
|
-
const
|
|
253
|
-
this.
|
|
256
|
+
const i = this.nt();
|
|
257
|
+
this.S.uniform1i(r, i), this.S.activeTexture(this.S.TEXTURE0 + i), this.S.bindTexture(this.S.TEXTURE_2D, e.texture);
|
|
254
258
|
} else console.warn(`Unsupported uniform type for '${t}':`, typeof e);
|
|
255
259
|
}
|
|
256
|
-
|
|
257
|
-
return this.
|
|
260
|
+
nt() {
|
|
261
|
+
return this.q >= this.Z && console.warn(`Exceeded maximum texture units (${this.Z}). Texture may not render correctly.`), this.q++;
|
|
258
262
|
}
|
|
259
|
-
get
|
|
260
|
-
return this.
|
|
263
|
+
get ot() {
|
|
264
|
+
return this.H;
|
|
261
265
|
}
|
|
262
|
-
|
|
263
|
-
this.
|
|
266
|
+
j() {
|
|
267
|
+
this.S.deleteProgram(this.H);
|
|
264
268
|
}
|
|
265
269
|
}
|
|
266
|
-
class
|
|
270
|
+
class tt {
|
|
267
271
|
constructor() {
|
|
268
|
-
c(this, "
|
|
269
|
-
c(this, "
|
|
270
|
-
c(this, "
|
|
271
|
-
c(this, "
|
|
272
|
-
c(this, "
|
|
273
|
-
c(this, "
|
|
274
|
-
c(this, "ft", !1);
|
|
275
|
-
c(this, "dt", !1);
|
|
276
|
-
c(this, "gt", [0, 0]);
|
|
272
|
+
c(this, "ht", 1);
|
|
273
|
+
c(this, "ct", 0);
|
|
274
|
+
c(this, "lt", 0);
|
|
275
|
+
c(this, "ut", 0);
|
|
276
|
+
c(this, "ft", [0, 0, 0]);
|
|
277
|
+
c(this, "dt", [1, 1, 1, 1]);
|
|
277
278
|
c(this, "_t", [0, 0, 0, 1]);
|
|
278
|
-
c(this, "
|
|
279
|
+
c(this, "gt", !1);
|
|
280
|
+
c(this, "vt", !1);
|
|
281
|
+
c(this, "xt", !1);
|
|
282
|
+
c(this, "Ct", [0, 0]);
|
|
283
|
+
c(this, "yt", [0, 0, 0, 1]);
|
|
284
|
+
c(this, "wt", []);
|
|
279
285
|
}
|
|
280
|
-
|
|
281
|
-
this.
|
|
286
|
+
$t() {
|
|
287
|
+
this.wt.push({ lineWeight: this.ht, rotationX: this.ct, rotationY: this.lt, rotationZ: this.ut, charRotation: [...this.Ct], flipHorizontally: this.gt, flipVertically: this.vt, invert: this.xt, character: [...this.ft], charColor: [...this.dt], cellColor: [...this._t] });
|
|
282
288
|
}
|
|
283
|
-
|
|
284
|
-
const t = this.
|
|
285
|
-
t ? (this.
|
|
289
|
+
bt() {
|
|
290
|
+
const t = this.wt.pop();
|
|
291
|
+
t ? (this.ht = t.lineWeight, this.ct = t.rotationX, this.lt = t.rotationY, this.ut = t.rotationZ, this.Ct = t.charRotation, this.gt = t.flipHorizontally, this.vt = t.flipVertically, this.xt = t.invert, this.ft = t.character, this.dt = t.charColor, this._t = t.cellColor) : console.warn("pop() called without matching push()");
|
|
286
292
|
}
|
|
287
|
-
|
|
288
|
-
this.
|
|
293
|
+
zt() {
|
|
294
|
+
this.wt = [], this.ct = 0, this.lt = 0, this.ut = 0;
|
|
289
295
|
}
|
|
290
|
-
|
|
291
|
-
t.lineWeight = this.
|
|
296
|
+
Rt(t) {
|
|
297
|
+
t.lineWeight = this.ht, t.rotationX = this.ct, t.rotationY = this.lt, t.rotationZ = this.ut, t.character[0] = this.ft[0], t.character[1] = this.ft[1], t.character[2] = this.ft[2], t.charColor[0] = this.dt[0], t.charColor[1] = this.dt[1], t.charColor[2] = this.dt[2], t.charColor[3] = this.dt[3], t.bgColor[0] = this._t[0], t.bgColor[1] = this._t[1], t.bgColor[2] = this._t[2], t.bgColor[3] = this._t[3], t.flipHorizontally = this.gt, t.flipVertically = this.vt, t.invert = this.xt, t.charRotation[0] = this.Ct[0], t.charRotation[1] = this.Ct[1];
|
|
292
298
|
}
|
|
293
299
|
get lineWeight() {
|
|
294
|
-
return this.
|
|
300
|
+
return this.ht;
|
|
295
301
|
}
|
|
296
302
|
get canvasBackgroundColor() {
|
|
297
|
-
return this.
|
|
298
|
-
}
|
|
299
|
-
$t(t) {
|
|
300
|
-
this.nt = Math.abs(t);
|
|
301
|
-
}
|
|
302
|
-
bt(t) {
|
|
303
|
-
this.ot = t;
|
|
303
|
+
return this.yt;
|
|
304
304
|
}
|
|
305
305
|
Tt(t) {
|
|
306
|
-
this.ht = t;
|
|
307
|
-
}
|
|
308
|
-
zt(t, e, i, r = 255) {
|
|
309
|
-
this.ct = [t / 255, e / 255, i / 255, r / 255];
|
|
306
|
+
this.ht = Math.abs(t);
|
|
310
307
|
}
|
|
311
|
-
|
|
312
|
-
this.
|
|
308
|
+
St(t) {
|
|
309
|
+
this.ct = t;
|
|
313
310
|
}
|
|
314
311
|
Mt(t) {
|
|
312
|
+
this.lt = t;
|
|
313
|
+
}
|
|
314
|
+
Ft(t) {
|
|
315
315
|
this.ut = t;
|
|
316
316
|
}
|
|
317
|
-
|
|
317
|
+
Gt(t) {
|
|
318
318
|
this.ft = t;
|
|
319
319
|
}
|
|
320
|
+
Dt(t, e, r, i = 255) {
|
|
321
|
+
this.dt = [t / 255, e / 255, r / 255, i / 255];
|
|
322
|
+
}
|
|
323
|
+
Pt(t, e, r, i = 255) {
|
|
324
|
+
this._t = [t / 255, e / 255, r / 255, i / 255];
|
|
325
|
+
}
|
|
320
326
|
At(t) {
|
|
321
|
-
this.
|
|
327
|
+
this.gt = t;
|
|
328
|
+
}
|
|
329
|
+
Bt(t) {
|
|
330
|
+
this.vt = t;
|
|
331
|
+
}
|
|
332
|
+
It(t) {
|
|
333
|
+
this.xt = t;
|
|
322
334
|
}
|
|
323
|
-
|
|
324
|
-
const e = 255 * t / 360,
|
|
325
|
-
this.
|
|
335
|
+
Lt(t) {
|
|
336
|
+
const e = 255 * t / 360, r = Math.floor(e) / 255, i = Math.round(e - Math.floor(e));
|
|
337
|
+
this.Ct = [r, i];
|
|
326
338
|
}
|
|
327
|
-
|
|
328
|
-
this.
|
|
339
|
+
Et(t, e, r, i) {
|
|
340
|
+
this.yt = [t / 255, e / 255, r / 255, i / 255];
|
|
329
341
|
}
|
|
330
342
|
}
|
|
331
|
-
var
|
|
332
|
-
|
|
343
|
+
var O = `#version 300 es
|
|
344
|
+
in vec2 a_position;in vec2 a_texCoord;in vec2 a_instancePosition;in vec2 a_instanceSize;in vec3 a_instanceCharacter;in vec4 a_instancePrimaryColor;in vec4 a_instanceSecondaryColor;in vec2 a_instanceRotation;in vec3 a_instanceTransform;in vec3 a_instanceGlobalRotation;in vec2 a_instanceRotationCenter;in vec2 a_instanceBezierCP1;in vec2 a_instanceBezierCP2;in vec2 a_instanceBezierStart;in vec2 a_instanceBezierEnd;in vec2 a_instanceArcAngles;uniform float u_aspectRatio;uniform vec2 u_viewportSize;out vec2 v_uv;out vec3 v_character;out vec4 v_primaryColor;out vec4 v_secondaryColor;out vec2 v_rotation;out vec3 v_transform;mat3 rotateX(float a){float s=sin(a),c=cos(a);return mat3(1,0,0,0,c,-s,0,s,c);}mat3 rotateY(float a){float s=sin(a),c=cos(a);return mat3(c,0,s,0,1,0,-s,0,c);}mat3 rotateZ(float a){float s=sin(a),c=cos(a);return mat3(c,-s,0,s,c,0,0,0,1);}vec2 evaluateBezier(float t,vec2 p0,vec2 p1,vec2 p2,vec2 p3){float u=1.-t,u2=u*u,t2=t*t;return u2*u*p0+3.*u2*t*p1+3.*u*t2*p2+t2*t*p3;}vec2 evaluateBezierDerivative(float t,vec2 p0,vec2 p1,vec2 p2,vec2 p3){float u=1.-t,u2=u*u,t2=t*t;return-3.*u2*p0+3.*u2*p1-6.*u*t*p1+6.*u*t*p2-3.*t2*p2+3.*t2*p3;}void main(){v_uv=a_texCoord;v_character=a_instanceCharacter;v_primaryColor=a_instancePrimaryColor;v_secondaryColor=a_instanceSecondaryColor;v_rotation=a_instanceRotation;v_transform=a_instanceTransform;vec2 worldPosition;bool isBezier=length(a_instanceBezierCP1)+length(a_instanceBezierCP2)+length(a_instanceBezierStart)+length(a_instanceBezierEnd)>0.;bool isArc=a_instanceArcAngles.x!=0.||a_instanceArcAngles.y!=0.;if(isBezier){float t=a_position.x;vec2 curvePoint=evaluateBezier(t,a_instanceBezierStart,a_instanceBezierCP1,a_instanceBezierCP2,a_instanceBezierEnd);vec2 tangent=evaluateBezierDerivative(t,a_instanceBezierStart,a_instanceBezierCP1,a_instanceBezierCP2,a_instanceBezierEnd);float tLen=length(tangent);tangent=tLen>0.?tangent/tLen:vec2(1,0);worldPosition=curvePoint+vec2(-tangent.y,tangent.x)*a_position.y*a_instanceSize.y;}else if(isArc){float s=a_instanceArcAngles.x,e=a_instanceArcAngles.y;s=mod(s,6.28318530718);if(s<0.)s+=6.28318530718;e=mod(e,6.28318530718);if(e<0.)e+=6.28318530718;float d=s-e;if(d<=0.)d+=6.28318530718;float angle=s-a_position.x*d;vec2 local=vec2(cos(angle),sin(angle))*a_position.y;worldPosition=local*a_instanceSize*.5+a_instanceSize*.5+a_instancePosition;}else{worldPosition=a_position*a_instanceSize+a_instancePosition;}vec2 ndc=(worldPosition/u_viewportSize)*2.-1.;ndc.y=-ndc.y;if(length(a_instanceGlobalRotation)>0.){vec3 pos3D=vec3(ndc-a_instanceRotationCenter,0);pos3D.x*=u_aspectRatio;if(a_instanceGlobalRotation.x!=0.)pos3D=rotateX(-a_instanceGlobalRotation.x)*pos3D;if(a_instanceGlobalRotation.y!=0.)pos3D=rotateY(-a_instanceGlobalRotation.y)*pos3D;if(a_instanceGlobalRotation.z!=0.)pos3D=rotateZ(-a_instanceGlobalRotation.z)*pos3D;pos3D.x/=u_aspectRatio;ndc=pos3D.xy+a_instanceRotationCenter;}gl_Position=vec4(ndc,0,1);}`, x = ((a) => (a.RECTANGLE = "rectangle", a.LINE = "line", a.ELLIPSE = "ellipse", a.ARC = "arc", a.TRIANGLE = "triangle", a.BEZIER_CURVE = "bezier_curve", a.CUSTOM = "custom", a))(x || {});
|
|
345
|
+
class et {
|
|
333
346
|
constructor(t) {
|
|
334
|
-
c(this, "
|
|
335
|
-
c(this, "
|
|
336
|
-
this.
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
const s = this.
|
|
340
|
-
let n = this.
|
|
341
|
-
n || (n = /* @__PURE__ */ new Map(), this.
|
|
347
|
+
c(this, "S");
|
|
348
|
+
c(this, "Wt", /* @__PURE__ */ new Map());
|
|
349
|
+
this.S = t;
|
|
350
|
+
}
|
|
351
|
+
kt(t, e, r, i) {
|
|
352
|
+
const s = this.S;
|
|
353
|
+
let n = this.Wt.get(t);
|
|
354
|
+
n || (n = /* @__PURE__ */ new Map(), this.Wt.set(t, n));
|
|
342
355
|
let o = n.get(e) || null;
|
|
343
356
|
if (!o) {
|
|
344
|
-
o = s.createVertexArray(), n.set(e, o), s.bindVertexArray(o), s.bindBuffer(s.ARRAY_BUFFER,
|
|
357
|
+
o = s.createVertexArray(), n.set(e, o), s.bindVertexArray(o), s.bindBuffer(s.ARRAY_BUFFER, i);
|
|
345
358
|
const h = s.getAttribLocation(t, "a_position");
|
|
346
|
-
h !== -1 && (s.enableVertexAttribArray(h), s.vertexAttribPointer(h,
|
|
359
|
+
h !== -1 && (s.enableVertexAttribArray(h), s.vertexAttribPointer(h, r.attributes.position.size, s.FLOAT, !1, r.stride, r.attributes.position.offset), s.vertexAttribDivisor(h, 0));
|
|
347
360
|
const l = s.getAttribLocation(t, "a_texCoord");
|
|
348
|
-
l !== -1 && (s.enableVertexAttribArray(l), s.vertexAttribPointer(l,
|
|
361
|
+
l !== -1 && (s.enableVertexAttribArray(l), s.vertexAttribPointer(l, r.attributes.texCoord.size, s.FLOAT, !1, r.stride, r.attributes.texCoord.offset), s.vertexAttribDivisor(l, 0));
|
|
349
362
|
}
|
|
350
363
|
s.bindVertexArray(o);
|
|
351
364
|
}
|
|
352
|
-
|
|
353
|
-
this.
|
|
365
|
+
Ut() {
|
|
366
|
+
this.S.bindVertexArray(null);
|
|
354
367
|
}
|
|
355
|
-
|
|
356
|
-
const t = this.
|
|
357
|
-
for (const [, e] of this.
|
|
358
|
-
this.
|
|
368
|
+
j() {
|
|
369
|
+
const t = this.S;
|
|
370
|
+
for (const [, e] of this.Wt) for (const [, r] of e) r && t.deleteVertexArray(r);
|
|
371
|
+
this.Wt.clear();
|
|
359
372
|
}
|
|
360
373
|
}
|
|
361
|
-
class
|
|
374
|
+
class rt {
|
|
362
375
|
constructor(t) {
|
|
363
|
-
c(this, "
|
|
364
|
-
c(this, "
|
|
365
|
-
this
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
376
|
+
c(this, "Vt");
|
|
377
|
+
c(this, "S");
|
|
378
|
+
c(this, "Ot", null);
|
|
379
|
+
c(this, "jt", null);
|
|
380
|
+
c(this, "Ht", null);
|
|
381
|
+
this.S = t, this.Vt = new et(t);
|
|
382
|
+
}
|
|
383
|
+
Xt(t, e, r) {
|
|
384
|
+
const { shader: i } = t, s = U(this.S) || this.S.getParameter(this.S.VIEWPORT), n = { u_aspectRatio: s[2] / s[3], u_viewportSize: [s[2], s[3]] }, o = {};
|
|
385
|
+
for (const [u, f] of Object.entries(n)) i.rt(u) && (o[u] = f);
|
|
386
|
+
Object.keys(o).length > 0 && i.st(o);
|
|
387
|
+
const h = (u) => {
|
|
388
|
+
if (!u || !u.Yt()) return;
|
|
389
|
+
const f = u.unitGeometry, g = u.unitBuffer;
|
|
373
390
|
try {
|
|
374
|
-
this.
|
|
391
|
+
this.Vt.kt(i.ot, u.type + "", f, g), u.batch.qt(i), u.batch.Zt(f.primitiveType, f.vertexCount);
|
|
375
392
|
} finally {
|
|
376
|
-
|
|
393
|
+
u.batch.Nt(i), this.Vt.Ut(), u.Qt();
|
|
377
394
|
}
|
|
378
395
|
};
|
|
379
|
-
let
|
|
380
|
-
for (const
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
396
|
+
let l = null, d = null;
|
|
397
|
+
for (const u of e) {
|
|
398
|
+
if (u.type === x.CUSTOM) {
|
|
399
|
+
d && (h(d), l = null, d = null), this.Jt(t, u.params, u.state, r.get(x.RECTANGLE) || null);
|
|
400
|
+
continue;
|
|
401
|
+
}
|
|
402
|
+
l !== null && u.type !== l && (h(d), l = null, d = null);
|
|
403
|
+
let f = d;
|
|
404
|
+
f && u.type === l || (f = r.get(u.type) || null, d = f, l = u.type), f && f.Kt(u.params, u.state);
|
|
384
405
|
}
|
|
385
|
-
|
|
406
|
+
h(d);
|
|
407
|
+
}
|
|
408
|
+
Jt(t, e, r, i) {
|
|
409
|
+
if (!i) return;
|
|
410
|
+
const { x: s, y: n, width: o, height: h, shader: l, uniforms: d } = e, u = this.S;
|
|
411
|
+
l.tt(), i.Qt();
|
|
412
|
+
const f = this.te(Math.max(1, Math.floor(o)), Math.max(1, Math.floor(h)));
|
|
413
|
+
f.V(), l.tt(), d && Object.keys(d).length && l.st(d);
|
|
414
|
+
{
|
|
415
|
+
const y = U(u) || u.getParameter(u.VIEWPORT);
|
|
416
|
+
l.rt("u_aspectRatio") && l.it("u_aspectRatio", y[2] / y[3]), l.rt("u_viewportSize") && l.it("u_viewportSize", [y[2], y[3]]);
|
|
417
|
+
}
|
|
418
|
+
const g = { ...r, rotationX: 0, rotationY: 0, rotationZ: 0 };
|
|
419
|
+
if (i.Kt({ x: 0, y: 0, width: f.width, height: f.height }, g), i.Yt()) {
|
|
420
|
+
const y = i.unitGeometry, P = i.unitBuffer;
|
|
421
|
+
try {
|
|
422
|
+
this.Vt.kt(l.ot, i.type + "", y, P), i.batch.qt(l), i.batch.Zt(y.primitiveType, y.vertexCount);
|
|
423
|
+
} finally {
|
|
424
|
+
i.batch.Nt(l), this.Vt.Ut(), i.Qt();
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
f.O();
|
|
428
|
+
const p = this.ee();
|
|
429
|
+
p.tt(), p.st({ u_src0: f.textures[0], u_src1: f.textures[1], u_src2: f.textures[2], u_src3: f.textures[3], u_src4: f.textures[4], u_srcSize: [f.width, f.height] });
|
|
430
|
+
const m = U(u) || u.getParameter(u.VIEWPORT);
|
|
431
|
+
p.rt("u_aspectRatio") && p.it("u_aspectRatio", m[2] / m[3]), p.rt("u_viewportSize") && p.it("u_viewportSize", [m[2], m[3]]);
|
|
432
|
+
const E = Math.floor(s), v = Math.floor(n), b = Math.max(1, Math.floor(o)), _ = Math.max(1, Math.floor(h));
|
|
433
|
+
if (i.Kt({ x: E, y: v, width: b, height: _ }, r), i.Yt()) {
|
|
434
|
+
const y = i.unitGeometry, P = i.unitBuffer;
|
|
435
|
+
try {
|
|
436
|
+
this.Vt.kt(p.ot, i.type + "", y, P), i.batch.qt(p), i.batch.Zt(y.primitiveType, y.vertexCount);
|
|
437
|
+
} finally {
|
|
438
|
+
i.batch.Nt(p), this.Vt.Ut(), i.Qt();
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
t.shader.tt();
|
|
442
|
+
}
|
|
443
|
+
ee() {
|
|
444
|
+
return this.Ot || (this.Ot = new G(this.S, O, `#version 300 es
|
|
445
|
+
precision highp float;in vec2 v_uv;uniform sampler2D u_src0;uniform sampler2D u_src1;uniform sampler2D u_src2;uniform sampler2D u_src3;uniform sampler2D u_src4;uniform vec2 u_srcSize;layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;layout(location=3)out vec4 o_rotation;layout(location=4)out vec4 o_transform;void main(){vec2 uvTex=v_uv*u_srcSize;vec2 uvQ=(floor(uvTex)+0.5f)/u_srcSize;o_character=texture(u_src0,uvQ);o_primaryColor=texture(u_src1,uvQ);o_secondaryColor=texture(u_src2,uvQ);o_rotation=texture(u_src3,uvQ);o_transform=texture(u_src4,uvQ);}`)), this.Ot;
|
|
446
|
+
}
|
|
447
|
+
te(t, e) {
|
|
448
|
+
return this.jt && this.Ht && this.Ht.w === t && this.Ht.h === e || (this.jt && this.jt.j(), this.jt = new $(this.S, t, e, 5), this.Ht = { w: t, h: e }), this.jt;
|
|
386
449
|
}
|
|
387
450
|
}
|
|
388
451
|
class it {
|
|
389
452
|
constructor() {
|
|
390
|
-
c(this, "
|
|
391
|
-
c(this, "
|
|
392
|
-
c(this, "
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
if (this.
|
|
396
|
-
const
|
|
397
|
-
this.
|
|
453
|
+
c(this, "se", []);
|
|
454
|
+
c(this, "ie", 1);
|
|
455
|
+
c(this, "re", 0);
|
|
456
|
+
}
|
|
457
|
+
ne(t) {
|
|
458
|
+
if (this.re >= this.se.length) {
|
|
459
|
+
const r = { id: this.ie++, type: t, params: {}, state: { lineWeight: 1, rotationX: 0, rotationY: 0, rotationZ: 0, character: [0, 0, 0], charColor: [1, 1, 1, 1], bgColor: [0, 0, 0, 1], flipHorizontally: !1, flipVertically: !1, invert: !1, charRotation: [0, 0] } };
|
|
460
|
+
this.se.push(r);
|
|
398
461
|
}
|
|
399
|
-
const e = this.
|
|
400
|
-
switch (e.id = this.
|
|
401
|
-
case
|
|
402
|
-
case
|
|
462
|
+
const e = this.se[this.re];
|
|
463
|
+
switch (e.id = this.ie++, e.type = t, t) {
|
|
464
|
+
case x.RECTANGLE:
|
|
465
|
+
case x.ELLIPSE:
|
|
403
466
|
e.params && "width" in e.params || (e.params = { x: 0, y: 0, width: 0, height: 0 });
|
|
404
467
|
break;
|
|
405
|
-
case
|
|
468
|
+
case x.CUSTOM:
|
|
469
|
+
e.params && "shader" in e.params || (e.params = { x: 0, y: 0, width: 0, height: 0, shader: void 0, uniforms: {} });
|
|
470
|
+
break;
|
|
471
|
+
case x.ARC:
|
|
406
472
|
e.params && "start" in e.params || (e.params = { x: 0, y: 0, width: 0, height: 0, start: 0, stop: 0 });
|
|
407
473
|
break;
|
|
408
|
-
case
|
|
474
|
+
case x.LINE:
|
|
409
475
|
e.params && "x2" in e.params || (e.params = { x1: 0, y1: 0, x2: 0, y2: 0, thickness: void 0 });
|
|
410
476
|
break;
|
|
411
|
-
case
|
|
477
|
+
case x.TRIANGLE:
|
|
412
478
|
e.params && "x3" in e.params || (e.params = { x1: 0, y1: 0, x2: 0, y2: 0, x3: 0, y3: 0 });
|
|
413
479
|
break;
|
|
414
|
-
case
|
|
480
|
+
case x.BEZIER_CURVE:
|
|
415
481
|
e.params && "cp2y" in e.params || (e.params = { x1: 0, y1: 0, cp1x: 0, cp1y: 0, cp2x: 0, cp2y: 0, x2: 0, y2: 0, thickness: void 0 });
|
|
416
482
|
break;
|
|
417
483
|
default:
|
|
418
484
|
e.params || (e.params = {});
|
|
419
485
|
}
|
|
420
|
-
return this.
|
|
486
|
+
return this.re++, e;
|
|
487
|
+
}
|
|
488
|
+
oe(t, e, r, i, s) {
|
|
489
|
+
const n = this.ne(x.RECTANGLE);
|
|
490
|
+
return n.params.x = t, n.params.y = e, n.params.width = r, n.params.height = i, s.Rt(n.state), n.id;
|
|
421
491
|
}
|
|
422
|
-
|
|
423
|
-
const
|
|
424
|
-
return
|
|
492
|
+
ae(t, e, r, i, s, n, o) {
|
|
493
|
+
const h = this.ne(x.CUSTOM);
|
|
494
|
+
return h.params.x = t, h.params.y = e, h.params.width = r, h.params.height = i, h.params.shader = s, h.params.uniforms = n, o.Rt(h.state), h.id;
|
|
425
495
|
}
|
|
426
|
-
|
|
427
|
-
const o = this.
|
|
428
|
-
return o.params.x1 = t, o.params.y1 = e, o.params.x2 =
|
|
496
|
+
he(t, e, r, i, s, n) {
|
|
497
|
+
const o = this.ne(x.LINE);
|
|
498
|
+
return o.params.x1 = t, o.params.y1 = e, o.params.x2 = r, o.params.y2 = i, o.params.thickness = s, n.Rt(o.state), o.id;
|
|
429
499
|
}
|
|
430
|
-
|
|
431
|
-
const n = this.
|
|
432
|
-
return n.params.x = t, n.params.y = e, n.params.width =
|
|
500
|
+
ce(t, e, r, i, s) {
|
|
501
|
+
const n = this.ne(x.ELLIPSE);
|
|
502
|
+
return n.params.x = t, n.params.y = e, n.params.width = r, n.params.height = i, s.Rt(n.state), n.id;
|
|
433
503
|
}
|
|
434
|
-
|
|
435
|
-
const h = this.
|
|
436
|
-
return h.params.x = t, h.params.y = e, h.params.width =
|
|
504
|
+
le(t, e, r, i, s, n, o) {
|
|
505
|
+
const h = this.ne(x.ARC);
|
|
506
|
+
return h.params.x = t, h.params.y = e, h.params.width = r, h.params.height = i, h.params.start = s, h.params.stop = n, o.Rt(h.state), h.id;
|
|
437
507
|
}
|
|
438
|
-
|
|
439
|
-
const h = this.
|
|
440
|
-
return h.params.x1 = t, h.params.y1 = e, h.params.x2 =
|
|
508
|
+
ue(t, e, r, i, s, n, o) {
|
|
509
|
+
const h = this.ne(x.TRIANGLE);
|
|
510
|
+
return h.params.x1 = t, h.params.y1 = e, h.params.x2 = r, h.params.y2 = i, h.params.x3 = s, h.params.y3 = n, o.Rt(h.state), h.id;
|
|
441
511
|
}
|
|
442
|
-
|
|
443
|
-
const
|
|
444
|
-
return
|
|
512
|
+
fe(t, e, r, i, s, n, o, h, l, d) {
|
|
513
|
+
const u = this.ne(x.BEZIER_CURVE);
|
|
514
|
+
return u.params.x1 = t, u.params.y1 = e, u.params.cp1x = r, u.params.cp1y = i, u.params.cp2x = s, u.params.cp2y = n, u.params.x2 = o, u.params.y2 = h, u.params.thickness = l, d.Rt(u.state), u.id;
|
|
445
515
|
}
|
|
446
516
|
get length() {
|
|
447
|
-
return this.
|
|
517
|
+
return this.re;
|
|
448
518
|
}
|
|
449
519
|
get isEmpty() {
|
|
450
|
-
return this.
|
|
520
|
+
return this.re === 0;
|
|
451
521
|
}
|
|
452
|
-
|
|
453
|
-
this.
|
|
522
|
+
de() {
|
|
523
|
+
this.re = 0;
|
|
454
524
|
}
|
|
455
525
|
[Symbol.iterator]() {
|
|
456
526
|
let t = 0;
|
|
457
|
-
const e = this.
|
|
458
|
-
return { next: () => t < e ? { value:
|
|
527
|
+
const e = this.re, r = this.se;
|
|
528
|
+
return { next: () => t < e ? { value: r[t++], done: !1 } : { value: void 0, done: !0 } };
|
|
459
529
|
}
|
|
460
530
|
}
|
|
461
|
-
const
|
|
462
|
-
static
|
|
463
|
-
var n, o, h, l, u, f,
|
|
464
|
-
const
|
|
465
|
-
let s =
|
|
466
|
-
return
|
|
467
|
-
}
|
|
468
|
-
static
|
|
469
|
-
const e = t.length *
|
|
470
|
-
for (let
|
|
471
|
-
const s =
|
|
472
|
-
|
|
531
|
+
const T = class T {
|
|
532
|
+
static pe(t, e, r = 0) {
|
|
533
|
+
var n, o, h, l, d, u, f, g, p, m;
|
|
534
|
+
const i = e || new Float32Array(T.FLOATS_PER_INSTANCE);
|
|
535
|
+
let s = r;
|
|
536
|
+
return i[s++] = t.position[0], i[s++] = t.position[1], i[s++] = t.size[0], i[s++] = t.size[1], i[s++] = t.character[0], i[s++] = t.character[1], i[s++] = t.character[2], i[s++] = t.primaryColor[0], i[s++] = t.primaryColor[1], i[s++] = t.primaryColor[2], i[s++] = t.primaryColor[3], i[s++] = t.secondaryColor[0], i[s++] = t.secondaryColor[1], i[s++] = t.secondaryColor[2], i[s++] = t.secondaryColor[3], i[s++] = t.rotation[0], i[s++] = t.rotation[1], i[s++] = t.transform[0], i[s++] = t.transform[1], i[s++] = t.transform[2], i[s++] = t.globalRotationX, i[s++] = t.globalRotationY, i[s++] = t.globalRotationZ, i[s++] = t.rotationCenter[0], i[s++] = t.rotationCenter[1], i[s++] = ((n = t.arcAngles) == null ? void 0 : n[0]) || 0, i[s++] = ((o = t.arcAngles) == null ? void 0 : o[1]) || 0, i[s++] = ((h = t.bezierControlPoint1) == null ? void 0 : h[0]) || 0, i[s++] = ((l = t.bezierControlPoint1) == null ? void 0 : l[1]) || 0, i[s++] = ((d = t.bezierControlPoint2) == null ? void 0 : d[0]) || 0, i[s++] = ((u = t.bezierControlPoint2) == null ? void 0 : u[1]) || 0, i[s++] = ((f = t.bezierStartPoint) == null ? void 0 : f[0]) || 0, i[s++] = ((g = t.bezierStartPoint) == null ? void 0 : g[1]) || 0, i[s++] = ((p = t.bezierEndPoint) == null ? void 0 : p[0]) || 0, i[s++] = ((m = t.bezierEndPoint) == null ? void 0 : m[1]) || 0, i;
|
|
537
|
+
}
|
|
538
|
+
static _e(t) {
|
|
539
|
+
const e = t.length * T.FLOATS_PER_INSTANCE, r = new Float32Array(e);
|
|
540
|
+
for (let i = 0; i < t.length; i++) {
|
|
541
|
+
const s = i * T.FLOATS_PER_INSTANCE;
|
|
542
|
+
T.pe(t[i], r, s);
|
|
473
543
|
}
|
|
474
|
-
return
|
|
544
|
+
return r;
|
|
475
545
|
}
|
|
476
546
|
};
|
|
477
|
-
c(
|
|
478
|
-
let
|
|
479
|
-
const
|
|
547
|
+
c(T, "BYTES_PER_INSTANCE", 140), c(T, "FLOATS_PER_INSTANCE", 35);
|
|
548
|
+
let F = T;
|
|
549
|
+
const C = class C {
|
|
480
550
|
};
|
|
481
|
-
c(
|
|
482
|
-
let
|
|
483
|
-
class
|
|
484
|
-
constructor(t, e = 1e3,
|
|
485
|
-
c(this, "
|
|
486
|
-
c(this, "
|
|
487
|
-
c(this, "
|
|
488
|
-
c(this, "
|
|
489
|
-
c(this, "
|
|
490
|
-
c(this, "
|
|
491
|
-
c(this, "
|
|
492
|
-
c(this, "
|
|
493
|
-
c(this, "
|
|
494
|
-
this.
|
|
495
|
-
}
|
|
496
|
-
|
|
497
|
-
const e = this.
|
|
498
|
-
return this.
|
|
551
|
+
c(C, "STRIDE", F.BYTES_PER_INSTANCE), c(C, "ATTRIBUTES", { a_instancePosition: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: C.STRIDE, offset: 0, divisor: 1 }, a_instanceSize: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: C.STRIDE, offset: 8, divisor: 1 }, a_instanceCharacter: { location: -1, size: 3, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: C.STRIDE, offset: 16, divisor: 1 }, a_instancePrimaryColor: { location: -1, size: 4, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: C.STRIDE, offset: 28, divisor: 1 }, a_instanceSecondaryColor: { location: -1, size: 4, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: C.STRIDE, offset: 44, divisor: 1 }, a_instanceRotation: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: C.STRIDE, offset: 60, divisor: 1 }, a_instanceTransform: { location: -1, size: 3, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: C.STRIDE, offset: 68, divisor: 1 }, a_instanceGlobalRotation: { location: -1, size: 3, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: C.STRIDE, offset: 80, divisor: 1 }, a_instanceRotationCenter: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: C.STRIDE, offset: 92, divisor: 1 }, a_instanceArcAngles: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: C.STRIDE, offset: 100, divisor: 1 }, a_instanceBezierCP1: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: C.STRIDE, offset: 108, divisor: 1 }, a_instanceBezierCP2: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: C.STRIDE, offset: 116, divisor: 1 }, a_instanceBezierStart: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: C.STRIDE, offset: 124, divisor: 1 }, a_instanceBezierEnd: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: C.STRIDE, offset: 132, divisor: 1 } });
|
|
552
|
+
let M = C;
|
|
553
|
+
class st {
|
|
554
|
+
constructor(t, e = 1e3, r = 1.5) {
|
|
555
|
+
c(this, "S");
|
|
556
|
+
c(this, "ge", []);
|
|
557
|
+
c(this, "me");
|
|
558
|
+
c(this, "ve");
|
|
559
|
+
c(this, "xe", null);
|
|
560
|
+
c(this, "Ce", !0);
|
|
561
|
+
c(this, "ye", 0);
|
|
562
|
+
c(this, "we", /* @__PURE__ */ new Map());
|
|
563
|
+
c(this, "$e", null);
|
|
564
|
+
this.S = t, this.me = e, this.ve = r, this.be();
|
|
565
|
+
}
|
|
566
|
+
Kt(t) {
|
|
567
|
+
const e = this.ge.length;
|
|
568
|
+
return this.ge.push(t), this.Ce = !0, e;
|
|
499
569
|
}
|
|
500
570
|
get count() {
|
|
501
|
-
return this.
|
|
571
|
+
return this.ge.length;
|
|
502
572
|
}
|
|
503
573
|
get isEmpty() {
|
|
504
|
-
return this.
|
|
574
|
+
return this.ge.length === 0;
|
|
505
575
|
}
|
|
506
576
|
clear() {
|
|
507
|
-
this.
|
|
508
|
-
}
|
|
509
|
-
|
|
510
|
-
if (t <= this.
|
|
511
|
-
const e = Math.ceil(t * this.
|
|
512
|
-
this.
|
|
513
|
-
}
|
|
514
|
-
|
|
515
|
-
const t = this.
|
|
516
|
-
|
|
517
|
-
const e = this.
|
|
518
|
-
t.bindBuffer(t.ARRAY_BUFFER, this.
|
|
519
|
-
}
|
|
520
|
-
|
|
521
|
-
if (!this.
|
|
522
|
-
const t = this.
|
|
523
|
-
this.
|
|
524
|
-
const
|
|
525
|
-
t.bindBuffer(t.ARRAY_BUFFER, this.
|
|
526
|
-
}
|
|
527
|
-
|
|
528
|
-
let e = this.
|
|
577
|
+
this.ge.length = 0, this.Ce = !0;
|
|
578
|
+
}
|
|
579
|
+
ze(t) {
|
|
580
|
+
if (t <= this.me) return;
|
|
581
|
+
const e = Math.ceil(t * this.ve);
|
|
582
|
+
this.me = e, this.be();
|
|
583
|
+
}
|
|
584
|
+
be() {
|
|
585
|
+
const t = this.S;
|
|
586
|
+
this.xe && t.deleteBuffer(this.xe), this.xe = t.createBuffer();
|
|
587
|
+
const e = this.me * F.BYTES_PER_INSTANCE;
|
|
588
|
+
t.bindBuffer(t.ARRAY_BUFFER, this.xe), t.bufferData(t.ARRAY_BUFFER, e, t.DYNAMIC_DRAW), t.bindBuffer(t.ARRAY_BUFFER, null), this.Ce = !0, this.ye = 0;
|
|
589
|
+
}
|
|
590
|
+
Re() {
|
|
591
|
+
if (!this.Ce || this.ge.length === 0) return;
|
|
592
|
+
const t = this.S, e = this.ge.length;
|
|
593
|
+
this.ze(e), (!this.$e || this.$e.length < e * F.FLOATS_PER_INSTANCE) && (this.$e = new Float32Array(e * F.FLOATS_PER_INSTANCE));
|
|
594
|
+
const r = F._e(this.ge);
|
|
595
|
+
t.bindBuffer(t.ARRAY_BUFFER, this.xe), e <= this.ye ? t.bufferSubData(t.ARRAY_BUFFER, 0, r) : t.bufferData(t.ARRAY_BUFFER, r, t.DYNAMIC_DRAW), t.bindBuffer(t.ARRAY_BUFFER, null), this.Ce = !1, this.ye = e;
|
|
596
|
+
}
|
|
597
|
+
Te(t) {
|
|
598
|
+
let e = this.we.get(t);
|
|
529
599
|
if (!e) {
|
|
530
600
|
e = /* @__PURE__ */ new Map();
|
|
531
|
-
const
|
|
532
|
-
for (const
|
|
533
|
-
const s =
|
|
534
|
-
s !== -1 && e.set(
|
|
601
|
+
const r = this.S;
|
|
602
|
+
for (const i in M.ATTRIBUTES) {
|
|
603
|
+
const s = r.getAttribLocation(t, i);
|
|
604
|
+
s !== -1 && e.set(i, s);
|
|
535
605
|
}
|
|
536
|
-
this.
|
|
606
|
+
this.we.set(t, e);
|
|
537
607
|
}
|
|
538
608
|
return e;
|
|
539
609
|
}
|
|
540
|
-
|
|
541
|
-
if (!this.
|
|
542
|
-
const e = this.
|
|
543
|
-
|
|
544
|
-
this.
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
const o = D.ATTRIBUTES[s];
|
|
610
|
+
qt(t) {
|
|
611
|
+
if (!this.xe || this.ge.length === 0) return;
|
|
612
|
+
const e = this.S, r = t.ot;
|
|
613
|
+
this.Re();
|
|
614
|
+
const i = this.Te(r);
|
|
615
|
+
e.bindBuffer(e.ARRAY_BUFFER, this.xe);
|
|
616
|
+
for (const [s, n] of i) {
|
|
617
|
+
const o = M.ATTRIBUTES[s];
|
|
549
618
|
o && (e.enableVertexAttribArray(n), e.vertexAttribPointer(n, o.size, o.type, o.normalized, o.stride, o.offset), e.vertexAttribDivisor(n, o.divisor));
|
|
550
619
|
}
|
|
551
620
|
}
|
|
552
|
-
|
|
553
|
-
const e = this.
|
|
554
|
-
for (const [,
|
|
621
|
+
Nt(t) {
|
|
622
|
+
const e = this.S, r = this.Te(t.ot);
|
|
623
|
+
for (const [, i] of r) e.disableVertexAttribArray(i), e.vertexAttribDivisor(i, 0);
|
|
555
624
|
}
|
|
556
|
-
|
|
557
|
-
this.
|
|
625
|
+
Zt(t, e) {
|
|
626
|
+
this.ge.length !== 0 && this.S.drawArraysInstanced(t, 0, e, this.ge.length);
|
|
558
627
|
}
|
|
559
|
-
|
|
560
|
-
const t = this.
|
|
561
|
-
this.
|
|
628
|
+
j() {
|
|
629
|
+
const t = this.S;
|
|
630
|
+
this.xe && (t.deleteBuffer(this.xe), this.xe = null), this.ge.length = 0, this.we.clear(), this.$e = null;
|
|
562
631
|
}
|
|
563
632
|
}
|
|
564
|
-
class
|
|
565
|
-
constructor(t, e,
|
|
566
|
-
c(this, "
|
|
567
|
-
c(this, "
|
|
568
|
-
c(this, "
|
|
569
|
-
c(this, "
|
|
570
|
-
c(this, "
|
|
571
|
-
this.
|
|
572
|
-
const s = this.
|
|
633
|
+
class L {
|
|
634
|
+
constructor(t, e, r, i) {
|
|
635
|
+
c(this, "S");
|
|
636
|
+
c(this, "Se");
|
|
637
|
+
c(this, "Me");
|
|
638
|
+
c(this, "Fe");
|
|
639
|
+
c(this, "Ge", null);
|
|
640
|
+
this.S = t, this.Se = e, this.Me = r, this.Fe = i;
|
|
641
|
+
const s = this.S.createBuffer();
|
|
573
642
|
if (!s) throw Error("Failed to create unit geometry buffer");
|
|
574
|
-
this.
|
|
643
|
+
this.S.bindBuffer(this.S.ARRAY_BUFFER, s), this.S.bufferData(this.S.ARRAY_BUFFER, this.Fe.vertices, this.S.STATIC_DRAW), this.S.bindBuffer(this.S.ARRAY_BUFFER, null), this.Ge = s;
|
|
575
644
|
}
|
|
576
645
|
get type() {
|
|
577
|
-
return this.
|
|
646
|
+
return this.Me;
|
|
578
647
|
}
|
|
579
648
|
get unitGeometry() {
|
|
580
|
-
return this.
|
|
649
|
+
return this.Fe;
|
|
581
650
|
}
|
|
582
651
|
get unitBuffer() {
|
|
583
|
-
return this.
|
|
652
|
+
return this.Ge;
|
|
584
653
|
}
|
|
585
654
|
get batch() {
|
|
586
|
-
return this.
|
|
655
|
+
return this.Se;
|
|
587
656
|
}
|
|
588
|
-
|
|
589
|
-
this.
|
|
657
|
+
Qt() {
|
|
658
|
+
this.Se.clear();
|
|
590
659
|
}
|
|
591
|
-
|
|
592
|
-
return !this.
|
|
660
|
+
Yt() {
|
|
661
|
+
return !this.Se.isEmpty;
|
|
593
662
|
}
|
|
594
|
-
|
|
595
|
-
this.
|
|
663
|
+
j() {
|
|
664
|
+
this.Se.j(), this.Ge && (this.S.deleteBuffer(this.Ge), this.Ge = null);
|
|
596
665
|
}
|
|
597
|
-
|
|
598
|
-
const n = this.
|
|
599
|
-
return { position: [t, e], size: [
|
|
666
|
+
De(t, e, r, i, s) {
|
|
667
|
+
const n = this.Pe(t, e, r, i, s.rotationX || 0, s.rotationY || 0, s.rotationZ || 0);
|
|
668
|
+
return { position: [t, e], size: [r, i], character: s.character || [0, 0, 0], primaryColor: s.charColor || [1, 1, 1, 1], secondaryColor: s.bgColor || [0, 0, 0, 1], rotation: s.charRotation || [0, 0], transform: [s.invert ? 1 : 0, s.flipHorizontally ? 1 : 0, s.flipVertically ? 1 : 0], globalRotationX: n.radiansX, globalRotationY: n.radiansY, globalRotationZ: n.radiansZ, rotationCenter: [n.centerX, n.centerY] };
|
|
600
669
|
}
|
|
601
|
-
|
|
602
|
-
const
|
|
603
|
-
return { nx: t /
|
|
670
|
+
Ae(t, e) {
|
|
671
|
+
const r = U(this.S) || [0, 0, this.S.canvas.width, this.S.canvas.height];
|
|
672
|
+
return { nx: t / r[2] * 2 - 1, ny: 1 - e / r[3] * 2 };
|
|
604
673
|
}
|
|
605
|
-
|
|
606
|
-
const
|
|
607
|
-
t.rotationCenter = [
|
|
674
|
+
Be(t, e, r) {
|
|
675
|
+
const i = this.Ae(e, r);
|
|
676
|
+
t.rotationCenter = [i.nx, i.ny];
|
|
608
677
|
}
|
|
609
|
-
|
|
610
|
-
const
|
|
611
|
-
return { centerX: (t +
|
|
678
|
+
Pe(t, e, r, i, s, n, o) {
|
|
679
|
+
const h = U(this.S) || [0, 0, this.S.canvas.width, this.S.canvas.height], l = h[2], d = h[3];
|
|
680
|
+
return { centerX: (t + r / 2) / l * 2 - 1, centerY: 1 - (e + i / 2) / d * 2, radiansX: -s * Math.PI / 180, radiansY: -n * Math.PI / 180, radiansZ: -o * Math.PI / 180, aspectRatio: l / d };
|
|
612
681
|
}
|
|
613
682
|
}
|
|
614
|
-
const
|
|
615
|
-
class
|
|
683
|
+
const nt = { vertices: new Float32Array([0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1]), vertexCount: 6, primitiveType: WebGL2RenderingContext.TRIANGLES, stride: 16, attributes: { position: { size: 2, offset: 0 }, texCoord: { size: 2, offset: 8 } } };
|
|
684
|
+
class ot extends L {
|
|
616
685
|
constructor(t, e) {
|
|
617
|
-
super(t, e,
|
|
686
|
+
super(t, e, x.RECTANGLE, nt);
|
|
618
687
|
}
|
|
619
|
-
|
|
620
|
-
const
|
|
621
|
-
return this.
|
|
688
|
+
Kt(t, e) {
|
|
689
|
+
const r = this.De(t.x, t.y, t.width, t.height, e);
|
|
690
|
+
return this.Se.Kt(r);
|
|
622
691
|
}
|
|
623
692
|
}
|
|
624
|
-
const
|
|
625
|
-
class
|
|
693
|
+
const at = { vertices: new Float32Array([0, -0.5, 0, 0, 1, -0.5, 1, 0, 0, 0.5, 0, 1, 0, 0.5, 0, 1, 1, -0.5, 1, 0, 1, 0.5, 1, 1]), vertexCount: 6, primitiveType: WebGL2RenderingContext.TRIANGLES, stride: 16, attributes: { position: { size: 2, offset: 0 }, texCoord: { size: 2, offset: 8 } } };
|
|
694
|
+
class ht extends L {
|
|
626
695
|
constructor(t, e) {
|
|
627
|
-
super(t, e,
|
|
696
|
+
super(t, e, x.LINE, at);
|
|
628
697
|
}
|
|
629
|
-
|
|
630
|
-
const
|
|
631
|
-
return this.
|
|
698
|
+
Kt(t, e) {
|
|
699
|
+
const r = t.x2 - t.x1, i = t.y2 - t.y1, s = Math.hypot(r, i), n = Math.atan2(i, r), o = t.thickness || e.lineWeight || 1, h = t.x1 + r / 2, l = t.y1 + i / 2, d = h - s / 2, u = l, f = { character: e.character, charColor: e.charColor, bgColor: e.bgColor, charRotation: e.charRotation, flipHorizontally: e.flipHorizontally, flipVertically: e.flipVertically, invert: e.invert, rotationX: e.rotationX || 0, rotationY: e.rotationY || 0, rotationZ: (e.rotationZ || 0) + 180 * n / Math.PI, lineWeight: o }, g = this.De(d, u, s, o, f);
|
|
700
|
+
return this.Be(g, h, l), this.Se.Kt(g);
|
|
632
701
|
}
|
|
633
702
|
}
|
|
634
|
-
const
|
|
703
|
+
const ct = { vertices: function(a = 32) {
|
|
635
704
|
const t = [], e = 2 * Math.PI / a;
|
|
636
|
-
for (let
|
|
637
|
-
const
|
|
638
|
-
t.push(0, 0, 0.5, 0.5, n, o, h, l, u, f,
|
|
705
|
+
for (let r = 0; r < a; r++) {
|
|
706
|
+
const i = r * e, s = (r + 1) % a * e, n = Math.cos(i), o = Math.sin(i), h = 0.5 * (n + 1), l = 0.5 * (o + 1), d = Math.cos(s), u = Math.sin(s), f = 0.5 * (d + 1), g = 0.5 * (u + 1);
|
|
707
|
+
t.push(0, 0, 0.5, 0.5, n, o, h, l, d, u, f, g);
|
|
639
708
|
}
|
|
640
709
|
return new Float32Array(t);
|
|
641
710
|
}(32), vertexCount: 96, primitiveType: WebGL2RenderingContext.TRIANGLES, stride: 16, attributes: { position: { size: 2, offset: 0 }, texCoord: { size: 2, offset: 8 } } };
|
|
642
|
-
class
|
|
711
|
+
class lt extends L {
|
|
643
712
|
constructor(t, e) {
|
|
644
|
-
super(t, e,
|
|
713
|
+
super(t, e, x.ELLIPSE, ct);
|
|
645
714
|
}
|
|
646
|
-
|
|
647
|
-
const
|
|
648
|
-
return this.
|
|
715
|
+
Kt(t, e) {
|
|
716
|
+
const r = this.De(t.x, t.y, t.width, t.height, e);
|
|
717
|
+
return this.Be(r, t.x, t.y), this.Se.Kt(r);
|
|
649
718
|
}
|
|
650
719
|
}
|
|
651
|
-
let
|
|
720
|
+
let ut = { vertices: function(a) {
|
|
652
721
|
const t = [];
|
|
653
722
|
for (let e = 0; e < a; e++) {
|
|
654
|
-
const
|
|
655
|
-
t.push(
|
|
723
|
+
const r = e / a, i = (e + 1) / a;
|
|
724
|
+
t.push(r, 0, r, 0, r, 1, r, 1, i, 1, i, 1);
|
|
656
725
|
}
|
|
657
726
|
return new Float32Array(t);
|
|
658
727
|
}(32), vertexCount: 96, primitiveType: WebGL2RenderingContext.TRIANGLES, stride: 16, attributes: { position: { size: 2, offset: 0 }, texCoord: { size: 2, offset: 8 } } };
|
|
659
|
-
class
|
|
728
|
+
class ft extends L {
|
|
660
729
|
constructor(t, e) {
|
|
661
|
-
super(t, e,
|
|
730
|
+
super(t, e, x.ARC, ut);
|
|
662
731
|
}
|
|
663
|
-
|
|
664
|
-
const
|
|
665
|
-
return this.
|
|
732
|
+
Kt(t, e) {
|
|
733
|
+
const r = t.x - t.width / 2, i = t.y - t.height / 2, s = t.start * Math.PI / 180, n = t.stop * Math.PI / 180, o = this.De(r, i, t.width, t.height, e);
|
|
734
|
+
return this.Be(o, t.x, t.y), o.arcAngles = [s, n], this.Se.Kt(o);
|
|
666
735
|
}
|
|
667
736
|
}
|
|
668
|
-
const
|
|
669
|
-
class
|
|
737
|
+
const dt = { vertices: new Float32Array([0, 0, 0, 0, 1, 0, 1, 0, 0.5, 1, 0.5, 1]), vertexCount: 3, primitiveType: WebGL2RenderingContext.TRIANGLES, stride: 16, attributes: { position: { size: 2, offset: 0 }, texCoord: { size: 2, offset: 8 } } };
|
|
738
|
+
class pt extends L {
|
|
670
739
|
constructor(t, e) {
|
|
671
|
-
super(t, e,
|
|
740
|
+
super(t, e, x.TRIANGLE, dt);
|
|
672
741
|
}
|
|
673
|
-
|
|
674
|
-
const
|
|
675
|
-
return this.
|
|
742
|
+
Kt(t, e) {
|
|
743
|
+
const r = Math.min(t.x1, t.x2, t.x3), i = Math.max(t.x1, t.x2, t.x3), s = Math.min(t.y1, t.y2, t.y3), n = i - r, o = Math.max(t.y1, t.y2, t.y3) - s, h = this.De(r, s, n, o, e), l = r + 0.5 * n, d = s + o * (1 / 3);
|
|
744
|
+
return this.Be(h, l, d), this.Se.Kt(h);
|
|
676
745
|
}
|
|
677
746
|
}
|
|
678
|
-
function
|
|
747
|
+
function V(a, t, e, r, i) {
|
|
679
748
|
const s = 1 - a, n = s * s, o = a * a;
|
|
680
|
-
return n * s * t + 3 * n * a * e + 3 * s * o *
|
|
749
|
+
return n * s * t + 3 * n * a * e + 3 * s * o * r + o * a * i;
|
|
681
750
|
}
|
|
682
|
-
const
|
|
751
|
+
const gt = { vertices: function(a = 16) {
|
|
683
752
|
const t = [];
|
|
684
753
|
for (let e = 0; e < a; e++) {
|
|
685
|
-
const
|
|
686
|
-
t.push(
|
|
754
|
+
const r = e / a, i = (e + 1) / a;
|
|
755
|
+
t.push(r, -0.5, r, 0), t.push(i, -0.5, i, 0), t.push(r, 0.5, r, 1), t.push(r, 0.5, r, 1), t.push(i, -0.5, i, 0), t.push(i, 0.5, i, 1);
|
|
687
756
|
}
|
|
688
757
|
return new Float32Array(t);
|
|
689
758
|
}(16), vertexCount: 96, primitiveType: WebGL2RenderingContext.TRIANGLES, stride: 16, attributes: { position: { size: 2, offset: 0 }, texCoord: { size: 2, offset: 8 } } };
|
|
690
|
-
class
|
|
759
|
+
class mt extends L {
|
|
691
760
|
constructor(t, e) {
|
|
692
|
-
super(t, e,
|
|
761
|
+
super(t, e, x.BEZIER_CURVE, gt);
|
|
693
762
|
}
|
|
694
|
-
|
|
695
|
-
const
|
|
696
|
-
return this.
|
|
763
|
+
Kt(t, e) {
|
|
764
|
+
const r = e.lineWeight || 1, i = V(0.5, t.x1, t.cp1x, t.cp2x, t.x2), s = V(0.5, t.y1, t.cp1y, t.cp2y, t.y2), n = { character: e.character, charColor: e.charColor, bgColor: e.bgColor, charRotation: e.charRotation, flipHorizontally: e.flipHorizontally, flipVertically: e.flipVertically, invert: e.invert, rotationX: e.rotationX || 0, rotationY: e.rotationY || 0, rotationZ: e.rotationZ || 0, lineWeight: r }, o = this.De(0, 0, 1, r, n);
|
|
765
|
+
return this.Be(o, i, s), o.bezierStartPoint = [t.x1, t.y1], o.bezierControlPoint1 = [t.cp1x, t.cp1y], o.bezierControlPoint2 = [t.cp2x, t.cp2y], o.bezierEndPoint = [t.x2, t.y2], this.Se.Kt(o);
|
|
697
766
|
}
|
|
698
767
|
}
|
|
699
|
-
class
|
|
768
|
+
class xt {
|
|
700
769
|
constructor(t) {
|
|
701
|
-
c(this, "
|
|
702
|
-
c(this, "
|
|
703
|
-
c(this, "
|
|
704
|
-
c(this, "
|
|
705
|
-
c(this, "
|
|
706
|
-
c(this, "
|
|
707
|
-
c(this, "
|
|
708
|
-
c(this, "
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
770
|
+
c(this, "S");
|
|
771
|
+
c(this, "Ie", null);
|
|
772
|
+
c(this, "Le", null);
|
|
773
|
+
c(this, "Ee", {});
|
|
774
|
+
c(this, "We", null);
|
|
775
|
+
c(this, "ke", /* @__PURE__ */ new Map());
|
|
776
|
+
c(this, "Ue");
|
|
777
|
+
c(this, "Ve");
|
|
778
|
+
c(this, "Oe");
|
|
779
|
+
this.S = t, this.Oe = new tt(), this.Ue = new rt(t), this.Ve = new it(), this.We = t.createBuffer(), D(this.S, [0, 0, this.S.canvas.width, this.S.canvas.height]);
|
|
780
|
+
}
|
|
781
|
+
je(t) {
|
|
782
|
+
let e = this.ke.get(t);
|
|
713
783
|
if (e) return e;
|
|
714
|
-
const
|
|
715
|
-
return e = (0, { [
|
|
784
|
+
const r = new st(this.S);
|
|
785
|
+
return e = (0, { [x.RECTANGLE]: () => new ot(this.S, r), [x.LINE]: () => new ht(this.S, r), [x.ELLIPSE]: () => new lt(this.S, r), [x.ARC]: () => new ft(this.S, r), [x.TRIANGLE]: () => new pt(this.S, r), [x.BEZIER_CURVE]: () => new mt(this.S, r) }[t])(), this.ke.set(t, e), e;
|
|
716
786
|
}
|
|
717
|
-
|
|
718
|
-
this
|
|
787
|
+
He(t) {
|
|
788
|
+
this.Ie !== t && (this.Ie = t, t.tt());
|
|
719
789
|
}
|
|
720
|
-
|
|
721
|
-
return new
|
|
790
|
+
Xe(t, e) {
|
|
791
|
+
return new G(this.S, t, e);
|
|
722
792
|
}
|
|
723
|
-
|
|
793
|
+
Ye(t) {
|
|
794
|
+
this.Le = t, t && (this.Ee = {});
|
|
795
|
+
}
|
|
796
|
+
qe(t, e) {
|
|
797
|
+
this.Ee[t] = e;
|
|
798
|
+
}
|
|
799
|
+
Ze(t) {
|
|
800
|
+
Object.assign(this.Ee, t);
|
|
801
|
+
}
|
|
802
|
+
Ne(t) {
|
|
803
|
+
return new G(this.S, O, t);
|
|
804
|
+
}
|
|
805
|
+
Qe(t, e, r, i) {
|
|
724
806
|
var m;
|
|
725
|
-
const s = this.
|
|
726
|
-
s.bindBuffer(s.ARRAY_BUFFER, this.
|
|
727
|
-
const g = ((m = this
|
|
807
|
+
const s = this.S, n = s.canvas.width, o = s.canvas.height, h = t / n * 2 - 1, l = (t + r) / n * 2 - 1, d = 1 - e / o * 2, u = 1 - (e + i) / o * 2, f = new Float32Array([h, u, l, u, h, d, l, u, l, d, h, d]);
|
|
808
|
+
s.bindBuffer(s.ARRAY_BUFFER, this.We), s.bufferData(s.ARRAY_BUFFER, f, s.DYNAMIC_DRAW);
|
|
809
|
+
const g = ((m = this.Ie) == null ? void 0 : m.ot) || s.getParameter(s.CURRENT_PROGRAM), p = g ? s.getAttribLocation(g, "a_position") : -1;
|
|
728
810
|
p !== -1 && (s.enableVertexAttribArray(p), s.vertexAttribPointer(p, 2, s.FLOAT, !1, 8, 0)), s.drawArrays(s.TRIANGLES, 0, 6), p !== -1 && s.disableVertexAttribArray(p);
|
|
729
811
|
}
|
|
730
|
-
|
|
731
|
-
this.
|
|
812
|
+
Je(t, e, r, i) {
|
|
813
|
+
this.Le ? (this.Ve.ae(t, e, r, i, this.Le, { ...this.Ee }, this.Oe), this.Le = null, this.Ee = {}) : this.Ve.oe(t, e, r, i, this.Oe);
|
|
732
814
|
}
|
|
733
|
-
|
|
734
|
-
this.
|
|
815
|
+
Ke(t, e, r, i) {
|
|
816
|
+
this.Ve.he(t, e, r, i, this.Oe.lineWeight, this.Oe);
|
|
735
817
|
}
|
|
736
|
-
|
|
737
|
-
this.
|
|
818
|
+
ts(t, e, r, i) {
|
|
819
|
+
this.Ve.ce(t, e, r, i, this.Oe);
|
|
738
820
|
}
|
|
739
|
-
|
|
740
|
-
this.
|
|
821
|
+
es(t, e, r, i, s, n) {
|
|
822
|
+
this.Ve.ue(t, e, r, i, s, n, this.Oe);
|
|
741
823
|
}
|
|
742
|
-
|
|
743
|
-
const l = this.
|
|
744
|
-
this.
|
|
824
|
+
ss(t, e, r, i, s, n, o, h) {
|
|
825
|
+
const l = this.Oe.lineWeight;
|
|
826
|
+
this.Ve.fe(t, e, r, i, s, n, o, h, l, this.Oe);
|
|
745
827
|
}
|
|
746
|
-
|
|
747
|
-
return new
|
|
828
|
+
rs(t, e, r = 1, i = {}) {
|
|
829
|
+
return new $(this.S, t, e, r, i);
|
|
748
830
|
}
|
|
749
|
-
|
|
750
|
-
this.
|
|
831
|
+
ns(t, e, r, i, s, n) {
|
|
832
|
+
this.Ve.le(t, e, r, i, s, n, this.Oe);
|
|
751
833
|
}
|
|
752
|
-
|
|
753
|
-
this.state.
|
|
834
|
+
hs(t, e = t, r = t, i = 255) {
|
|
835
|
+
this.state.Et(t, e, r, i), this.de(t / 255, e / 255, r / 255, i / 255);
|
|
754
836
|
}
|
|
755
|
-
|
|
756
|
-
this.
|
|
837
|
+
de(t = 0, e = 0, r = 0, i = 0) {
|
|
838
|
+
this.S.clearColor(t, e, r, i), this.S.clear(this.S.COLOR_BUFFER_BIT);
|
|
757
839
|
}
|
|
758
|
-
|
|
759
|
-
this.
|
|
840
|
+
cs() {
|
|
841
|
+
this.S.viewport(0, 0, this.S.canvas.width, this.S.canvas.height), D(this.S, [0, 0, this.S.canvas.width, this.S.canvas.height]);
|
|
760
842
|
}
|
|
761
843
|
get context() {
|
|
762
|
-
return this.
|
|
844
|
+
return this.S;
|
|
763
845
|
}
|
|
764
846
|
get state() {
|
|
765
|
-
return this.
|
|
847
|
+
return this.Oe;
|
|
766
848
|
}
|
|
767
|
-
|
|
768
|
-
const e =
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
this.
|
|
849
|
+
ls(t) {
|
|
850
|
+
const e = t, r = U(this.S) ?? this.S.getParameter(this.S.VIEWPORT), i = { shader: e, gl: this.S, viewport: r };
|
|
851
|
+
this.He(e);
|
|
852
|
+
const s = /* @__PURE__ */ new Set();
|
|
853
|
+
for (const n of this.Ve) n.type === x.CUSTOM ? s.add(x.RECTANGLE) : s.add(n.type);
|
|
854
|
+
for (const n of s) n !== x.CUSTOM && this.je(n);
|
|
855
|
+
this.Ue.Xt(i, this.Ve, this.ke), this.Ve.de();
|
|
772
856
|
}
|
|
773
|
-
|
|
774
|
-
this.
|
|
775
|
-
for (const t of this.
|
|
857
|
+
j() {
|
|
858
|
+
this.S.deleteBuffer(this.We), this.Ve.de();
|
|
859
|
+
for (const t of this.ke.values()) t.j();
|
|
776
860
|
}
|
|
777
861
|
}
|
|
778
|
-
const
|
|
779
|
-
const
|
|
780
|
-
for (let
|
|
781
|
-
return
|
|
862
|
+
const R = { readShort: (a, t) => (R.t.uint16[0] = a[t] << 8 | a[t + 1], R.t.int16[0]), readUshort: (a, t) => a[t] << 8 | a[t + 1], readUshorts(a, t, e) {
|
|
863
|
+
const r = [];
|
|
864
|
+
for (let i = 0; i < e; i++) r.push(R.readUshort(a, t + 2 * i));
|
|
865
|
+
return r;
|
|
782
866
|
}, readUint(a, t) {
|
|
783
|
-
const e =
|
|
784
|
-
return e[3] = a[t], e[2] = a[t + 1], e[1] = a[t + 2], e[0] = a[t + 3],
|
|
867
|
+
const e = R.t.uint8;
|
|
868
|
+
return e[3] = a[t], e[2] = a[t + 1], e[1] = a[t + 2], e[0] = a[t + 3], R.t.uint32[0];
|
|
785
869
|
}, readASCII(a, t, e) {
|
|
786
|
-
let
|
|
787
|
-
for (let
|
|
788
|
-
return
|
|
870
|
+
let r = "";
|
|
871
|
+
for (let i = 0; i < e; i++) r += String.fromCharCode(a[t + i]);
|
|
872
|
+
return r;
|
|
789
873
|
}, t: (() => {
|
|
790
874
|
const a = new ArrayBuffer(8);
|
|
791
875
|
return { uint8: new Uint8Array(a), int16: new Int16Array(a), uint16: new Uint16Array(a), uint32: new Uint32Array(a) };
|
|
792
|
-
})() },
|
|
793
|
-
const
|
|
876
|
+
})() }, yt = { parseTab(a, t, e) {
|
|
877
|
+
const r = { tables: [], ids: {}, off: t };
|
|
794
878
|
a = new Uint8Array(a.buffer, t, e), t = 0;
|
|
795
|
-
const
|
|
879
|
+
const i = R, s = i.readUshort, n = s(a, t += 2);
|
|
796
880
|
t += 2;
|
|
797
881
|
const o = [];
|
|
798
882
|
for (let h = 0; h < n; h++) {
|
|
799
|
-
const l = s(a, t),
|
|
883
|
+
const l = s(a, t), d = s(a, t += 2);
|
|
800
884
|
t += 2;
|
|
801
|
-
const
|
|
885
|
+
const u = i.readUint(a, t);
|
|
802
886
|
t += 4;
|
|
803
|
-
const
|
|
804
|
-
let g = o.indexOf(
|
|
887
|
+
const f = `p${l}e${d}`;
|
|
888
|
+
let g = o.indexOf(u);
|
|
805
889
|
if (g === -1) {
|
|
806
890
|
let p;
|
|
807
|
-
g =
|
|
808
|
-
const m = s(a,
|
|
809
|
-
p = m === 4 ? this.parse4(a,
|
|
891
|
+
g = r.tables.length, o.push(u);
|
|
892
|
+
const m = s(a, u);
|
|
893
|
+
p = m === 4 ? this.parse4(a, u) : m === 12 ? this.parse12(a, u) : { format: m }, r.tables.push(p);
|
|
810
894
|
}
|
|
811
|
-
|
|
895
|
+
r.ids[f] != null && console.warn("Multiple tables for one platform+encoding: " + f), r.ids[f] = g;
|
|
812
896
|
}
|
|
813
|
-
return
|
|
897
|
+
return r;
|
|
814
898
|
}, parse4(a, t) {
|
|
815
|
-
const e =
|
|
899
|
+
const e = R, r = e.readUshort, i = e.readUshorts, s = t, n = r(a, t += 2);
|
|
816
900
|
t += 2;
|
|
817
|
-
const o =
|
|
818
|
-
t += 2, h.entrySelector =
|
|
901
|
+
const o = r(a, t += 2) >>> 1, h = { format: 4, searchRange: r(a, t += 2), entrySelector: 0, rangeShift: 0, endCount: [], startCount: [], idDelta: [], idRangeOffset: [], glyphIdArray: [] };
|
|
902
|
+
t += 2, h.entrySelector = r(a, t), t += 2, h.rangeShift = r(a, t), t += 2, h.endCount = i(a, t, o), t += 2 * o, t += 2, h.startCount = i(a, t, o), t += 2 * o;
|
|
819
903
|
for (let l = 0; l < o; l++) h.idDelta.push(e.readShort(a, t)), t += 2;
|
|
820
|
-
return h.idRangeOffset =
|
|
904
|
+
return h.idRangeOffset = i(a, t, o), t += 2 * o, h.glyphIdArray = i(a, t, s + n - t >> 1), h;
|
|
821
905
|
}, parse12(a, t) {
|
|
822
|
-
const e =
|
|
906
|
+
const e = R.readUint;
|
|
823
907
|
e(a, t += 4), e(a, t += 4);
|
|
824
|
-
const
|
|
908
|
+
const r = e(a, t += 4);
|
|
825
909
|
t += 4;
|
|
826
|
-
const
|
|
827
|
-
for (let s = 0; s < 3 *
|
|
828
|
-
return { format: 12, groups:
|
|
829
|
-
} },
|
|
830
|
-
const
|
|
910
|
+
const i = new Uint32Array(3 * r);
|
|
911
|
+
for (let s = 0; s < 3 * r; s += 3) i[s] = e(a, t + (s << 2)), i[s + 1] = e(a, t + (s << 2) + 4), i[s + 2] = e(a, t + (s << 2) + 8);
|
|
912
|
+
return { format: 12, groups: i };
|
|
913
|
+
} }, Ct = { parseTab(a, t, e) {
|
|
914
|
+
const r = R;
|
|
831
915
|
t += 18;
|
|
832
|
-
const
|
|
916
|
+
const i = r.readUshort(a, t);
|
|
833
917
|
t += 2, t += 16;
|
|
834
|
-
const s =
|
|
918
|
+
const s = r.readShort(a, t);
|
|
835
919
|
t += 2;
|
|
836
|
-
const n =
|
|
920
|
+
const n = r.readShort(a, t);
|
|
837
921
|
t += 2;
|
|
838
|
-
const o =
|
|
922
|
+
const o = r.readShort(a, t);
|
|
839
923
|
t += 2;
|
|
840
|
-
const h =
|
|
841
|
-
return t += 2, t += 6, { unitsPerEm:
|
|
842
|
-
} },
|
|
843
|
-
const
|
|
924
|
+
const h = r.readShort(a, t);
|
|
925
|
+
return t += 2, t += 6, { unitsPerEm: i, xMin: s, yMin: n, xMax: o, yMax: h, indexToLocFormat: r.readShort(a, t) };
|
|
926
|
+
} }, vt = { parseTab(a, t, e) {
|
|
927
|
+
const r = R;
|
|
844
928
|
t += 4;
|
|
845
|
-
const
|
|
846
|
-
for (let n = 0; n <
|
|
847
|
-
const o =
|
|
929
|
+
const i = ["ascender", "descender", "lineGap", "advanceWidthMax", "minLeftSideBearing", "minRightSideBearing", "xMaxExtent", "caretSlopeRise", "caretSlopeRun", "caretOffset", "res0", "res1", "res2", "res3", "metricDataFormat", "numberOfHMetrics"], s = {};
|
|
930
|
+
for (let n = 0; n < i.length; n++) {
|
|
931
|
+
const o = i[n], h = o === "advanceWidthMax" || o === "numberOfHMetrics" ? r.readUshort : r.readShort;
|
|
848
932
|
s[o] = h(a, t + 2 * n);
|
|
849
933
|
}
|
|
850
934
|
return s;
|
|
851
|
-
} },
|
|
852
|
-
const
|
|
853
|
-
let l = 0,
|
|
854
|
-
for (;
|
|
855
|
-
for (;
|
|
935
|
+
} }, St = { parseTab(a, t, e, r) {
|
|
936
|
+
const i = R, s = [], n = [], o = r.maxp.numGlyphs, h = r.hhea.numberOfHMetrics;
|
|
937
|
+
let l = 0, d = 0, u = 0;
|
|
938
|
+
for (; u < h; ) l = i.readUshort(a, t + (u << 2)), d = i.readShort(a, t + (u << 2) + 2), s.push(l), n.push(d), u++;
|
|
939
|
+
for (; u < o; ) s.push(l), n.push(d), u++;
|
|
856
940
|
return { aWidth: s, lsBearing: n };
|
|
857
|
-
} },
|
|
858
|
-
const
|
|
859
|
-
return
|
|
860
|
-
} }, hmtx:
|
|
861
|
-
const
|
|
862
|
-
if (n === 0) for (let h = 0; h < o; h++) s.push(
|
|
863
|
-
else if (n === 1) for (let h = 0; h < o; h++) s.push(
|
|
941
|
+
} }, j = { cmap: yt, head: Ct, hhea: vt, maxp: { parseTab(a, t, e) {
|
|
942
|
+
const r = R;
|
|
943
|
+
return r.readUint(a, t), t += 4, { numGlyphs: r.readUshort(a, t) };
|
|
944
|
+
} }, hmtx: St, loca: { parseTab(a, t, e, r) {
|
|
945
|
+
const i = R, s = [], n = r.head.indexToLocFormat, o = r.maxp.numGlyphs + 1;
|
|
946
|
+
if (n === 0) for (let h = 0; h < o; h++) s.push(i.readUshort(a, t + (h << 1)) << 1);
|
|
947
|
+
else if (n === 1) for (let h = 0; h < o; h++) s.push(i.readUint(a, t + (h << 2)));
|
|
864
948
|
return s;
|
|
865
|
-
} }, glyf: { parseTab(a, t, e,
|
|
866
|
-
const
|
|
867
|
-
for (let n = 0; n < s; n++)
|
|
868
|
-
return
|
|
869
|
-
},
|
|
870
|
-
const e =
|
|
871
|
-
if (
|
|
872
|
-
const s =
|
|
949
|
+
} }, glyf: { parseTab(a, t, e, r) {
|
|
950
|
+
const i = [], s = r.maxp.numGlyphs;
|
|
951
|
+
for (let n = 0; n < s; n++) i.push(null);
|
|
952
|
+
return i;
|
|
953
|
+
}, us(a, t) {
|
|
954
|
+
const e = R, r = a.fs, i = a.loca;
|
|
955
|
+
if (i[t] === i[t + 1]) return null;
|
|
956
|
+
const s = w.findTable(r, "glyf", a.ds);
|
|
873
957
|
if (!s) return null;
|
|
874
|
-
let n = s[0] +
|
|
958
|
+
let n = s[0] + i[t];
|
|
875
959
|
const o = {};
|
|
876
|
-
if (o.noc = e.readShort(
|
|
960
|
+
if (o.noc = e.readShort(r, n), n += 2, o.xMin = e.readShort(r, n), n += 2, o.yMin = e.readShort(r, n), n += 2, o.xMax = e.readShort(r, n), n += 2, o.yMax = e.readShort(r, n), n += 2, o.xMin >= o.xMax || o.yMin >= o.yMax) return null;
|
|
877
961
|
if (o.noc > 0) {
|
|
878
962
|
o.endPts = [];
|
|
879
|
-
for (let
|
|
880
|
-
const h = e.readUshort(
|
|
881
|
-
if (n += 2,
|
|
963
|
+
for (let f = 0; f < o.noc; f++) o.endPts.push(e.readUshort(r, n)), n += 2;
|
|
964
|
+
const h = e.readUshort(r, n);
|
|
965
|
+
if (n += 2, r.length - n < h) return null;
|
|
882
966
|
n += h;
|
|
883
967
|
const l = o.endPts[o.noc - 1] + 1;
|
|
884
968
|
o.flags = [];
|
|
885
|
-
for (let
|
|
886
|
-
const g =
|
|
969
|
+
for (let f = 0; f < l; f++) {
|
|
970
|
+
const g = r[n];
|
|
887
971
|
if (n++, o.flags.push(g), 8 & g) {
|
|
888
|
-
const p =
|
|
972
|
+
const p = r[n];
|
|
889
973
|
n++;
|
|
890
|
-
for (let m = 0; m < p; m++) o.flags.push(g),
|
|
974
|
+
for (let m = 0; m < p; m++) o.flags.push(g), f++;
|
|
891
975
|
}
|
|
892
976
|
}
|
|
893
977
|
o.xs = [];
|
|
894
|
-
for (let
|
|
895
|
-
const g = o.flags[
|
|
896
|
-
2 & g ? (o.xs.push(p ?
|
|
978
|
+
for (let f = 0; f < l; f++) {
|
|
979
|
+
const g = o.flags[f], p = !!(16 & g);
|
|
980
|
+
2 & g ? (o.xs.push(p ? r[n] : -r[n]), n++) : p ? o.xs.push(0) : (o.xs.push(e.readShort(r, n)), n += 2);
|
|
897
981
|
}
|
|
898
982
|
o.ys = [];
|
|
899
|
-
for (let
|
|
900
|
-
const g = o.flags[
|
|
901
|
-
4 & g ? (o.ys.push(p ?
|
|
983
|
+
for (let f = 0; f < l; f++) {
|
|
984
|
+
const g = o.flags[f], p = !!(32 & g);
|
|
985
|
+
4 & g ? (o.ys.push(p ? r[n] : -r[n]), n++) : p ? o.ys.push(0) : (o.ys.push(e.readShort(r, n)), n += 2);
|
|
902
986
|
}
|
|
903
|
-
let
|
|
904
|
-
for (let
|
|
987
|
+
let d = 0, u = 0;
|
|
988
|
+
for (let f = 0; f < l; f++) d += o.xs[f], u += o.ys[f], o.xs[f] = d, o.ys[f] = u;
|
|
905
989
|
} else o.parts = [], o.endPts = [], o.flags = [], o.xs = [], o.ys = [];
|
|
906
990
|
return o;
|
|
907
|
-
} } },
|
|
908
|
-
const s =
|
|
991
|
+
} } }, w = { parse: (a) => [((t, e, r, i) => {
|
|
992
|
+
const s = j, n = { fs: t, ps: e, ds: r };
|
|
909
993
|
for (const o in s) {
|
|
910
|
-
const h = o, l =
|
|
994
|
+
const h = o, l = w.findTable(t, h, r);
|
|
911
995
|
if (l) {
|
|
912
|
-
const [
|
|
913
|
-
let
|
|
914
|
-
|
|
996
|
+
const [d, u] = l;
|
|
997
|
+
let f = i[d];
|
|
998
|
+
f == null && (f = s[h].parseTab(t, d, u, n), i[d] = f), n[h] = f;
|
|
915
999
|
}
|
|
916
1000
|
}
|
|
917
1001
|
return n;
|
|
918
1002
|
})(new Uint8Array(a), 0, 0, {})], findTable(a, t, e) {
|
|
919
|
-
const
|
|
1003
|
+
const r = R, i = r.readUshort(a, e + 4);
|
|
920
1004
|
let s = e + 12;
|
|
921
|
-
for (let n = 0; n <
|
|
922
|
-
const o =
|
|
923
|
-
|
|
924
|
-
const h =
|
|
1005
|
+
for (let n = 0; n < i; n++) {
|
|
1006
|
+
const o = r.readASCII(a, s, 4);
|
|
1007
|
+
r.readUint(a, s + 4);
|
|
1008
|
+
const h = r.readUint(a, s + 8), l = r.readUint(a, s + 12);
|
|
925
1009
|
if (o === t) return [h, l];
|
|
926
1010
|
s += 16;
|
|
927
1011
|
}
|
|
928
1012
|
return null;
|
|
929
|
-
}, T:
|
|
930
|
-
class
|
|
1013
|
+
}, T: j, B: R };
|
|
1014
|
+
class z {
|
|
931
1015
|
constructor() {
|
|
932
|
-
c(this, "
|
|
933
|
-
c(this, "
|
|
1016
|
+
c(this, "_s", /* @__PURE__ */ new Map());
|
|
1017
|
+
c(this, "gs", /* @__PURE__ */ new Map());
|
|
934
1018
|
}
|
|
935
|
-
|
|
936
|
-
const
|
|
937
|
-
if (this.
|
|
938
|
-
const
|
|
939
|
-
if (!
|
|
1019
|
+
vs(t, e) {
|
|
1020
|
+
const r = `${this.Cs(t)}_${e}`;
|
|
1021
|
+
if (this._s.has(r)) return this._s.get(r);
|
|
1022
|
+
const i = t.cmap;
|
|
1023
|
+
if (!i || !i.tables) return this._s.set(r, 0), 0;
|
|
940
1024
|
let s = 0;
|
|
941
|
-
for (const n of
|
|
942
|
-
return this.
|
|
1025
|
+
for (const n of i.tables) if (n.format === 4 ? s = this.ws(e, n) : n.format === 12 && (s = this.$s(e, n)), s > 0) break;
|
|
1026
|
+
return this._s.set(r, s), s;
|
|
943
1027
|
}
|
|
944
|
-
|
|
945
|
-
const
|
|
946
|
-
return
|
|
1028
|
+
bs(t, e) {
|
|
1029
|
+
const r = e.codePointAt(0);
|
|
1030
|
+
return r === void 0 ? 0 : this.vs(t, r);
|
|
947
1031
|
}
|
|
948
|
-
|
|
949
|
-
const
|
|
950
|
-
return
|
|
1032
|
+
zs(t, e) {
|
|
1033
|
+
const r = t.hmtx;
|
|
1034
|
+
return r && r.aWidth && r.aWidth.length !== 0 ? e < r.aWidth.length ? r.aWidth[e] : r.aWidth[r.aWidth.length - 1] : 0;
|
|
951
1035
|
}
|
|
952
|
-
|
|
953
|
-
const
|
|
954
|
-
return { ascender:
|
|
1036
|
+
Rs(t, e) {
|
|
1037
|
+
const r = e / t.head.unitsPerEm, i = t.hhea.ascender * r, s = t.hhea.descender * r, n = t.hhea.lineGap * r;
|
|
1038
|
+
return { ascender: i, descender: s, lineGap: n, lineHeight: i - s + n, unitsPerEm: t.head.unitsPerEm, scale: r };
|
|
955
1039
|
}
|
|
956
|
-
|
|
957
|
-
this.
|
|
1040
|
+
Ts() {
|
|
1041
|
+
this._s.clear(), this.gs.clear();
|
|
958
1042
|
}
|
|
959
|
-
|
|
960
|
-
return `${t.
|
|
1043
|
+
Cs(t) {
|
|
1044
|
+
return `${t.ds}_${t.fs.length}`;
|
|
961
1045
|
}
|
|
962
|
-
|
|
963
|
-
const
|
|
964
|
-
let
|
|
965
|
-
for (let s = 0; s <
|
|
966
|
-
|
|
1046
|
+
ws(t, e) {
|
|
1047
|
+
const r = e.endCount.length;
|
|
1048
|
+
let i = -1;
|
|
1049
|
+
for (let s = 0; s < r; s++) if (t <= e.endCount[s]) {
|
|
1050
|
+
i = s;
|
|
967
1051
|
break;
|
|
968
1052
|
}
|
|
969
|
-
if (
|
|
970
|
-
if (e.idRangeOffset[
|
|
1053
|
+
if (i === -1 || t < e.startCount[i]) return 0;
|
|
1054
|
+
if (e.idRangeOffset[i] === 0) return t + e.idDelta[i] & 65535;
|
|
971
1055
|
{
|
|
972
|
-
const s = e.idRangeOffset[
|
|
1056
|
+
const s = e.idRangeOffset[i] / 2 + (t - e.startCount[i]) - (r - i);
|
|
973
1057
|
if (s >= 0 && s < e.glyphIdArray.length) {
|
|
974
1058
|
const n = e.glyphIdArray[s];
|
|
975
|
-
return n === 0 ? 0 : n + e.idDelta[
|
|
1059
|
+
return n === 0 ? 0 : n + e.idDelta[i] & 65535;
|
|
976
1060
|
}
|
|
977
1061
|
}
|
|
978
1062
|
return 0;
|
|
979
1063
|
}
|
|
980
|
-
|
|
981
|
-
const
|
|
982
|
-
for (let
|
|
983
|
-
const s = e.groups[3 *
|
|
1064
|
+
$s(t, e) {
|
|
1065
|
+
const r = e.groups.length / 3;
|
|
1066
|
+
for (let i = 0; i < r; i++) {
|
|
1067
|
+
const s = e.groups[3 * i], n = e.groups[3 * i + 1], o = e.groups[3 * i + 2];
|
|
984
1068
|
if (t >= s && t <= n) return o + (t - s);
|
|
985
1069
|
}
|
|
986
1070
|
return 0;
|
|
987
1071
|
}
|
|
988
1072
|
}
|
|
989
|
-
class
|
|
1073
|
+
class Rt {
|
|
990
1074
|
constructor(t) {
|
|
991
|
-
c(this, "
|
|
992
|
-
this.
|
|
1075
|
+
c(this, "Ss");
|
|
1076
|
+
this.Ss = t;
|
|
993
1077
|
}
|
|
994
|
-
|
|
995
|
-
var
|
|
1078
|
+
Ms(t) {
|
|
1079
|
+
var r;
|
|
996
1080
|
const e = [];
|
|
997
|
-
return (
|
|
998
|
-
if (
|
|
999
|
-
const s = this.
|
|
1081
|
+
return (r = t.cmap) != null && r.tables ? (t.cmap.tables.forEach((i) => {
|
|
1082
|
+
if (i.format === 4) {
|
|
1083
|
+
const s = this.Fs(i);
|
|
1000
1084
|
e.push(...s);
|
|
1001
|
-
} else if (
|
|
1002
|
-
const s = this.
|
|
1085
|
+
} else if (i.format === 12) {
|
|
1086
|
+
const s = this.Gs(i);
|
|
1003
1087
|
e.push(...s);
|
|
1004
1088
|
}
|
|
1005
1089
|
}), [...new Set(e)]) : [];
|
|
1006
1090
|
}
|
|
1007
|
-
|
|
1008
|
-
return this.
|
|
1091
|
+
Ds(t, e) {
|
|
1092
|
+
return this.Ss.bs(t, e) > 0;
|
|
1009
1093
|
}
|
|
1010
|
-
|
|
1011
|
-
for (const
|
|
1094
|
+
Ps(t, e) {
|
|
1095
|
+
for (const r of e) if (!this.Ds(t, r)) return !1;
|
|
1012
1096
|
return !0;
|
|
1013
1097
|
}
|
|
1014
|
-
|
|
1015
|
-
return e.filter((
|
|
1098
|
+
As(t, e) {
|
|
1099
|
+
return e.filter((r) => this.Ds(t, r));
|
|
1016
1100
|
}
|
|
1017
|
-
|
|
1018
|
-
return t.filter((e) => this.
|
|
1101
|
+
Bs(t) {
|
|
1102
|
+
return t.filter((e) => this.Is(e));
|
|
1019
1103
|
}
|
|
1020
|
-
|
|
1104
|
+
Fs(t) {
|
|
1021
1105
|
const e = [];
|
|
1022
1106
|
if (!(t.startCount && t.endCount && t.idRangeOffset && t.idDelta)) return e;
|
|
1023
|
-
for (let
|
|
1024
|
-
const
|
|
1025
|
-
if (
|
|
1026
|
-
for (let n =
|
|
1027
|
-
if (this.
|
|
1107
|
+
for (let r = 0; r < t.startCount.length; r++) {
|
|
1108
|
+
const i = t.startCount[r], s = t.endCount[r];
|
|
1109
|
+
if (i !== 65535 || s !== 65535) {
|
|
1110
|
+
for (let n = i; n <= s; n++)
|
|
1111
|
+
if (this.Ls(t, n, r) > 0) try {
|
|
1028
1112
|
const o = String.fromCodePoint(n);
|
|
1029
1113
|
e.push(o);
|
|
1030
1114
|
} catch {
|
|
@@ -1033,13 +1117,13 @@ class Ct {
|
|
|
1033
1117
|
}
|
|
1034
1118
|
return e;
|
|
1035
1119
|
}
|
|
1036
|
-
|
|
1120
|
+
Gs(t) {
|
|
1037
1121
|
const e = [];
|
|
1038
1122
|
if (!t.groups) return e;
|
|
1039
|
-
for (let
|
|
1040
|
-
const
|
|
1041
|
-
for (let o =
|
|
1042
|
-
if (n + (o -
|
|
1123
|
+
for (let r = 0; r < t.groups.length; r += 3) {
|
|
1124
|
+
const i = t.groups[r], s = t.groups[r + 1], n = t.groups[r + 2];
|
|
1125
|
+
for (let o = i; o <= s; o++)
|
|
1126
|
+
if (n + (o - i) > 0) try {
|
|
1043
1127
|
const h = String.fromCodePoint(o);
|
|
1044
1128
|
e.push(h);
|
|
1045
1129
|
} catch {
|
|
@@ -1047,536 +1131,557 @@ class Ct {
|
|
|
1047
1131
|
}
|
|
1048
1132
|
return e;
|
|
1049
1133
|
}
|
|
1050
|
-
|
|
1051
|
-
if (t.idRangeOffset[
|
|
1134
|
+
Ls(t, e, r) {
|
|
1135
|
+
if (t.idRangeOffset[r] === 0) return e + t.idDelta[r] & 65535;
|
|
1052
1136
|
{
|
|
1053
|
-
const
|
|
1054
|
-
if (
|
|
1055
|
-
const s = t.glyphIdArray[
|
|
1056
|
-
if (s !== 0) return s + t.idDelta[
|
|
1137
|
+
const i = t.idRangeOffset[r] / 2 + (e - t.startCount[r]) - (t.startCount.length - r);
|
|
1138
|
+
if (i >= 0 && t.glyphIdArray && i < t.glyphIdArray.length) {
|
|
1139
|
+
const s = t.glyphIdArray[i];
|
|
1140
|
+
if (s !== 0) return s + t.idDelta[r] & 65535;
|
|
1057
1141
|
}
|
|
1058
1142
|
}
|
|
1059
1143
|
return 0;
|
|
1060
1144
|
}
|
|
1061
|
-
|
|
1145
|
+
Is(t) {
|
|
1062
1146
|
const e = t.codePointAt(0) || 0;
|
|
1063
1147
|
return !(e >= 0 && e <= 31 && e !== 9 && e !== 10 && e !== 13 || e >= 127 && e <= 159);
|
|
1064
1148
|
}
|
|
1065
1149
|
}
|
|
1066
|
-
class
|
|
1150
|
+
class Et {
|
|
1067
1151
|
constructor() {
|
|
1068
|
-
c(this, "
|
|
1069
|
-
const t = new
|
|
1070
|
-
this.
|
|
1152
|
+
c(this, "Es");
|
|
1153
|
+
const t = new z();
|
|
1154
|
+
this.Es = new Rt(t);
|
|
1071
1155
|
}
|
|
1072
1156
|
extractCharacters(t) {
|
|
1073
|
-
return this.
|
|
1157
|
+
return this.Es.Ms(t);
|
|
1074
1158
|
}
|
|
1075
1159
|
filterProblematicCharacters(t) {
|
|
1076
|
-
return this.
|
|
1160
|
+
return this.Es.Bs(t);
|
|
1077
1161
|
}
|
|
1078
1162
|
characterExists(t, e) {
|
|
1079
|
-
return this.
|
|
1163
|
+
return this.Es.Ds(t, e);
|
|
1080
1164
|
}
|
|
1081
1165
|
allCharactersExist(t, e) {
|
|
1082
|
-
return this.
|
|
1166
|
+
return this.Es.Ps(t, e);
|
|
1083
1167
|
}
|
|
1084
1168
|
}
|
|
1085
|
-
class
|
|
1169
|
+
class bt {
|
|
1086
1170
|
constructor(t) {
|
|
1087
|
-
c(this, "
|
|
1088
|
-
c(this, "
|
|
1089
|
-
c(this, "
|
|
1090
|
-
c(this, "
|
|
1091
|
-
this
|
|
1092
|
-
}
|
|
1093
|
-
createTextureAtlas(t, e,
|
|
1094
|
-
const s = t.length, n = Math.ceil(Math.sqrt(s)), o = Math.ceil(s / n), h = e.width * n, l = e.height * o,
|
|
1095
|
-
this.
|
|
1096
|
-
const
|
|
1097
|
-
return
|
|
1098
|
-
}
|
|
1099
|
-
|
|
1100
|
-
this.
|
|
1101
|
-
}
|
|
1102
|
-
|
|
1103
|
-
const n =
|
|
1171
|
+
c(this, "Ws");
|
|
1172
|
+
c(this, "ks");
|
|
1173
|
+
c(this, "Us");
|
|
1174
|
+
c(this, "Vs");
|
|
1175
|
+
this.Us = t, this.Vs = new z(), this.Ws = document.createElement("canvas"), this.ks = this.Ws.getContext("2d", { willReadFrequently: !0, alpha: !1 });
|
|
1176
|
+
}
|
|
1177
|
+
createTextureAtlas(t, e, r, i) {
|
|
1178
|
+
const s = t.length, n = Math.ceil(Math.sqrt(s)), o = Math.ceil(s / n), h = e.width * n, l = e.height * o, d = typeof i == "object" ? i : null;
|
|
1179
|
+
this.Os(h, l), this.js(t, e, n, r, d);
|
|
1180
|
+
const u = this.Us.rs(h, l, 1, { filter: "nearest" });
|
|
1181
|
+
return u.L(this.Ws), { framebuffer: u, columns: n, rows: o };
|
|
1182
|
+
}
|
|
1183
|
+
Os(t, e) {
|
|
1184
|
+
this.Ws.width = t, this.Ws.height = e, this.Ws.style.width = t + "px", this.Ws.style.height = t + "px", this.ks.imageSmoothingEnabled = !1, this.Ws.style.imageRendering = "pixelated", this.ks.fillStyle = "black", this.ks.fillRect(0, 0, t, e), this.ks.textBaseline = "top", this.ks.textAlign = "left", this.ks.fillStyle = "white";
|
|
1185
|
+
}
|
|
1186
|
+
js(t, e, r, i, s) {
|
|
1187
|
+
const n = i / s.head.unitsPerEm;
|
|
1104
1188
|
for (let o = 0; o < t.length; o++) {
|
|
1105
|
-
const h = o %
|
|
1106
|
-
if (!
|
|
1107
|
-
const
|
|
1108
|
-
this.
|
|
1189
|
+
const h = o % r, l = Math.floor(o / r), d = t[o].character, u = this.Hs(s, d);
|
|
1190
|
+
if (!u) continue;
|
|
1191
|
+
const f = d.codePointAt(0) || 0, g = this.Vs.vs(s, f), p = this.Xs(s, g) * n, m = h * e.width, E = l * e.height, v = m + 0.5 * e.width, b = E + 0.5 * e.height, _ = Math.round(v - 0.5 * e.width), y = Math.round(b - 0.5 * i), P = _ + 0.5 * (e.width - p), Z = y + s.hhea.ascender * n;
|
|
1192
|
+
this.Ys(u, P, Z, n);
|
|
1109
1193
|
}
|
|
1110
1194
|
}
|
|
1111
|
-
|
|
1112
|
-
const
|
|
1113
|
-
if (
|
|
1114
|
-
if (t.glyf && t.glyf[
|
|
1115
|
-
if (
|
|
1116
|
-
const s =
|
|
1117
|
-
return t.glyf && s && (t.glyf[
|
|
1195
|
+
Hs(t, e) {
|
|
1196
|
+
const r = e.codePointAt(0) || 0, i = this.Vs.vs(t, r);
|
|
1197
|
+
if (i === 0) return null;
|
|
1198
|
+
if (t.glyf && t.glyf[i] !== null) return t.glyf[i];
|
|
1199
|
+
if (w && w.T && w.T.glyf) {
|
|
1200
|
+
const s = w.T.glyf.us(t, i);
|
|
1201
|
+
return t.glyf && s && (t.glyf[i] = s), s;
|
|
1118
1202
|
}
|
|
1119
1203
|
return null;
|
|
1120
1204
|
}
|
|
1121
|
-
|
|
1122
|
-
const
|
|
1123
|
-
return
|
|
1205
|
+
Xs(t, e) {
|
|
1206
|
+
const r = t.hmtx;
|
|
1207
|
+
return r && r.aWidth ? e < r.aWidth.length ? r.aWidth[e] : r.aWidth[r.aWidth.length - 1] : 0;
|
|
1124
1208
|
}
|
|
1125
|
-
|
|
1209
|
+
Ys(t, e, r, i) {
|
|
1126
1210
|
if (!t || !t.xs || t.noc === 0) return;
|
|
1127
1211
|
const { xs: s, ys: n, endPts: o, flags: h } = t;
|
|
1128
1212
|
if (!(s && n && o && h)) return;
|
|
1129
|
-
this.
|
|
1213
|
+
this.ks.beginPath();
|
|
1130
1214
|
let l = 0;
|
|
1131
|
-
for (let
|
|
1132
|
-
const
|
|
1133
|
-
if (!(
|
|
1134
|
-
if (
|
|
1135
|
-
const
|
|
1136
|
-
this.
|
|
1215
|
+
for (let d = 0; d < o.length; d++) {
|
|
1216
|
+
const u = o[d];
|
|
1217
|
+
if (!(u < l)) {
|
|
1218
|
+
if (u >= l) {
|
|
1219
|
+
const f = e + s[l] * i, g = r - n[l] * i;
|
|
1220
|
+
this.ks.moveTo(f, g);
|
|
1137
1221
|
let p = l + 1;
|
|
1138
|
-
for (; p <=
|
|
1222
|
+
for (; p <= u; )
|
|
1139
1223
|
if (1 & h[p]) {
|
|
1140
|
-
const m = e + s[p] *
|
|
1141
|
-
this.
|
|
1224
|
+
const m = e + s[p] * i, E = r - n[p] * i;
|
|
1225
|
+
this.ks.lineTo(m, E), p++;
|
|
1142
1226
|
} else {
|
|
1143
|
-
const m = e + s[p] *
|
|
1144
|
-
let
|
|
1145
|
-
if (1 & h[
|
|
1146
|
-
const
|
|
1147
|
-
this.
|
|
1227
|
+
const m = e + s[p] * i, E = r - n[p] * i;
|
|
1228
|
+
let v = p + 1 > u ? l : p + 1;
|
|
1229
|
+
if (1 & h[v]) {
|
|
1230
|
+
const b = e + s[v] * i, _ = r - n[v] * i;
|
|
1231
|
+
this.ks.quadraticCurveTo(m, E, b, _), p = v + 1;
|
|
1148
1232
|
} else {
|
|
1149
|
-
const
|
|
1150
|
-
this.
|
|
1233
|
+
const b = (m + (e + s[v] * i)) / 2, _ = (E + (r - n[v] * i)) / 2;
|
|
1234
|
+
this.ks.quadraticCurveTo(m, E, b, _), p = v;
|
|
1151
1235
|
}
|
|
1152
1236
|
}
|
|
1153
|
-
this.
|
|
1237
|
+
this.ks.closePath();
|
|
1154
1238
|
}
|
|
1155
|
-
l =
|
|
1239
|
+
l = u + 1;
|
|
1156
1240
|
}
|
|
1157
1241
|
}
|
|
1158
|
-
this.
|
|
1242
|
+
this.ks.fill();
|
|
1159
1243
|
}
|
|
1160
1244
|
}
|
|
1161
|
-
class
|
|
1245
|
+
class _t {
|
|
1162
1246
|
constructor() {
|
|
1163
|
-
c(this, "
|
|
1164
|
-
this.
|
|
1247
|
+
c(this, "Ss");
|
|
1248
|
+
this.Ss = new z();
|
|
1165
1249
|
}
|
|
1166
|
-
calculateMaxGlyphDimensions(t, e,
|
|
1167
|
-
let
|
|
1168
|
-
const s = this.
|
|
1250
|
+
calculateMaxGlyphDimensions(t, e, r) {
|
|
1251
|
+
let i = 0;
|
|
1252
|
+
const s = this.Ss.Rs(r, e), n = s.lineHeight;
|
|
1169
1253
|
for (const o of t) {
|
|
1170
|
-
const h = this.
|
|
1254
|
+
const h = this.Ss.bs(r, o);
|
|
1171
1255
|
if (h === 0) continue;
|
|
1172
|
-
const l = this.
|
|
1173
|
-
|
|
1256
|
+
const l = this.Ss.zs(r, h) * s.scale;
|
|
1257
|
+
i = Math.max(i, l);
|
|
1174
1258
|
}
|
|
1175
|
-
return { width: Math.ceil(
|
|
1259
|
+
return { width: Math.ceil(i), height: Math.ceil(n) };
|
|
1176
1260
|
}
|
|
1177
|
-
getCharacterAdvanceWidth(t, e,
|
|
1178
|
-
const
|
|
1179
|
-
return this.
|
|
1261
|
+
getCharacterAdvanceWidth(t, e, r) {
|
|
1262
|
+
const i = this.Ss.Rs(r, e), s = this.Ss.bs(r, t);
|
|
1263
|
+
return this.Ss.zs(r, s) * i.scale;
|
|
1180
1264
|
}
|
|
1181
1265
|
getFontMetrics(t, e) {
|
|
1182
|
-
return this.
|
|
1266
|
+
return this.Ss.Rs(e, t);
|
|
1183
1267
|
}
|
|
1184
|
-
|
|
1185
|
-
this.
|
|
1268
|
+
Ts() {
|
|
1269
|
+
this.Ss.Ts();
|
|
1186
1270
|
}
|
|
1187
1271
|
}
|
|
1188
|
-
class
|
|
1272
|
+
class wt {
|
|
1189
1273
|
constructor() {
|
|
1190
|
-
c(this, "
|
|
1191
|
-
this.
|
|
1274
|
+
c(this, "Vs");
|
|
1275
|
+
this.Vs = new z();
|
|
1192
1276
|
}
|
|
1193
1277
|
createCharacterObjects(t, e) {
|
|
1194
|
-
return t.map((
|
|
1195
|
-
const s =
|
|
1278
|
+
return t.map((r, i) => {
|
|
1279
|
+
const s = r.codePointAt(0) || 0, n = this.qs(i);
|
|
1196
1280
|
let o = 0;
|
|
1197
1281
|
if (e.hmtx && e.hmtx.aWidth) {
|
|
1198
|
-
const h = this.
|
|
1282
|
+
const h = this.Vs.vs(e, s);
|
|
1199
1283
|
h > 0 && e.hmtx.aWidth[h] !== void 0 && (o = e.hmtx.aWidth[h]);
|
|
1200
1284
|
}
|
|
1201
|
-
return { character:
|
|
1285
|
+
return { character: r, unicode: s, color: n, advanceWidth: o };
|
|
1202
1286
|
});
|
|
1203
1287
|
}
|
|
1204
|
-
|
|
1288
|
+
qs(t) {
|
|
1205
1289
|
return [t % 256 / 255, Math.floor(t / 256) % 256 / 255, Math.floor(t / 65536) % 256 / 255];
|
|
1206
1290
|
}
|
|
1207
|
-
|
|
1208
|
-
if (!
|
|
1209
|
-
const
|
|
1210
|
-
return
|
|
1291
|
+
Zs(t, e) {
|
|
1292
|
+
if (!I.m(typeof t == "string", "Character must be a string.", { method: "getCharacterColor", providedValue: t })) return [0, 0, 0];
|
|
1293
|
+
const r = e.find((i) => i.character === t);
|
|
1294
|
+
return r ? r.color : [0, 0, 0];
|
|
1211
1295
|
}
|
|
1212
|
-
|
|
1213
|
-
return
|
|
1296
|
+
Ns(t, e) {
|
|
1297
|
+
return I.m(typeof t == "string" && t.length > 0, "Characters must be a string with at least one character.", { method: "getCharacterColors", providedValue: t }) ? Array.from(t).map((r) => this.Zs(r, e) || [0, 0, 0]) : [[0, 0, 0]];
|
|
1214
1298
|
}
|
|
1215
1299
|
}
|
|
1216
|
-
class
|
|
1300
|
+
class Tt {
|
|
1217
1301
|
constructor(t, e = 16) {
|
|
1218
|
-
c(this, "
|
|
1219
|
-
c(this, "
|
|
1220
|
-
c(this, "
|
|
1221
|
-
c(this, "
|
|
1222
|
-
c(this, "
|
|
1223
|
-
c(this, "
|
|
1224
|
-
c(this, "
|
|
1225
|
-
c(this, "
|
|
1226
|
-
c(this, "
|
|
1227
|
-
c(this, "
|
|
1228
|
-
c(this, "
|
|
1229
|
-
c(this, "
|
|
1230
|
-
this.
|
|
1302
|
+
c(this, "Qs");
|
|
1303
|
+
c(this, "Js", []);
|
|
1304
|
+
c(this, "Ks");
|
|
1305
|
+
c(this, "ti", 16);
|
|
1306
|
+
c(this, "ei", 0);
|
|
1307
|
+
c(this, "si", 0);
|
|
1308
|
+
c(this, "ii", { width: 0, height: 0 });
|
|
1309
|
+
c(this, "ri");
|
|
1310
|
+
c(this, "ni");
|
|
1311
|
+
c(this, "oi");
|
|
1312
|
+
c(this, "ai");
|
|
1313
|
+
c(this, "hi");
|
|
1314
|
+
this.ti = e, this.ni = new Et(), this.oi = new bt(t), this.ai = new _t(), this.hi = new wt();
|
|
1231
1315
|
}
|
|
1232
|
-
async
|
|
1316
|
+
async ci(t) {
|
|
1233
1317
|
let e;
|
|
1234
|
-
if (!t) throw new
|
|
1318
|
+
if (!t) throw new S("Embedded font not available. This appears to be a minified build - please provide `fontSource`.");
|
|
1235
1319
|
{
|
|
1236
|
-
const
|
|
1237
|
-
if (!
|
|
1238
|
-
e = await
|
|
1320
|
+
const r = await fetch(t);
|
|
1321
|
+
if (!r.ok) throw new S(`Failed to load font file: ${r.status} ${r.statusText}`);
|
|
1322
|
+
e = await r.arrayBuffer();
|
|
1239
1323
|
}
|
|
1240
|
-
await this.
|
|
1324
|
+
await this.li(e), this.Qs = w.parse(e)[0], await this.ui();
|
|
1241
1325
|
}
|
|
1242
|
-
|
|
1243
|
-
if (t === void 0) return this.
|
|
1244
|
-
this.
|
|
1245
|
-
const e = this.
|
|
1246
|
-
this.
|
|
1326
|
+
fi(t) {
|
|
1327
|
+
if (t === void 0) return this.ti;
|
|
1328
|
+
this.ti = t, this.ii = this.ai.calculateMaxGlyphDimensions(this.Js.map((r) => r.character), this.ti, this.Qs);
|
|
1329
|
+
const e = this.oi.createTextureAtlas(this.Js, this.ii, this.ti, this.Qs);
|
|
1330
|
+
this.Ks = e.framebuffer, this.ei = e.columns, this.si = e.rows;
|
|
1247
1331
|
}
|
|
1248
|
-
async
|
|
1332
|
+
async di(t) {
|
|
1249
1333
|
try {
|
|
1250
1334
|
const e = await fetch(t);
|
|
1251
|
-
if (!e.ok) throw new
|
|
1252
|
-
const
|
|
1253
|
-
await this.
|
|
1254
|
-
const
|
|
1255
|
-
if (!
|
|
1256
|
-
this.
|
|
1335
|
+
if (!e.ok) throw new S(`Failed to load font file: ${e.status} ${e.statusText}`);
|
|
1336
|
+
const r = await e.arrayBuffer();
|
|
1337
|
+
await this.li(r);
|
|
1338
|
+
const i = w.parse(r);
|
|
1339
|
+
if (!i || i.length === 0) throw Error("Failed to parse font file");
|
|
1340
|
+
this.Qs = i[0], await this.ui();
|
|
1257
1341
|
} catch (e) {
|
|
1258
|
-
throw new
|
|
1342
|
+
throw new S("Failed to load font: " + (e instanceof Error ? e.message : "Unknown error"), e);
|
|
1259
1343
|
}
|
|
1260
1344
|
}
|
|
1261
|
-
async
|
|
1345
|
+
async li(t) {
|
|
1262
1346
|
const e = Date.now();
|
|
1263
|
-
this.
|
|
1347
|
+
this.ri = new FontFace("CustomFont_" + e, t), await this.ri.load(), document.fonts.add(this.ri);
|
|
1264
1348
|
}
|
|
1265
|
-
async
|
|
1266
|
-
const t = this.
|
|
1267
|
-
this.
|
|
1268
|
-
const
|
|
1269
|
-
this.
|
|
1349
|
+
async ui() {
|
|
1350
|
+
const t = this.ni.extractCharacters(this.Qs), e = this.ni.filterProblematicCharacters(t);
|
|
1351
|
+
this.Js = this.hi.createCharacterObjects(e, this.Qs), this.ii = this.ai.calculateMaxGlyphDimensions(e, this.ti, this.Qs);
|
|
1352
|
+
const r = this.oi.createTextureAtlas(this.Js, this.ii, this.ti, this.Qs);
|
|
1353
|
+
this.Ks = r.framebuffer, this.ei = r.columns, this.si = r.rows;
|
|
1270
1354
|
}
|
|
1271
|
-
|
|
1272
|
-
return this.
|
|
1355
|
+
Zs(t) {
|
|
1356
|
+
return this.hi.Zs(t, this.Js);
|
|
1273
1357
|
}
|
|
1274
|
-
|
|
1275
|
-
return this.
|
|
1358
|
+
Ns(t) {
|
|
1359
|
+
return this.hi.Ns(t, this.Js);
|
|
1276
1360
|
}
|
|
1277
|
-
|
|
1278
|
-
this.
|
|
1361
|
+
j() {
|
|
1362
|
+
this.Ks.j(), document.fonts.delete(this.ri);
|
|
1279
1363
|
}
|
|
1280
1364
|
get fontFramebuffer() {
|
|
1281
|
-
return this.
|
|
1365
|
+
return this.Ks;
|
|
1282
1366
|
}
|
|
1283
1367
|
get characters() {
|
|
1284
|
-
return this.
|
|
1368
|
+
return this.Js;
|
|
1285
1369
|
}
|
|
1286
1370
|
get textureColumns() {
|
|
1287
|
-
return this.
|
|
1371
|
+
return this.ei;
|
|
1288
1372
|
}
|
|
1289
1373
|
get textureRows() {
|
|
1290
|
-
return this.
|
|
1374
|
+
return this.si;
|
|
1291
1375
|
}
|
|
1292
1376
|
get maxGlyphDimensions() {
|
|
1293
|
-
return this.
|
|
1377
|
+
return this.ii;
|
|
1294
1378
|
}
|
|
1295
1379
|
get fontSize() {
|
|
1296
|
-
return this.
|
|
1380
|
+
return this.ti;
|
|
1297
1381
|
}
|
|
1298
1382
|
get font() {
|
|
1299
|
-
return this.
|
|
1383
|
+
return this.Qs;
|
|
1300
1384
|
}
|
|
1301
1385
|
}
|
|
1302
|
-
class
|
|
1303
|
-
constructor(t, e,
|
|
1304
|
-
c(this, "
|
|
1305
|
-
c(this, "
|
|
1306
|
-
c(this, "v");
|
|
1386
|
+
class At {
|
|
1387
|
+
constructor(t, e, r) {
|
|
1388
|
+
c(this, "pi");
|
|
1389
|
+
c(this, "_i");
|
|
1307
1390
|
c(this, "C");
|
|
1308
|
-
c(this, "
|
|
1309
|
-
c(this, "
|
|
1310
|
-
c(this, "
|
|
1311
|
-
c(this, "
|
|
1312
|
-
c(this, "
|
|
1313
|
-
this
|
|
1391
|
+
c(this, "$");
|
|
1392
|
+
c(this, "gi");
|
|
1393
|
+
c(this, "mi");
|
|
1394
|
+
c(this, "xi");
|
|
1395
|
+
c(this, "Ci");
|
|
1396
|
+
c(this, "yi");
|
|
1397
|
+
this.xi = t, this.Ci = e, this.yi = r, this.zt();
|
|
1314
1398
|
}
|
|
1315
|
-
|
|
1316
|
-
this.
|
|
1399
|
+
zt() {
|
|
1400
|
+
this.pi = Math.floor(this.xi.width / this.Ci), this._i = Math.floor(this.xi.height / this.yi), this.C = this.pi * this.Ci, this.$ = this._i * this.yi, this.gi = Math.floor((this.xi.width - this.C) / 2), this.mi = Math.floor((this.xi.height - this.$) / 2);
|
|
1317
1401
|
}
|
|
1318
|
-
|
|
1319
|
-
this.
|
|
1402
|
+
wi(t, e) {
|
|
1403
|
+
this.Ci = t, this.yi = e, this.zt();
|
|
1320
1404
|
}
|
|
1321
1405
|
get cellWidth() {
|
|
1322
|
-
return this.
|
|
1406
|
+
return this.Ci;
|
|
1323
1407
|
}
|
|
1324
1408
|
get cellHeight() {
|
|
1325
|
-
return this.
|
|
1409
|
+
return this.yi;
|
|
1326
1410
|
}
|
|
1327
1411
|
get cols() {
|
|
1328
|
-
return this.
|
|
1412
|
+
return this.pi;
|
|
1329
1413
|
}
|
|
1330
1414
|
get rows() {
|
|
1331
|
-
return this.
|
|
1415
|
+
return this._i;
|
|
1332
1416
|
}
|
|
1333
1417
|
get width() {
|
|
1334
|
-
return this.
|
|
1418
|
+
return this.C;
|
|
1335
1419
|
}
|
|
1336
1420
|
get height() {
|
|
1337
|
-
return this
|
|
1421
|
+
return this.$;
|
|
1338
1422
|
}
|
|
1339
1423
|
get offsetX() {
|
|
1340
|
-
return this.
|
|
1424
|
+
return this.gi;
|
|
1341
1425
|
}
|
|
1342
1426
|
get offsetY() {
|
|
1343
|
-
return this.
|
|
1427
|
+
return this.mi;
|
|
1344
1428
|
}
|
|
1345
1429
|
}
|
|
1346
|
-
class
|
|
1430
|
+
class Ft {
|
|
1347
1431
|
constructor(t = {}) {
|
|
1348
|
-
c(this, "
|
|
1349
|
-
c(this, "
|
|
1350
|
-
c(this, "
|
|
1351
|
-
t.canvas ? (this.
|
|
1432
|
+
c(this, "xi");
|
|
1433
|
+
c(this, "$i");
|
|
1434
|
+
c(this, "bi");
|
|
1435
|
+
t.canvas ? (this.xi = t.canvas, this.bi = !1) : (this.xi = this.zi(t.width, t.height), this.bi = !0), this.xi.style.imageRendering = "pixelated";
|
|
1352
1436
|
}
|
|
1353
|
-
|
|
1354
|
-
const
|
|
1355
|
-
return
|
|
1437
|
+
zi(t, e) {
|
|
1438
|
+
const r = document.createElement("canvas");
|
|
1439
|
+
return r.className = "textmodeCanvas", r.style.imageRendering = "pixelated", r.width = t || 800, r.height = e || 600, document.body.appendChild(r), r;
|
|
1356
1440
|
}
|
|
1357
|
-
|
|
1358
|
-
this.
|
|
1441
|
+
W(t, e) {
|
|
1442
|
+
this.xi.width = t ?? this.xi.width, this.xi.height = e ?? this.xi.height;
|
|
1359
1443
|
}
|
|
1360
|
-
|
|
1361
|
-
const t = this.
|
|
1362
|
-
if (!t) throw new
|
|
1444
|
+
Ri() {
|
|
1445
|
+
const t = this.xi.getContext("webgl2", { alpha: !0, premultipliedAlpha: !1, preserveDrawingBuffer: !0, antialias: !1, depth: !1, stencil: !1, powerPreference: "high-performance" });
|
|
1446
|
+
if (!t) throw new S("`textmode.js` requires WebGL2 support.");
|
|
1363
1447
|
return t;
|
|
1364
1448
|
}
|
|
1365
|
-
|
|
1366
|
-
this
|
|
1367
|
-
const t = this.
|
|
1449
|
+
j() {
|
|
1450
|
+
this.$i && this.$i.disconnect();
|
|
1451
|
+
const t = this.xi.getContext("webgl") || this.xi.getContext("webgl2");
|
|
1368
1452
|
if (t) {
|
|
1369
1453
|
const e = t.getExtension("WEBGL_lose_context");
|
|
1370
1454
|
e && e.loseContext();
|
|
1371
1455
|
}
|
|
1372
|
-
this.
|
|
1456
|
+
this.bi && this.xi.parentNode && this.xi.parentNode.removeChild(this.xi);
|
|
1373
1457
|
}
|
|
1374
1458
|
get canvas() {
|
|
1375
|
-
return this.
|
|
1459
|
+
return this.xi;
|
|
1376
1460
|
}
|
|
1377
1461
|
get width() {
|
|
1378
|
-
return this.
|
|
1462
|
+
return this.xi.width;
|
|
1379
1463
|
}
|
|
1380
1464
|
get height() {
|
|
1381
|
-
return this.
|
|
1465
|
+
return this.xi.height;
|
|
1382
1466
|
}
|
|
1383
1467
|
}
|
|
1384
|
-
class
|
|
1468
|
+
class Ut {
|
|
1385
1469
|
constructor(t = 60) {
|
|
1386
|
-
c(this, "
|
|
1387
|
-
c(this, "
|
|
1388
|
-
c(this, "
|
|
1389
|
-
c(this, "
|
|
1390
|
-
c(this, "
|
|
1391
|
-
c(this, "
|
|
1392
|
-
c(this, "
|
|
1393
|
-
c(this, "
|
|
1394
|
-
c(this, "
|
|
1395
|
-
c(this, "
|
|
1396
|
-
this.
|
|
1470
|
+
c(this, "Ti");
|
|
1471
|
+
c(this, "Si");
|
|
1472
|
+
c(this, "Mi", null);
|
|
1473
|
+
c(this, "Fi", 0);
|
|
1474
|
+
c(this, "Gi", !0);
|
|
1475
|
+
c(this, "Di", 0);
|
|
1476
|
+
c(this, "Pi", 0);
|
|
1477
|
+
c(this, "Ai", []);
|
|
1478
|
+
c(this, "Bi", 10);
|
|
1479
|
+
c(this, "Ii", 0);
|
|
1480
|
+
this.Ti = t, this.Si = 1e3 / t;
|
|
1397
1481
|
}
|
|
1398
1482
|
start(t) {
|
|
1399
|
-
if (!this.
|
|
1400
|
-
this.
|
|
1401
|
-
const e = (
|
|
1402
|
-
if (!this.
|
|
1403
|
-
const
|
|
1404
|
-
|
|
1483
|
+
if (!this.Gi) return;
|
|
1484
|
+
this.Fi = performance.now();
|
|
1485
|
+
const e = (r) => {
|
|
1486
|
+
if (!this.Gi) return void (this.Mi = null);
|
|
1487
|
+
const i = r - this.Fi;
|
|
1488
|
+
i >= this.Si && (t(), this.Fi = r - i % this.Si), this.Gi && (this.Mi = requestAnimationFrame(e));
|
|
1405
1489
|
};
|
|
1406
|
-
this.
|
|
1490
|
+
this.Mi = requestAnimationFrame(e);
|
|
1407
1491
|
}
|
|
1408
1492
|
stop() {
|
|
1409
|
-
this.
|
|
1493
|
+
this.Mi && (cancelAnimationFrame(this.Mi), this.Mi = null);
|
|
1410
1494
|
}
|
|
1411
1495
|
pause() {
|
|
1412
|
-
this.
|
|
1496
|
+
this.Gi && (this.Gi = !1, this.stop());
|
|
1413
1497
|
}
|
|
1414
1498
|
resume(t) {
|
|
1415
|
-
this.
|
|
1499
|
+
this.Gi || (this.Gi = !0, this.start(t));
|
|
1416
1500
|
}
|
|
1417
1501
|
frameRate(t, e) {
|
|
1418
|
-
if (t === void 0) return this.
|
|
1419
|
-
this.
|
|
1502
|
+
if (t === void 0) return this.Di;
|
|
1503
|
+
this.Ti = t, this.Si = 1e3 / t, this.Gi && e && (this.stop(), this.start(e));
|
|
1420
1504
|
}
|
|
1421
1505
|
measureFrameRate() {
|
|
1422
1506
|
const t = performance.now();
|
|
1423
|
-
if (this.
|
|
1424
|
-
const e = t - this.
|
|
1425
|
-
this.
|
|
1426
|
-
const
|
|
1427
|
-
this.
|
|
1507
|
+
if (this.Pi > 0) {
|
|
1508
|
+
const e = t - this.Pi;
|
|
1509
|
+
this.Ai.push(e), this.Ai.length > this.Bi && this.Ai.shift();
|
|
1510
|
+
const r = this.Ai.reduce((i, s) => i + s, 0) / this.Ai.length;
|
|
1511
|
+
this.Di = 1e3 / r;
|
|
1428
1512
|
}
|
|
1429
|
-
this.
|
|
1513
|
+
this.Pi = t;
|
|
1430
1514
|
}
|
|
1431
1515
|
get isLooping() {
|
|
1432
|
-
return this.
|
|
1516
|
+
return this.Gi;
|
|
1433
1517
|
}
|
|
1434
1518
|
get frameRateLimit() {
|
|
1435
|
-
return this.
|
|
1519
|
+
return this.Ti;
|
|
1436
1520
|
}
|
|
1437
1521
|
get currentFrameRate() {
|
|
1438
|
-
return this.
|
|
1522
|
+
return this.Di;
|
|
1439
1523
|
}
|
|
1440
1524
|
get frameCount() {
|
|
1441
|
-
return this.
|
|
1525
|
+
return this.Ii;
|
|
1442
1526
|
}
|
|
1443
1527
|
set frameCount(t) {
|
|
1444
|
-
this.
|
|
1528
|
+
this.Ii = t;
|
|
1445
1529
|
}
|
|
1446
1530
|
incrementFrame() {
|
|
1447
|
-
this.
|
|
1531
|
+
this.Ii++;
|
|
1448
1532
|
}
|
|
1449
1533
|
resetFrameCount() {
|
|
1450
|
-
this.
|
|
1534
|
+
this.Ii = 0;
|
|
1451
1535
|
}
|
|
1452
1536
|
}
|
|
1453
|
-
const
|
|
1454
|
-
rotate(t) {
|
|
1455
|
-
this
|
|
1537
|
+
const Lt = (a) => class extends a {
|
|
1538
|
+
rotate(t = 0, e = 0, r = 0) {
|
|
1539
|
+
this.Us.state.St(t), this.Us.state.Mt(e), this.Us.state.Ft(r);
|
|
1540
|
+
}
|
|
1541
|
+
rotateX(t) {
|
|
1542
|
+
this.Us.state.St(t);
|
|
1543
|
+
}
|
|
1544
|
+
rotateY(t) {
|
|
1545
|
+
this.Us.state.Mt(t);
|
|
1546
|
+
}
|
|
1547
|
+
rotateZ(t) {
|
|
1548
|
+
this.Us.state.Ft(t);
|
|
1456
1549
|
}
|
|
1457
1550
|
push() {
|
|
1458
|
-
this
|
|
1551
|
+
this.Us.state.$t();
|
|
1459
1552
|
}
|
|
1460
1553
|
pop() {
|
|
1461
|
-
this
|
|
1554
|
+
this.Us.state.bt();
|
|
1462
1555
|
}
|
|
1463
|
-
rect(t, e,
|
|
1464
|
-
this
|
|
1556
|
+
rect(t, e, r = 1, i = 1) {
|
|
1557
|
+
this.Us.Je(t, e, r, i);
|
|
1465
1558
|
}
|
|
1466
|
-
line(t, e,
|
|
1467
|
-
this
|
|
1559
|
+
line(t, e, r, i) {
|
|
1560
|
+
this.Us.Ke(t, e, r, i);
|
|
1468
1561
|
}
|
|
1469
1562
|
lineWeight(t) {
|
|
1470
|
-
this
|
|
1563
|
+
this.Us.state.Tt(t);
|
|
1471
1564
|
}
|
|
1472
|
-
background(t, e = t,
|
|
1473
|
-
this
|
|
1565
|
+
background(t, e = t, r = t, i = 255) {
|
|
1566
|
+
this.Us.hs(t, e, r, i);
|
|
1474
1567
|
}
|
|
1475
1568
|
char(t) {
|
|
1476
|
-
this
|
|
1569
|
+
this.Us.state.Gt(this.Qs.Zs(t));
|
|
1477
1570
|
}
|
|
1478
|
-
charColor(t, e,
|
|
1479
|
-
this
|
|
1571
|
+
charColor(t, e, r) {
|
|
1572
|
+
this.Us.state.Dt(t, e, r);
|
|
1480
1573
|
}
|
|
1481
|
-
cellColor(t, e,
|
|
1482
|
-
this
|
|
1574
|
+
cellColor(t, e, r) {
|
|
1575
|
+
this.Us.state.Pt(t, e, r);
|
|
1483
1576
|
}
|
|
1484
1577
|
flipHorizontally(t) {
|
|
1485
|
-
this
|
|
1578
|
+
this.Us.state.At(t);
|
|
1486
1579
|
}
|
|
1487
1580
|
flipVertically(t) {
|
|
1488
|
-
this
|
|
1581
|
+
this.Us.state.Bt(t);
|
|
1489
1582
|
}
|
|
1490
1583
|
charRotation(t) {
|
|
1491
|
-
this
|
|
1584
|
+
this.Us.state.Lt(t);
|
|
1492
1585
|
}
|
|
1493
1586
|
invert(t) {
|
|
1494
|
-
this
|
|
1587
|
+
this.Us.state.It(t);
|
|
1495
1588
|
}
|
|
1496
1589
|
clear() {
|
|
1497
|
-
this
|
|
1590
|
+
this.Us.hs(0, 0, 0, 0);
|
|
1591
|
+
}
|
|
1592
|
+
ellipse(t, e, r, i) {
|
|
1593
|
+
this.Us.ts(t, e, r / 2, i / 2);
|
|
1594
|
+
}
|
|
1595
|
+
triangle(t, e, r, i, s, n) {
|
|
1596
|
+
this.Us.es(t, e, r, i, s, n);
|
|
1597
|
+
}
|
|
1598
|
+
bezierCurve(t, e, r, i, s, n, o, h) {
|
|
1599
|
+
this.Us.ss(t, e, r, i, s, n, o, h);
|
|
1498
1600
|
}
|
|
1499
|
-
|
|
1500
|
-
this
|
|
1601
|
+
arc(t, e, r, i, s, n) {
|
|
1602
|
+
this.Us.ns(t, e, r, i, s, n);
|
|
1501
1603
|
}
|
|
1502
|
-
|
|
1503
|
-
this
|
|
1604
|
+
shader(t) {
|
|
1605
|
+
this.Us.Ye(t);
|
|
1504
1606
|
}
|
|
1505
|
-
|
|
1506
|
-
this
|
|
1607
|
+
setUniform(t, e) {
|
|
1608
|
+
this.Us.qe(t, e);
|
|
1507
1609
|
}
|
|
1508
|
-
|
|
1509
|
-
this
|
|
1610
|
+
setUniforms(t) {
|
|
1611
|
+
this.Us.Ze(t);
|
|
1612
|
+
}
|
|
1613
|
+
createFilterShader(t) {
|
|
1614
|
+
return this.Us.Ne(t);
|
|
1510
1615
|
}
|
|
1511
1616
|
};
|
|
1512
|
-
class
|
|
1513
|
-
|
|
1514
|
-
const e = t.
|
|
1515
|
-
return { characterPixels: e, primaryColorPixels:
|
|
1617
|
+
class W {
|
|
1618
|
+
Li(t) {
|
|
1619
|
+
const e = t.k(0), r = t.k(1), i = t.k(2), s = t.k(3);
|
|
1620
|
+
return { characterPixels: e, primaryColorPixels: r, secondaryColorPixels: i, transformPixels: t.k(4), rotationPixels: s };
|
|
1516
1621
|
}
|
|
1517
|
-
|
|
1622
|
+
Ei(t, e) {
|
|
1518
1623
|
return t[e] + (t[e + 1] << 8);
|
|
1519
1624
|
}
|
|
1520
|
-
|
|
1625
|
+
Wi(t, e) {
|
|
1521
1626
|
return { r: t[e], g: t[e + 1], b: t[e + 2], a: t[e + 3] };
|
|
1522
1627
|
}
|
|
1523
1628
|
}
|
|
1524
|
-
class
|
|
1525
|
-
|
|
1629
|
+
class k {
|
|
1630
|
+
ki(t, e) {
|
|
1526
1631
|
return new Blob([t], { type: e });
|
|
1527
1632
|
}
|
|
1528
|
-
|
|
1633
|
+
Ui(t, e, r) {
|
|
1529
1634
|
try {
|
|
1530
|
-
const
|
|
1635
|
+
const i = this.ki(t, r), s = URL.createObjectURL(i), n = document.createElement("a");
|
|
1531
1636
|
n.href = s, n.download = e, n.style.display = "none", n.rel = "noopener", document.body.appendChild(n), n.click(), document.body.removeChild(n), URL.revokeObjectURL(s);
|
|
1532
|
-
} catch (
|
|
1533
|
-
throw console.error("Failed to download file:",
|
|
1637
|
+
} catch (i) {
|
|
1638
|
+
throw console.error("Failed to download file:", i), Error("File download failed: " + (i instanceof Error ? i.message : "Unknown error"));
|
|
1534
1639
|
}
|
|
1535
1640
|
}
|
|
1536
|
-
|
|
1641
|
+
Vi() {
|
|
1537
1642
|
return (/* @__PURE__ */ new Date()).toISOString().slice(0, 19).replace(/:/g, "-");
|
|
1538
1643
|
}
|
|
1539
|
-
|
|
1644
|
+
Oi() {
|
|
1540
1645
|
const t = /* @__PURE__ */ new Date();
|
|
1541
1646
|
return { date: t.toISOString().split("T")[0], time: t.toTimeString().split(" ")[0].replace(/:/g, "-") };
|
|
1542
1647
|
}
|
|
1543
|
-
|
|
1648
|
+
ji(t) {
|
|
1544
1649
|
return t.replace(/[<>:"/\\|?*]/g, "_").replace(/\s+/g, "_").replace(/_{2,}/g, "_").replace(/^_+|_+$/g, "").substring(0, 255);
|
|
1545
1650
|
}
|
|
1546
|
-
|
|
1547
|
-
return "
|
|
1651
|
+
Hi() {
|
|
1652
|
+
return "textmode-export-" + this.Vi();
|
|
1548
1653
|
}
|
|
1549
1654
|
}
|
|
1550
|
-
class
|
|
1551
|
-
|
|
1552
|
-
const
|
|
1553
|
-
return { isInverted:
|
|
1655
|
+
class Pt extends W {
|
|
1656
|
+
Xi(t, e, r) {
|
|
1657
|
+
const i = t[r] === 255, s = t[r + 1] === 255, n = t[r + 2] === 255, o = e[r], h = e[r + 1];
|
|
1658
|
+
return { isInverted: i, flipHorizontal: s, flipVertical: n, rotation: Math.round(360 * (o + h / 255) / 255 * 100) / 100 };
|
|
1554
1659
|
}
|
|
1555
|
-
|
|
1556
|
-
return { x: t, y: e, cellX: t *
|
|
1660
|
+
Yi(t, e, r) {
|
|
1661
|
+
return { x: t, y: e, cellX: t * r.cellWidth, cellY: e * r.cellHeight };
|
|
1557
1662
|
}
|
|
1558
|
-
|
|
1559
|
-
const
|
|
1560
|
-
let
|
|
1663
|
+
qi(t, e) {
|
|
1664
|
+
const r = [];
|
|
1665
|
+
let i = 0;
|
|
1561
1666
|
for (let s = 0; s < e.rows; s++) for (let n = 0; n < e.cols; n++) {
|
|
1562
|
-
const o = 4 *
|
|
1563
|
-
let l = this.
|
|
1564
|
-
const
|
|
1565
|
-
if (
|
|
1667
|
+
const o = 4 * i, h = this.Ei(t.characterPixels, o);
|
|
1668
|
+
let l = this.Wi(t.primaryColorPixels, o), d = this.Wi(t.secondaryColorPixels, o);
|
|
1669
|
+
const u = this.Xi(t.transformPixels, t.rotationPixels, o);
|
|
1670
|
+
if (u.isInverted) {
|
|
1566
1671
|
const g = l;
|
|
1567
|
-
l =
|
|
1672
|
+
l = d, d = g;
|
|
1568
1673
|
}
|
|
1569
|
-
const
|
|
1570
|
-
|
|
1674
|
+
const f = this.Yi(n, s, e);
|
|
1675
|
+
r.push({ charIndex: h, primaryColor: l, secondaryColor: d, transform: u, position: f }), i++;
|
|
1571
1676
|
}
|
|
1572
|
-
return
|
|
1677
|
+
return r;
|
|
1573
1678
|
}
|
|
1574
1679
|
}
|
|
1575
|
-
class
|
|
1576
|
-
|
|
1577
|
-
const
|
|
1578
|
-
for (const
|
|
1579
|
-
const s =
|
|
1680
|
+
class It {
|
|
1681
|
+
Zi(t, e) {
|
|
1682
|
+
const r = t.cmap;
|
|
1683
|
+
for (const i of r.tables) if (i.format === 4) {
|
|
1684
|
+
const s = i;
|
|
1580
1685
|
for (let n = 0; n < s.startCount.length; n++) if (e >= s.startCount[n] && e <= s.endCount[n]) {
|
|
1581
1686
|
if (s.idRangeOffset[n] === 0) return e + s.idDelta[n] & 65535;
|
|
1582
1687
|
{
|
|
@@ -1587,8 +1692,8 @@ class Ut {
|
|
|
1587
1692
|
}
|
|
1588
1693
|
}
|
|
1589
1694
|
}
|
|
1590
|
-
} else if (
|
|
1591
|
-
const s =
|
|
1695
|
+
} else if (i.format === 12) {
|
|
1696
|
+
const s = i;
|
|
1592
1697
|
for (let n = 0; n < s.groups.length; n += 3) {
|
|
1593
1698
|
const o = s.groups[n], h = s.groups[n + 1], l = s.groups[n + 2];
|
|
1594
1699
|
if (e >= o && e <= h) return l + (e - o);
|
|
@@ -1596,60 +1701,60 @@ class Ut {
|
|
|
1596
1701
|
}
|
|
1597
1702
|
return 0;
|
|
1598
1703
|
}
|
|
1599
|
-
|
|
1704
|
+
Ni(t, e, r, i, s) {
|
|
1600
1705
|
const n = s / t.head.unitsPerEm;
|
|
1601
|
-
return { getBoundingBox: () => ({ x1:
|
|
1706
|
+
return { getBoundingBox: () => ({ x1: r + e.xMin * n, y1: i + -e.yMax * n, x2: r + e.xMax * n, y2: i + -e.yMin * n }), toSVG: () => this.Qi(e, r, i, n) };
|
|
1602
1707
|
}
|
|
1603
|
-
|
|
1708
|
+
Qi(t, e, r, i) {
|
|
1604
1709
|
if (!t || !t.xs) return "";
|
|
1605
1710
|
const { xs: s, ys: n, endPts: o, flags: h } = t;
|
|
1606
1711
|
if (!(s && n && o && h)) return "";
|
|
1607
|
-
let l = "",
|
|
1608
|
-
for (let
|
|
1609
|
-
const
|
|
1610
|
-
if (!(
|
|
1611
|
-
if (
|
|
1612
|
-
const g = e + s[
|
|
1712
|
+
let l = "", d = 0;
|
|
1713
|
+
for (let u = 0; u < o.length; u++) {
|
|
1714
|
+
const f = o[u];
|
|
1715
|
+
if (!(f < d)) {
|
|
1716
|
+
if (f >= d) {
|
|
1717
|
+
const g = e + s[d] * i, p = r - n[d] * i;
|
|
1613
1718
|
l += `M${g.toFixed(2)},${p.toFixed(2)}`;
|
|
1614
|
-
let m =
|
|
1615
|
-
for (; m <=
|
|
1719
|
+
let m = d + 1;
|
|
1720
|
+
for (; m <= f; )
|
|
1616
1721
|
if (1 & h[m]) {
|
|
1617
|
-
const
|
|
1618
|
-
l += `L${
|
|
1722
|
+
const E = e + s[m] * i, v = r - n[m] * i;
|
|
1723
|
+
l += `L${E.toFixed(2)},${v.toFixed(2)}`, m++;
|
|
1619
1724
|
} else {
|
|
1620
|
-
const
|
|
1621
|
-
let
|
|
1622
|
-
if (1 & h[
|
|
1623
|
-
const
|
|
1624
|
-
l += `Q${
|
|
1725
|
+
const E = e + s[m] * i, v = r - n[m] * i;
|
|
1726
|
+
let b = m + 1 > f ? d : m + 1;
|
|
1727
|
+
if (1 & h[b]) {
|
|
1728
|
+
const _ = e + s[b] * i, y = r - n[b] * i;
|
|
1729
|
+
l += `Q${E.toFixed(2)},${v.toFixed(2)} ${_.toFixed(2)},${y.toFixed(2)}`, m = b + 1;
|
|
1625
1730
|
} else {
|
|
1626
|
-
const
|
|
1627
|
-
l += `Q${
|
|
1731
|
+
const _ = (E + (e + s[b] * i)) / 2, y = (v + (r - n[b] * i)) / 2;
|
|
1732
|
+
l += `Q${E.toFixed(2)},${v.toFixed(2)} ${_.toFixed(2)},${y.toFixed(2)}`, m = b;
|
|
1628
1733
|
}
|
|
1629
1734
|
}
|
|
1630
1735
|
l += "Z";
|
|
1631
1736
|
}
|
|
1632
|
-
|
|
1737
|
+
d = f + 1;
|
|
1633
1738
|
}
|
|
1634
1739
|
}
|
|
1635
1740
|
return l;
|
|
1636
1741
|
}
|
|
1637
|
-
|
|
1638
|
-
const n = t.codePointAt(0) || 0, o = this.
|
|
1742
|
+
Ji(t, e, r, i, s) {
|
|
1743
|
+
const n = t.codePointAt(0) || 0, o = this.Zi(e, n);
|
|
1639
1744
|
let h = null;
|
|
1640
|
-
return e.glyf && e.glyf[o] !== null ? h = e.glyf[o] : (h =
|
|
1745
|
+
return e.glyf && e.glyf[o] !== null ? h = e.glyf[o] : (h = w.T.glyf.us(e, o), e.glyf[o] = h), this.Ni(e, h, r, i, s);
|
|
1641
1746
|
}
|
|
1642
|
-
|
|
1643
|
-
const l =
|
|
1644
|
-
return this.
|
|
1747
|
+
Ki(t, e, r, i, s, n, o, h) {
|
|
1748
|
+
const l = r + (s - h * (o / e.head.unitsPerEm)) / 2, d = i + (n + 0.7 * o) / 2;
|
|
1749
|
+
return this.Ji(t, e, l, d, o).toSVG() || null;
|
|
1645
1750
|
}
|
|
1646
1751
|
}
|
|
1647
|
-
class
|
|
1752
|
+
class Dt {
|
|
1648
1753
|
constructor() {
|
|
1649
|
-
c(this, "
|
|
1650
|
-
this.
|
|
1754
|
+
c(this, "tr");
|
|
1755
|
+
this.tr = new It();
|
|
1651
1756
|
}
|
|
1652
|
-
|
|
1757
|
+
er(t) {
|
|
1653
1758
|
return `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
1654
1759
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
|
1655
1760
|
<svg width="${t.width}" height="${t.height}" viewBox="0 0 ${t.width} ${t.height}"
|
|
@@ -1657,103 +1762,103 @@ class It {
|
|
|
1657
1762
|
<title>textmode art generated via textmode.js</title>
|
|
1658
1763
|
<desc>textmode art visualization generated by textmode.js library</desc>`;
|
|
1659
1764
|
}
|
|
1660
|
-
|
|
1765
|
+
sr() {
|
|
1661
1766
|
return `
|
|
1662
1767
|
</g>
|
|
1663
1768
|
</svg>`;
|
|
1664
1769
|
}
|
|
1665
|
-
|
|
1770
|
+
ir(t, e) {
|
|
1666
1771
|
if (!e.includeBackgroundRectangles) return "";
|
|
1667
|
-
const
|
|
1772
|
+
const r = e.backgroundColor, i = `rgba(${r[0]},${r[1]},${r[2]},${r[3] / 255})`;
|
|
1668
1773
|
return `
|
|
1669
|
-
<rect width="${t.width}" height="${t.height}" fill="${
|
|
1774
|
+
<rect width="${t.width}" height="${t.height}" fill="${i}" />`;
|
|
1670
1775
|
}
|
|
1671
|
-
|
|
1776
|
+
rr(t) {
|
|
1672
1777
|
return `rgba(${t.r},${t.g},${t.b},${t.a / 255})`;
|
|
1673
1778
|
}
|
|
1674
|
-
|
|
1675
|
-
const { transform:
|
|
1676
|
-
if (
|
|
1677
|
-
const h =
|
|
1779
|
+
nr(t, e) {
|
|
1780
|
+
const { transform: r, position: i } = t, s = i.cellX + e.cellWidth / 2, n = i.cellY + e.cellHeight / 2, o = [];
|
|
1781
|
+
if (r.flipHorizontal || r.flipVertical) {
|
|
1782
|
+
const h = r.flipHorizontal ? -1 : 1, l = r.flipVertical ? -1 : 1;
|
|
1678
1783
|
o.push(`translate(${s} ${n})`), o.push(`scale(${h} ${l})`), o.push(`translate(${-s} ${-n})`);
|
|
1679
1784
|
}
|
|
1680
|
-
return
|
|
1785
|
+
return r.rotation && o.push(`rotate(${r.rotation} ${s} ${n})`), o.length ? ` transform="${o.join(" ")}"` : "";
|
|
1681
1786
|
}
|
|
1682
|
-
|
|
1683
|
-
if (!
|
|
1684
|
-
const { position:
|
|
1685
|
-
return
|
|
1686
|
-
<rect x="${
|
|
1687
|
-
<rect x="${
|
|
1787
|
+
ar(t, e, r) {
|
|
1788
|
+
if (!r.includeBackgroundRectangles || t.secondaryColor.a === 0) return "";
|
|
1789
|
+
const { position: i } = t, s = this.rr(t.secondaryColor);
|
|
1790
|
+
return r.drawMode === "stroke" ? `
|
|
1791
|
+
<rect x="${i.cellX}" y="${i.cellY}" width="${e.cellWidth}" height="${e.cellHeight}" stroke="${s}" fill="none" stroke-width="${r.strokeWidth}" />` : `
|
|
1792
|
+
<rect x="${i.cellX}" y="${i.cellY}" width="${e.cellWidth}" height="${e.cellHeight}" fill="${s}" />`;
|
|
1688
1793
|
}
|
|
1689
|
-
|
|
1690
|
-
const s =
|
|
1794
|
+
Ji(t, e, r, i) {
|
|
1795
|
+
const s = r.characters[t.charIndex];
|
|
1691
1796
|
if (!s) return "";
|
|
1692
|
-
const n = this.
|
|
1797
|
+
const n = this.tr.Ki(s.character, r.font, t.position.cellX, t.position.cellY, e.cellWidth, e.cellHeight, r.fontSize, s.advanceWidth);
|
|
1693
1798
|
if (!n) return "";
|
|
1694
|
-
const o = this.
|
|
1695
|
-
return
|
|
1696
|
-
<path id="${`path-${t.charIndex}-${t.position.cellX}-${t.position.cellY}`.replace(/\./g, "-")}" d="${n}" stroke="${o}" stroke-width="${
|
|
1799
|
+
const o = this.rr(t.primaryColor);
|
|
1800
|
+
return i.drawMode === "stroke" ? `
|
|
1801
|
+
<path id="${`path-${t.charIndex}-${t.position.cellX}-${t.position.cellY}`.replace(/\./g, "-")}" d="${n}" stroke="${o}" stroke-width="${i.strokeWidth}" fill="none" />` : `
|
|
1697
1802
|
<path d="${n}" fill="${o}" />`;
|
|
1698
1803
|
}
|
|
1699
|
-
|
|
1804
|
+
hr(t, e, r, i) {
|
|
1700
1805
|
let s = "";
|
|
1701
|
-
s += this.
|
|
1702
|
-
const n = this.
|
|
1806
|
+
s += this.ar(t, e, i);
|
|
1807
|
+
const n = this.nr(t, e), o = this.Ji(t, e, r, i);
|
|
1703
1808
|
return o && (n ? (s += `
|
|
1704
1809
|
<g${n}>`, s += o, s += `
|
|
1705
1810
|
</g>`) : s += o), s;
|
|
1706
1811
|
}
|
|
1707
|
-
|
|
1708
|
-
let s = this.
|
|
1709
|
-
s += this.
|
|
1812
|
+
cr(t, e, r, i) {
|
|
1813
|
+
let s = this.er(e);
|
|
1814
|
+
s += this.ir(e, i), s += `
|
|
1710
1815
|
<g id="ascii-cells">`;
|
|
1711
|
-
for (const n of t) s += this.
|
|
1712
|
-
return s += this.
|
|
1816
|
+
for (const n of t) s += this.hr(n, e, r, i);
|
|
1817
|
+
return s += this.sr(), s;
|
|
1713
1818
|
}
|
|
1714
|
-
|
|
1819
|
+
lr(t) {
|
|
1715
1820
|
return t.replace(/<path[^>]*d=""[^>]*\/>/g, "").replace(/\n\s*\n/g, `
|
|
1716
1821
|
`).replace(/[ \t]+$/gm, "");
|
|
1717
1822
|
}
|
|
1718
1823
|
}
|
|
1719
|
-
class
|
|
1720
|
-
|
|
1721
|
-
return this.
|
|
1824
|
+
class Mt extends k {
|
|
1825
|
+
ur(t) {
|
|
1826
|
+
return this.ki(t, "image/svg+xml;charset=utf-8");
|
|
1722
1827
|
}
|
|
1723
|
-
|
|
1724
|
-
this
|
|
1828
|
+
dr(t, e) {
|
|
1829
|
+
this.Ui(t, this.ji(e) + ".svg", "image/svg+xml;charset=utf-8");
|
|
1725
1830
|
}
|
|
1726
|
-
|
|
1727
|
-
this.
|
|
1831
|
+
pr(t, e) {
|
|
1832
|
+
this.dr(t, e || this.Hi());
|
|
1728
1833
|
}
|
|
1729
1834
|
}
|
|
1730
|
-
class
|
|
1835
|
+
class X {
|
|
1731
1836
|
constructor() {
|
|
1732
|
-
c(this, "
|
|
1733
|
-
c(this, "
|
|
1734
|
-
c(this, "
|
|
1735
|
-
this.
|
|
1837
|
+
c(this, "_r");
|
|
1838
|
+
c(this, "gr");
|
|
1839
|
+
c(this, "mr");
|
|
1840
|
+
this._r = new Pt(), this.gr = new Dt(), this.mr = new Mt();
|
|
1736
1841
|
}
|
|
1737
|
-
|
|
1738
|
-
return { includeBackgroundRectangles: t.includeBackgroundRectangles ?? !0, drawMode: t.drawMode ?? "fill", strokeWidth: t.strokeWidth ?? 1, backgroundColor: t.backgroundColor ?? [0, 0, 0, 0], filename: t.filename || this.
|
|
1842
|
+
vr(t) {
|
|
1843
|
+
return { includeBackgroundRectangles: t.includeBackgroundRectangles ?? !0, drawMode: t.drawMode ?? "fill", strokeWidth: t.strokeWidth ?? 1, backgroundColor: t.backgroundColor ?? [0, 0, 0, 0], filename: t.filename || this.mr.Hi() };
|
|
1739
1844
|
}
|
|
1740
|
-
|
|
1741
|
-
const
|
|
1742
|
-
return this.
|
|
1845
|
+
Cr(t, e = {}) {
|
|
1846
|
+
const r = this._r.qi(this._r.Li(t.pipeline), t.grid), i = this.gr.cr(r, t.grid, t.font, this.vr(e));
|
|
1847
|
+
return this.gr.lr(i);
|
|
1743
1848
|
}
|
|
1744
|
-
|
|
1745
|
-
this.
|
|
1849
|
+
pr(t, e = {}) {
|
|
1850
|
+
this.mr.pr(this.Cr(t, e), e.filename);
|
|
1746
1851
|
}
|
|
1747
1852
|
}
|
|
1748
|
-
class
|
|
1749
|
-
|
|
1853
|
+
class zt extends W {
|
|
1854
|
+
yr(t, e, r, i = " ") {
|
|
1750
1855
|
var o;
|
|
1751
1856
|
const s = [];
|
|
1752
1857
|
let n = 0;
|
|
1753
1858
|
for (let h = 0; h < e.rows; h++) {
|
|
1754
1859
|
const l = [];
|
|
1755
|
-
for (let
|
|
1756
|
-
const
|
|
1860
|
+
for (let d = 0; d < e.cols; d++) {
|
|
1861
|
+
const u = 4 * n, f = this.Ei(t.characterPixels, u), g = ((o = r.characters[f]) == null ? void 0 : o.character) || i;
|
|
1757
1862
|
l.push(g), n++;
|
|
1758
1863
|
}
|
|
1759
1864
|
s.push(l);
|
|
@@ -1762,68 +1867,68 @@ class Lt extends $ {
|
|
|
1762
1867
|
}
|
|
1763
1868
|
}
|
|
1764
1869
|
class Bt {
|
|
1765
|
-
|
|
1766
|
-
const
|
|
1870
|
+
wr(t, e) {
|
|
1871
|
+
const r = [];
|
|
1767
1872
|
for (const s of t) {
|
|
1768
1873
|
let n = s.join("");
|
|
1769
|
-
e.preserveTrailingSpaces || (n = n.replace(/\s+$/, "")),
|
|
1874
|
+
e.preserveTrailingSpaces || (n = n.replace(/\s+$/, "")), r.push(n);
|
|
1770
1875
|
}
|
|
1771
|
-
const
|
|
1876
|
+
const i = e.lineEnding === "crlf" ? `\r
|
|
1772
1877
|
` : `
|
|
1773
1878
|
`;
|
|
1774
|
-
return
|
|
1879
|
+
return r.join(i);
|
|
1775
1880
|
}
|
|
1776
1881
|
}
|
|
1777
|
-
class
|
|
1778
|
-
|
|
1779
|
-
const
|
|
1780
|
-
this
|
|
1882
|
+
class Gt extends k {
|
|
1883
|
+
$r(t, e) {
|
|
1884
|
+
const r = this.br(e);
|
|
1885
|
+
this.Ui(t, r, "text/plain;charset=utf-8");
|
|
1781
1886
|
}
|
|
1782
|
-
|
|
1783
|
-
let e = this.
|
|
1784
|
-
return e === ".txt" || e.length <= 4 ? this.
|
|
1887
|
+
br(t) {
|
|
1888
|
+
let e = this.ji(t);
|
|
1889
|
+
return e === ".txt" || e.length <= 4 ? this.Hi() : e;
|
|
1785
1890
|
}
|
|
1786
1891
|
}
|
|
1787
|
-
class
|
|
1892
|
+
class Y {
|
|
1788
1893
|
constructor() {
|
|
1789
|
-
c(this, "
|
|
1790
|
-
c(this, "
|
|
1791
|
-
c(this, "
|
|
1792
|
-
this.
|
|
1894
|
+
c(this, "_r");
|
|
1895
|
+
c(this, "gr");
|
|
1896
|
+
c(this, "mr");
|
|
1897
|
+
this._r = new zt(), this.gr = new Bt(), this.mr = new Gt();
|
|
1793
1898
|
}
|
|
1794
|
-
|
|
1795
|
-
return { preserveTrailingSpaces: t.preserveTrailingSpaces ?? !1, lineEnding: t.lineEnding ?? "lf", emptyCharacter: t.emptyCharacter ?? " ", filename: t.filename || this.
|
|
1899
|
+
vr(t) {
|
|
1900
|
+
return { preserveTrailingSpaces: t.preserveTrailingSpaces ?? !1, lineEnding: t.lineEnding ?? "lf", emptyCharacter: t.emptyCharacter ?? " ", filename: t.filename || this.mr.Hi() };
|
|
1796
1901
|
}
|
|
1797
|
-
|
|
1798
|
-
const
|
|
1799
|
-
return this.
|
|
1902
|
+
zr(t, e = {}) {
|
|
1903
|
+
const r = this.vr(e), i = this._r.yr(this._r.Li(t.pipeline), t.grid, t.font, r.emptyCharacter);
|
|
1904
|
+
return this.gr.wr(i, r);
|
|
1800
1905
|
}
|
|
1801
|
-
|
|
1802
|
-
this.
|
|
1906
|
+
$r(t, e = {}) {
|
|
1907
|
+
this.mr.$r(this.zr(t, e), e.filename);
|
|
1803
1908
|
}
|
|
1804
1909
|
}
|
|
1805
|
-
class
|
|
1806
|
-
|
|
1807
|
-
const
|
|
1808
|
-
if (e === 1 &&
|
|
1809
|
-
const s = document.createElement("canvas"), n = s.getContext("2d"), o = Math.round(
|
|
1810
|
-
return s.width = o, s.height = h,
|
|
1910
|
+
class $t extends W {
|
|
1911
|
+
Rr(t, e = 1, r = "transparent") {
|
|
1912
|
+
const i = t.canvas;
|
|
1913
|
+
if (e === 1 && r === "transparent") return i;
|
|
1914
|
+
const s = document.createElement("canvas"), n = s.getContext("2d"), o = Math.round(i.width * e), h = Math.round(i.height * e);
|
|
1915
|
+
return s.width = o, s.height = h, r !== "transparent" && (n.fillStyle = r, n.fillRect(0, 0, o, h)), n.imageSmoothingEnabled = !1, n.drawImage(i, 0, 0, i.width, i.height, 0, 0, o, h), s;
|
|
1811
1916
|
}
|
|
1812
1917
|
}
|
|
1813
|
-
class
|
|
1814
|
-
|
|
1815
|
-
const
|
|
1816
|
-
return e.format === "png" ? t.toDataURL(
|
|
1817
|
-
}
|
|
1818
|
-
async
|
|
1819
|
-
return new Promise((
|
|
1820
|
-
const s = this.
|
|
1821
|
-
o ?
|
|
1918
|
+
class Ot {
|
|
1919
|
+
Tr(t, e) {
|
|
1920
|
+
const r = this.Sr(e.format);
|
|
1921
|
+
return e.format === "png" ? t.toDataURL(r) : t.toDataURL(r, e.quality);
|
|
1922
|
+
}
|
|
1923
|
+
async Mr(t, e) {
|
|
1924
|
+
return new Promise((r, i) => {
|
|
1925
|
+
const s = this.Sr(e.format), n = (o) => {
|
|
1926
|
+
o ? r(o) : i(Error(`Failed to generate ${e.format.toUpperCase()} blob`));
|
|
1822
1927
|
};
|
|
1823
1928
|
e.format === "png" ? t.toBlob(n, s) : t.toBlob(n, s, e.quality);
|
|
1824
1929
|
});
|
|
1825
1930
|
}
|
|
1826
|
-
|
|
1931
|
+
Sr(t) {
|
|
1827
1932
|
switch (t) {
|
|
1828
1933
|
case "png":
|
|
1829
1934
|
return "image/png";
|
|
@@ -1836,211 +1941,210 @@ class Gt {
|
|
|
1836
1941
|
}
|
|
1837
1942
|
}
|
|
1838
1943
|
}
|
|
1839
|
-
const Wt = { png: "image/png", jpg: "image/jpeg", webp: "image/webp" },
|
|
1840
|
-
class
|
|
1841
|
-
|
|
1842
|
-
this.
|
|
1944
|
+
const Wt = { png: "image/png", jpg: "image/jpeg", webp: "image/webp" }, H = { png: ".png", jpg: ".jpg", webp: ".webp" };
|
|
1945
|
+
class kt extends k {
|
|
1946
|
+
Fr(t, e, r) {
|
|
1947
|
+
this.Gr(t, this.ji(e) + H[r]);
|
|
1843
1948
|
}
|
|
1844
|
-
|
|
1845
|
-
const
|
|
1949
|
+
Gr(t, e) {
|
|
1950
|
+
const r = URL.createObjectURL(t);
|
|
1846
1951
|
try {
|
|
1847
|
-
const
|
|
1848
|
-
|
|
1952
|
+
const i = document.createElement("a");
|
|
1953
|
+
i.href = r, i.download = e, i.style.display = "none", i.rel = "noopener", document.body.appendChild(i), i.click(), document.body.removeChild(i);
|
|
1849
1954
|
} finally {
|
|
1850
|
-
URL.revokeObjectURL(
|
|
1955
|
+
URL.revokeObjectURL(r);
|
|
1851
1956
|
}
|
|
1852
1957
|
}
|
|
1853
|
-
|
|
1854
|
-
return t in Wt && t in
|
|
1958
|
+
Dr(t) {
|
|
1959
|
+
return t in Wt && t in H;
|
|
1855
1960
|
}
|
|
1856
1961
|
}
|
|
1857
1962
|
class Nt {
|
|
1858
1963
|
constructor() {
|
|
1859
|
-
c(this, "
|
|
1860
|
-
c(this, "
|
|
1861
|
-
c(this, "
|
|
1862
|
-
this.
|
|
1964
|
+
c(this, "_r");
|
|
1965
|
+
c(this, "gr");
|
|
1966
|
+
c(this, "mr");
|
|
1967
|
+
this._r = new $t(), this.gr = new Ot(), this.mr = new kt();
|
|
1863
1968
|
}
|
|
1864
|
-
|
|
1865
|
-
return { format: t.format ?? "png", quality: t.quality ?? 1, scale: t.scale ?? 1, backgroundColor: t.backgroundColor ?? "transparent", filename: t.filename || this.
|
|
1969
|
+
vr(t) {
|
|
1970
|
+
return { format: t.format ?? "png", quality: t.quality ?? 1, scale: t.scale ?? 1, backgroundColor: t.backgroundColor ?? "transparent", filename: t.filename || this.mr.Hi() };
|
|
1866
1971
|
}
|
|
1867
|
-
|
|
1868
|
-
if (!this.
|
|
1972
|
+
Pr(t) {
|
|
1973
|
+
if (!this.mr.Dr(t.format)) throw Error(`Saving '${t.format}' files is not supported`);
|
|
1869
1974
|
if (t.quality < 0 || t.quality > 1) throw Error("Image quality must be between 0.0 and 1.0");
|
|
1870
1975
|
if (t.scale <= 0) throw Error("Scale factor must be greater than 0");
|
|
1871
1976
|
t.format === "jpg" && t.backgroundColor === "transparent" && (t.backgroundColor = "black");
|
|
1872
1977
|
}
|
|
1873
|
-
async
|
|
1874
|
-
if (e.scale === 1 && e.backgroundColor === "transparent") return await this.
|
|
1875
|
-
const
|
|
1876
|
-
return await this.
|
|
1978
|
+
async Mr(t, e) {
|
|
1979
|
+
if (e.scale === 1 && e.backgroundColor === "transparent") return await this.gr.Mr(t.canvas, e);
|
|
1980
|
+
const r = this._r.Rr(t, e.scale, e.backgroundColor);
|
|
1981
|
+
return await this.gr.Mr(r, e);
|
|
1877
1982
|
}
|
|
1878
|
-
async
|
|
1879
|
-
const
|
|
1880
|
-
this.
|
|
1881
|
-
const
|
|
1882
|
-
this.
|
|
1983
|
+
async Fr(t, e = {}) {
|
|
1984
|
+
const r = this.vr(e);
|
|
1985
|
+
this.Pr(r);
|
|
1986
|
+
const i = await this.Mr(t, r);
|
|
1987
|
+
this.mr.Fr(i, r.filename, r.format);
|
|
1883
1988
|
}
|
|
1884
1989
|
}
|
|
1885
|
-
const
|
|
1886
|
-
|
|
1887
|
-
this
|
|
1990
|
+
const Vt = (a) => class extends a {
|
|
1991
|
+
Ar() {
|
|
1992
|
+
this.Us.ls(this.Br);
|
|
1888
1993
|
}
|
|
1889
1994
|
toString(t = {}) {
|
|
1890
|
-
return this.
|
|
1995
|
+
return this.Ar(), new Y().zr({ pipeline: this.Ir, grid: this.Lr, font: this.Qs }, t);
|
|
1891
1996
|
}
|
|
1892
1997
|
saveStrings(t = {}) {
|
|
1893
|
-
this.
|
|
1998
|
+
this.Ar(), new Y().$r({ pipeline: this.Ir, grid: this.Lr, font: this.Qs }, t);
|
|
1894
1999
|
}
|
|
1895
2000
|
toSVG(t = {}) {
|
|
1896
|
-
return this.
|
|
2001
|
+
return this.Ar(), new X().Cr({ pipeline: this.Ir, grid: this.Lr, font: this.Qs }, t);
|
|
1897
2002
|
}
|
|
1898
2003
|
saveSVG(t = {}) {
|
|
1899
|
-
this.
|
|
2004
|
+
this.Ar(), new X().pr({ pipeline: this.Ir, grid: this.Lr, font: this.Qs }, t);
|
|
1900
2005
|
}
|
|
1901
2006
|
async saveCanvas(t = {}) {
|
|
1902
|
-
await new Nt().
|
|
2007
|
+
await new Nt().Fr(this.xi, t);
|
|
1903
2008
|
}
|
|
1904
|
-
},
|
|
2009
|
+
}, jt = (a) => class extends a {
|
|
1905
2010
|
async loadFont(t) {
|
|
1906
|
-
return this.
|
|
1907
|
-
const e = this.
|
|
1908
|
-
this.
|
|
2011
|
+
return this.Qs.di(t).then(() => {
|
|
2012
|
+
const e = this.Qs.maxGlyphDimensions;
|
|
2013
|
+
this.Lr.wi(e.width, e.height), this.Ir.W(this.Lr.cols, this.Lr.rows), this.Us.cs();
|
|
1909
2014
|
});
|
|
1910
2015
|
}
|
|
1911
2016
|
fontSize(t) {
|
|
1912
|
-
if (!
|
|
1913
|
-
this.
|
|
1914
|
-
const e = this.
|
|
1915
|
-
this.
|
|
2017
|
+
if (!I.m(typeof t == "number" && t > 0, "Font size must be a positive number greater than 0.", { method: "fontSize", providedValue: t }) || this.Qs.fontSize === t) return;
|
|
2018
|
+
this.Qs.fi(t);
|
|
2019
|
+
const e = this.Qs.maxGlyphDimensions;
|
|
2020
|
+
this.Lr.wi(e.width, e.height), this.Ir.W(this.Lr.cols, this.Lr.rows), this.Us.cs();
|
|
1916
2021
|
}
|
|
1917
2022
|
}, Xt = (a) => class extends a {
|
|
1918
2023
|
get frameCount() {
|
|
1919
|
-
return this.
|
|
2024
|
+
return this.Er.frameCount;
|
|
1920
2025
|
}
|
|
1921
2026
|
set frameCount(t) {
|
|
1922
|
-
this.
|
|
2027
|
+
this.Er.frameCount = t;
|
|
1923
2028
|
}
|
|
1924
2029
|
frameRate(t) {
|
|
1925
|
-
return t === void 0 ? this.
|
|
2030
|
+
return t === void 0 ? this.Er.currentFrameRate : this.Er.frameRate(t, () => this.Wr());
|
|
1926
2031
|
}
|
|
1927
2032
|
noLoop() {
|
|
1928
|
-
this.
|
|
2033
|
+
this.Er.pause();
|
|
1929
2034
|
}
|
|
1930
2035
|
loop() {
|
|
1931
|
-
this.
|
|
2036
|
+
this.Er.resume(() => this.Wr());
|
|
1932
2037
|
}
|
|
1933
2038
|
redraw(t = 1) {
|
|
1934
|
-
if (
|
|
2039
|
+
if (I.m(typeof t == "number" && t > 0 && Number.isInteger(t), "Redraw count must be a positive integer.", { method: "redraw", providedValue: t })) for (let e = 0; e < t; e++) this.Wr();
|
|
1935
2040
|
}
|
|
1936
2041
|
isLooping() {
|
|
1937
|
-
return this.
|
|
2042
|
+
return this.Er.isLooping;
|
|
1938
2043
|
}
|
|
1939
2044
|
};
|
|
1940
|
-
class
|
|
2045
|
+
class Yt {
|
|
1941
2046
|
constructor() {
|
|
1942
|
-
c(this, "
|
|
1943
|
-
c(this, "
|
|
1944
|
-
c(this, "
|
|
1945
|
-
c(this, "
|
|
1946
|
-
c(this, "
|
|
1947
|
-
c(this, "
|
|
1948
|
-
c(this, "
|
|
1949
|
-
c(this, "
|
|
2047
|
+
c(this, "Us");
|
|
2048
|
+
c(this, "Qs");
|
|
2049
|
+
c(this, "xi");
|
|
2050
|
+
c(this, "Lr");
|
|
2051
|
+
c(this, "Er");
|
|
2052
|
+
c(this, "Br");
|
|
2053
|
+
c(this, "Ir");
|
|
2054
|
+
c(this, "kr");
|
|
1950
2055
|
}
|
|
1951
|
-
|
|
2056
|
+
Wr() {
|
|
1952
2057
|
}
|
|
1953
2058
|
}
|
|
1954
|
-
class
|
|
1955
|
-
return
|
|
1956
|
-
}(
|
|
2059
|
+
class Ht extends function(e, ...r) {
|
|
2060
|
+
return r.reduce((i, s) => s(i), e);
|
|
2061
|
+
}(Yt, Lt, Vt, jt, Xt) {
|
|
1957
2062
|
constructor(e = {}) {
|
|
1958
2063
|
super();
|
|
1959
|
-
c(this, "
|
|
1960
|
-
c(this, "
|
|
2064
|
+
c(this, "Ur", !1);
|
|
2065
|
+
c(this, "Vr", () => {
|
|
1961
2066
|
});
|
|
1962
|
-
c(this, "
|
|
2067
|
+
c(this, "Or", () => {
|
|
1963
2068
|
});
|
|
1964
|
-
c(this, "
|
|
1965
|
-
this.
|
|
1966
|
-
in vec2
|
|
1967
|
-
precision highp float;in vec2 v_uv;in vec3 v_character;in vec4 v_primaryColor;in vec4 v_secondaryColor;in vec2 v_rotation;in vec3 v_transform;layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;layout(location=3)out vec4 o_rotation;layout(location=4)out vec4 o_transform;void main(){o_character=vec4(v_character,1.0);o_primaryColor=v_primaryColor;o_secondaryColor=v_secondaryColor;o_rotation=vec4(v_rotation,0.0,1.0);o_transform=vec4(v_transform,1.0);}`), this.wr = this.$s.Fe("attribute vec2 a_position;attribute vec2 a_texCoord;varying vec2 v_uv;void main(){v_uv=a_texCoord;gl_Position=vec4(a_position,0.0,1.0);}", "precision mediump float;uniform sampler2D u_characterTexture;uniform vec2 u_charsetDimensions;uniform sampler2D u_primaryColorTexture;uniform sampler2D u_secondaryColorTexture;uniform sampler2D u_transformTexture;uniform sampler2D u_asciiCharacterTexture;uniform sampler2D u_rotationTexture;uniform vec2 u_gridCellDimensions;uniform vec2 u_gridPixelDimensions;uniform vec2 u_gridOffsetPixels;mat2 rotate2D(float angle){float s=sin(angle);float c=cos(angle);return mat2(c,-s,s,c);}void main(){vec2 adjustedCoord=(gl_FragCoord.xy-u_gridOffsetPixels)/u_gridPixelDimensions;vec2 gridCoord=adjustedCoord*u_gridCellDimensions;vec2 cellCoord=floor(gridCoord);vec2 charIndexTexCoord=(cellCoord+0.5)/u_gridCellDimensions;vec4 primaryColor=texture2D(u_primaryColorTexture,charIndexTexCoord);vec4 secondaryColor=texture2D(u_secondaryColorTexture,charIndexTexCoord);vec4 transformColor=texture2D(u_transformTexture,charIndexTexCoord);bool isInverted=transformColor.r>0.5;bool flipHorizontal=transformColor.g>0.5;bool flipVertical=transformColor.b>0.5;vec4 encodedIndexVec=texture2D(u_asciiCharacterTexture,charIndexTexCoord);int charIndex=int(encodedIndexVec.r*255.0+0.5)+int(encodedIndexVec.g*255.0+0.5)*256;int charCol=int(mod(float(charIndex),u_charsetDimensions.x));int charRow=charIndex/int(u_charsetDimensions.x);float flippedRow=(u_charsetDimensions.y-1.0)-float(charRow);vec2 charCoord=vec2(float(charCol),flippedRow)/u_charsetDimensions;vec4 rotationColor=texture2D(u_rotationTexture,charIndexTexCoord);float scaledAngle=rotationColor.r*255.0+rotationColor.g;float rotationAngle=-(scaledAngle*360.0/255.0)*0.017453292;vec2 fractionalPart=fract(gridCoord)-0.5;if(flipHorizontal)fractionalPart.x=-fractionalPart.x;if(flipVertical)fractionalPart.y=-fractionalPart.y;fractionalPart=rotate2D(rotationAngle)*fractionalPart+0.5;vec2 cellSize=1.0/u_charsetDimensions;vec2 texCoord=charCoord+fractionalPart*cellSize;vec2 cellMax=charCoord+cellSize;if(any(lessThan(texCoord,charCoord))||any(greaterThan(texCoord,cellMax))){gl_FragColor=isInverted ? primaryColor : secondaryColor;return;}vec4 charTexel=texture2D(u_characterTexture,texCoord);if(isInverted)charTexel.rgb=1.0-charTexel.rgb;gl_FragColor=mix(secondaryColor,primaryColor,charTexel);}");
|
|
2069
|
+
c(this, "jr");
|
|
2070
|
+
this.xi = new Ft(e), this.Us = new xt(this.xi.Ri()), this.Qs = new Tt(this.Us, e.fontSize ?? 16), this.Er = new Ut(e.frameRate ?? 60), this.Br = this.Us.Xe(O, `#version 300 es
|
|
2071
|
+
precision highp float;in vec2 v_uv;in vec3 v_character;in vec4 v_primaryColor;in vec4 v_secondaryColor;in vec2 v_rotation;in vec3 v_transform;layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;layout(location=3)out vec4 o_rotation;layout(location=4)out vec4 o_transform;void main(){o_character=vec4(v_character,1.0);o_primaryColor=v_primaryColor;o_secondaryColor=v_secondaryColor;o_rotation=vec4(v_rotation,0.0,1.0);o_transform=vec4(v_transform,1.0);}`), this.kr = this.Us.Xe("attribute vec2 a_position;attribute vec2 a_texCoord;varying vec2 v_uv;void main(){v_uv=a_texCoord;gl_Position=vec4(a_position,0.0,1.0);}", "precision mediump float;uniform sampler2D u_characterTexture;uniform vec2 u_charsetDimensions;uniform sampler2D u_primaryColorTexture;uniform sampler2D u_secondaryColorTexture;uniform sampler2D u_transformTexture;uniform sampler2D u_asciiCharacterTexture;uniform sampler2D u_rotationTexture;uniform vec2 u_gridCellDimensions;uniform vec2 u_gridPixelDimensions;uniform vec2 u_gridOffsetPixels;mat2 rotate2D(float angle){float s=sin(angle);float c=cos(angle);return mat2(c,-s,s,c);}void main(){vec2 adjustedCoord=(gl_FragCoord.xy-u_gridOffsetPixels)/u_gridPixelDimensions;vec2 gridCoord=adjustedCoord*u_gridCellDimensions;vec2 cellCoord=floor(gridCoord);vec2 charIndexTexCoord=(cellCoord+0.5)/u_gridCellDimensions;vec4 primaryColor=texture2D(u_primaryColorTexture,charIndexTexCoord);vec4 secondaryColor=texture2D(u_secondaryColorTexture,charIndexTexCoord);vec4 transformColor=texture2D(u_transformTexture,charIndexTexCoord);bool isInverted=transformColor.r>0.5;bool flipHorizontal=transformColor.g>0.5;bool flipVertical=transformColor.b>0.5;vec4 encodedIndexVec=texture2D(u_asciiCharacterTexture,charIndexTexCoord);int charIndex=int(encodedIndexVec.r*255.0+0.5)+int(encodedIndexVec.g*255.0+0.5)*256;int charCol=int(mod(float(charIndex),u_charsetDimensions.x));int charRow=charIndex/int(u_charsetDimensions.x);float flippedRow=(u_charsetDimensions.y-1.0)-float(charRow);vec2 charCoord=vec2(float(charCol),flippedRow)/u_charsetDimensions;vec4 rotationColor=texture2D(u_rotationTexture,charIndexTexCoord);float scaledAngle=rotationColor.r*255.0+rotationColor.g;float rotationAngle=-(scaledAngle*360.0/255.0)*0.017453292;vec2 fractionalPart=fract(gridCoord)-0.5;if(flipHorizontal)fractionalPart.x=-fractionalPart.x;if(flipVertical)fractionalPart.y=-fractionalPart.y;fractionalPart=rotate2D(rotationAngle)*fractionalPart+0.5;vec2 cellSize=1.0/u_charsetDimensions;vec2 texCoord=charCoord+fractionalPart*cellSize;vec2 cellMax=charCoord+cellSize;if(any(lessThan(texCoord,charCoord))||any(greaterThan(texCoord,cellMax))){gl_FragColor=isInverted ? primaryColor : secondaryColor;return;}vec4 charTexel=texture2D(u_characterTexture,texCoord);if(isInverted)charTexel.rgb=1.0-charTexel.rgb;gl_FragColor=mix(secondaryColor,primaryColor,charTexel);}");
|
|
1968
2072
|
}
|
|
1969
2073
|
static async create(e = {}) {
|
|
1970
|
-
const
|
|
1971
|
-
await
|
|
1972
|
-
const
|
|
1973
|
-
return
|
|
1974
|
-
}
|
|
1975
|
-
|
|
1976
|
-
this.
|
|
1977
|
-
this.
|
|
1978
|
-
}, window.addEventListener("resize", this.
|
|
1979
|
-
}
|
|
1980
|
-
|
|
1981
|
-
if (this.
|
|
1982
|
-
this.
|
|
1983
|
-
const e = this
|
|
1984
|
-
this
|
|
2074
|
+
const r = new this(e);
|
|
2075
|
+
await r.Qs.ci(e.fontSource);
|
|
2076
|
+
const i = r.Qs.maxGlyphDimensions;
|
|
2077
|
+
return r.Lr = new At(r.xi.canvas, i.width, i.height), r.Ir = r.Us.rs(r.Lr.cols, r.Lr.rows, 5), r.Hr(), r.Er.start(() => r.Wr()), r;
|
|
2078
|
+
}
|
|
2079
|
+
Hr() {
|
|
2080
|
+
this.jr = () => {
|
|
2081
|
+
this.Or();
|
|
2082
|
+
}, window.addEventListener("resize", this.jr);
|
|
2083
|
+
}
|
|
2084
|
+
Wr() {
|
|
2085
|
+
if (this.Er.measureFrameRate(), this.Er.incrementFrame(), this.Ur) return;
|
|
2086
|
+
this.Ir.V(), this.Us.He(this.Br), this.Vr(), this.Us.ls(this.Br), this.Ir.O();
|
|
2087
|
+
const e = this.Us.state.canvasBackgroundColor;
|
|
2088
|
+
this.Us.de(e[0], e[1], e[2], e[3]), this.Us.He(this.kr), this.kr.st({ u_characterTexture: this.Qs.fontFramebuffer, u_charsetDimensions: [this.Qs.textureColumns, this.Qs.textureRows], u_asciiCharacterTexture: this.Ir.textures[0], u_primaryColorTexture: this.Ir.textures[1], u_secondaryColorTexture: this.Ir.textures[2], u_transformTexture: this.Ir.textures[4], u_rotationTexture: this.Ir.textures[3], u_gridCellDimensions: [this.Lr.cols, this.Lr.rows], u_gridPixelDimensions: [this.Lr.width, this.Lr.height], u_gridOffsetPixels: [this.Lr.offsetX, this.Lr.offsetY], u_aspectRatio: this.Lr.width / this.Lr.height }), this.Us.Qe(this.Lr.offsetX, this.Lr.offsetY, this.Lr.width, this.Lr.height);
|
|
1985
2089
|
}
|
|
1986
2090
|
draw(e) {
|
|
1987
|
-
this.
|
|
2091
|
+
this.Vr = e;
|
|
1988
2092
|
}
|
|
1989
2093
|
windowResized(e) {
|
|
1990
|
-
this.
|
|
2094
|
+
this.Or = e;
|
|
1991
2095
|
}
|
|
1992
|
-
resizeCanvas(e,
|
|
1993
|
-
this.
|
|
2096
|
+
resizeCanvas(e, r) {
|
|
2097
|
+
this.xi.W(e, r), this.Lr.zt(), this.Ir.W(this.Lr.cols, this.Lr.rows), this.Us.cs(), this.Wr();
|
|
1994
2098
|
}
|
|
1995
2099
|
destroy() {
|
|
1996
|
-
this
|
|
2100
|
+
this.Ur || (this.Er.stop(), window.removeEventListener("resize", this.jr), this.Qs.j(), this.Us.j(), this.Ur = !0);
|
|
1997
2101
|
}
|
|
1998
2102
|
get grid() {
|
|
1999
|
-
return this.
|
|
2103
|
+
return this.Lr;
|
|
2000
2104
|
}
|
|
2001
2105
|
get font() {
|
|
2002
|
-
return this.
|
|
2106
|
+
return this.Qs;
|
|
2003
2107
|
}
|
|
2004
2108
|
get width() {
|
|
2005
|
-
return this.
|
|
2109
|
+
return this.xi.width;
|
|
2006
2110
|
}
|
|
2007
2111
|
get height() {
|
|
2008
|
-
return this.
|
|
2112
|
+
return this.xi.height;
|
|
2009
2113
|
}
|
|
2010
2114
|
get canvas() {
|
|
2011
|
-
return this.
|
|
2115
|
+
return this.xi.canvas;
|
|
2012
2116
|
}
|
|
2013
2117
|
get isDisposed() {
|
|
2014
|
-
return this
|
|
2118
|
+
return this.Ur;
|
|
2015
2119
|
}
|
|
2016
2120
|
get drawFramebuffer() {
|
|
2017
|
-
return this.
|
|
2121
|
+
return this.Ir;
|
|
2018
2122
|
}
|
|
2019
2123
|
}
|
|
2020
|
-
class
|
|
2124
|
+
class N {
|
|
2021
2125
|
constructor() {
|
|
2022
|
-
throw new
|
|
2126
|
+
throw new S("Textmode is a static class and cannot be instantiated.");
|
|
2023
2127
|
}
|
|
2024
2128
|
static async create(t) {
|
|
2025
|
-
return
|
|
2129
|
+
return Ht.create(t);
|
|
2026
2130
|
}
|
|
2027
2131
|
static setErrorLevel(t) {
|
|
2028
|
-
|
|
2132
|
+
I.v(t);
|
|
2029
2133
|
}
|
|
2030
2134
|
static get version() {
|
|
2031
|
-
return "0.2.0-beta.
|
|
2135
|
+
return "0.2.0-beta.3";
|
|
2032
2136
|
}
|
|
2033
2137
|
}
|
|
2034
|
-
const
|
|
2138
|
+
const Zt = Object.freeze(Object.defineProperty({ __proto__: null }, Symbol.toStringTag, { value: "Module" })), Kt = N.create, qt = N.setErrorLevel, Jt = N.version;
|
|
2035
2139
|
export {
|
|
2036
|
-
|
|
2037
|
-
|
|
2038
|
-
|
|
2039
|
-
|
|
2040
|
-
|
|
2041
|
-
|
|
2042
|
-
|
|
2043
|
-
|
|
2044
|
-
|
|
2140
|
+
Ft as TextmodeCanvas,
|
|
2141
|
+
J as TextmodeErrorLevel,
|
|
2142
|
+
Tt as TextmodeFont,
|
|
2143
|
+
At as TextmodeGrid,
|
|
2144
|
+
Ht as Textmodifier,
|
|
2145
|
+
Kt as create,
|
|
2146
|
+
Zt as export,
|
|
2147
|
+
qt as setErrorLevel,
|
|
2148
|
+
N as textmode,
|
|
2045
2149
|
Jt as version
|
|
2046
2150
|
};
|