@designliquido/delegua-node 1.16.1 → 1.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/README.md +54 -0
  2. package/avaliador-sintatico/avaliador-sintatico-com-importacao.d.ts.map +1 -1
  3. package/avaliador-sintatico/avaliador-sintatico-com-importacao.js +1 -1
  4. package/avaliador-sintatico/avaliador-sintatico-com-importacao.js.map +1 -1
  5. package/bibliotecas/dialetos/portugol-studio/arquivos.d.ts.map +1 -1
  6. package/bibliotecas/dialetos/portugol-studio/arquivos.js +29 -26
  7. package/bibliotecas/dialetos/portugol-studio/arquivos.js.map +1 -1
  8. package/bibliotecas/dialetos/portugol-studio/graficos.d.ts +87 -0
  9. package/bibliotecas/dialetos/portugol-studio/graficos.d.ts.map +1 -0
  10. package/bibliotecas/dialetos/portugol-studio/graficos.js +642 -0
  11. package/bibliotecas/dialetos/portugol-studio/graficos.js.map +1 -0
  12. package/bibliotecas/dialetos/portugol-studio/util.js +1 -1
  13. package/bibliotecas/dialetos/portugol-studio/util.js.map +1 -1
  14. package/bin/package.json +9 -7
  15. package/infraestruturas/host-windows/infraestrutura-host-windows.d.ts +17 -0
  16. package/infraestruturas/host-windows/infraestrutura-host-windows.d.ts.map +1 -0
  17. package/infraestruturas/host-windows/infraestrutura-host-windows.js +260 -0
  18. package/infraestruturas/host-windows/infraestrutura-host-windows.js.map +1 -0
  19. package/infraestruturas/invocacao-electron/infraestrutura-invocacao-electron.d.ts +48 -0
  20. package/infraestruturas/invocacao-electron/infraestrutura-invocacao-electron.d.ts.map +1 -0
  21. package/infraestruturas/invocacao-electron/infraestrutura-invocacao-electron.js +530 -0
  22. package/infraestruturas/invocacao-electron/infraestrutura-invocacao-electron.js.map +1 -0
  23. package/interpretador/dialetos/interpretador-pitugues-com-importacao.d.ts +2 -2
  24. package/interpretador/dialetos/portugol-studio-comum.d.ts.map +1 -1
  25. package/interpretador/dialetos/portugol-studio-comum.js +54 -0
  26. package/interpretador/dialetos/portugol-studio-comum.js.map +1 -1
  27. package/interpretador/interpretador-com-importacao.d.ts +2 -2
  28. package/mecanismo-importacao-bibliotecas/index.d.ts +19 -0
  29. package/mecanismo-importacao-bibliotecas/index.d.ts.map +1 -1
  30. package/mecanismo-importacao-bibliotecas/index.js +78 -3
  31. package/mecanismo-importacao-bibliotecas/index.js.map +1 -1
  32. package/package.json +9 -7
@@ -0,0 +1,642 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.Graficos = exports.ErroExcessoOperacoes = exports.CANAL_B = exports.CANAL_G = exports.CANAL_R = exports.GRADIENTE_SUPERIOR_ESQUERDO = exports.GRADIENTE_SUPERIOR_DIREITO = exports.GRADIENTE_INFERIOR_ESQUERDO = exports.GRADIENTE_INFERIOR_DIREITO = exports.GRADIENTE_ABAIXO = exports.GRADIENTE_ACIMA = exports.GRADIENTE_ESQUERDA = exports.GRADIENTE_DIREITA = exports.COR_AMARELO = exports.COR_VERDE = exports.COR_VERMELHO = exports.COR_AZUL = exports.COR_BRANCO = exports.COR_PRETO = void 0;
40
+ const canvas_1 = require("canvas");
41
+ const fs = __importStar(require("fs"));
42
+ const path_1 = __importDefault(require("path"));
43
+ const excecoes_1 = require("../../../excecoes");
44
+ exports.COR_PRETO = 0xff000000;
45
+ exports.COR_BRANCO = 0xffffffff;
46
+ exports.COR_AZUL = 0xff0000ff;
47
+ exports.COR_VERMELHO = 0xffff0000;
48
+ exports.COR_VERDE = 0xff00ff00;
49
+ exports.COR_AMARELO = 0xffffff00;
50
+ exports.GRADIENTE_DIREITA = 0;
51
+ exports.GRADIENTE_ESQUERDA = 1;
52
+ exports.GRADIENTE_ACIMA = 2;
53
+ exports.GRADIENTE_ABAIXO = 3;
54
+ exports.GRADIENTE_INFERIOR_DIREITO = 4;
55
+ exports.GRADIENTE_INFERIOR_ESQUERDO = 5;
56
+ exports.GRADIENTE_SUPERIOR_DIREITO = 6;
57
+ exports.GRADIENTE_SUPERIOR_ESQUERDO = 7;
58
+ exports.CANAL_R = 0;
59
+ exports.CANAL_G = 1;
60
+ exports.CANAL_B = 2;
61
+ class ErroExcessoOperacoes extends excecoes_1.ErroExecucaoBiblioteca {
62
+ constructor() {
63
+ super("A função Graficos.renderizar() não foi chamada nenhuma vez " +
64
+ "ou o número de operações de desenho que foi chamada antes do Graficos.renderizar() foi muito grande");
65
+ this.name = "ErroExcessoOperacoes";
66
+ }
67
+ }
68
+ exports.ErroExcessoOperacoes = ErroExcessoOperacoes;
69
+ class CacheImagens {
70
+ constructor() {
71
+ this.imagens = new Map();
72
+ this.gifs = new Map();
73
+ this.proximoEndereco = 1;
74
+ }
75
+ adicionarImagem(imagem) {
76
+ const endereco = this.proximoEndereco++;
77
+ this.imagens.set(endereco, imagem);
78
+ return endereco;
79
+ }
80
+ adicionarGif(gif) {
81
+ const endereco = this.proximoEndereco++;
82
+ this.gifs.set(endereco, gif);
83
+ return endereco;
84
+ }
85
+ obterImagem(endereco) {
86
+ const imagem = this.imagens.get(endereco);
87
+ if (!imagem)
88
+ throw new excecoes_1.ErroExecucaoBiblioteca(`Imagem com endereço ${endereco} não encontrada`);
89
+ return imagem;
90
+ }
91
+ obterGif(endereco) {
92
+ const gif = this.gifs.get(endereco);
93
+ if (!gif)
94
+ throw new excecoes_1.ErroExecucaoBiblioteca(`GIF com endereço ${endereco} não encontrado`);
95
+ return gif;
96
+ }
97
+ liberarImagem(endereco) {
98
+ this.imagens.delete(endereco);
99
+ this.gifs.delete(endereco);
100
+ }
101
+ liberar() {
102
+ this.imagens.clear();
103
+ this.gifs.clear();
104
+ }
105
+ }
106
+ class ImagemGifInterna {
107
+ constructor(quadros, intervalos, largura, altura) {
108
+ this.quadros = [];
109
+ this.intervalos = [];
110
+ this.indiceAtual = 0;
111
+ this.quadros = quadros;
112
+ this.intervalos = intervalos;
113
+ this.largura = largura;
114
+ this.altura = altura;
115
+ }
116
+ avancarQuadro() {
117
+ this.indiceAtual = (this.indiceAtual + 1) % this.quadros.length;
118
+ }
119
+ getQuadroAtual() {
120
+ return this.quadros[this.indiceAtual];
121
+ }
122
+ getQuadro(indice) {
123
+ if (indice < 0 || indice >= this.quadros.length) {
124
+ throw new excecoes_1.ErroExecucaoBiblioteca(`Quadro ${indice} não existe no GIF`);
125
+ }
126
+ return this.quadros[indice];
127
+ }
128
+ irParaQuadro(indice) {
129
+ if (indice < 0 || indice >= this.quadros.length) {
130
+ throw new excecoes_1.ErroExecucaoBiblioteca(`Quadro ${indice} não existe no GIF`);
131
+ }
132
+ this.indiceAtual = indice;
133
+ }
134
+ getIntervalo() {
135
+ var _a;
136
+ return (_a = this.intervalos[this.indiceAtual]) !== null && _a !== void 0 ? _a : 100;
137
+ }
138
+ getNumeroFrames() {
139
+ return this.quadros.length;
140
+ }
141
+ getIndiceQuadroAtual() {
142
+ return this.indiceAtual;
143
+ }
144
+ clonar() {
145
+ return new ImagemGifInterna([...this.quadros], [...this.intervalos], this.largura, this.altura);
146
+ }
147
+ setDimensoes(largura, altura) {
148
+ this.largura = largura;
149
+ this.altura = altura;
150
+ this.quadros = this.quadros.map((quadro) => {
151
+ const canvas = (0, canvas_1.createCanvas)(largura, altura);
152
+ const ctx = canvas.getContext("2d");
153
+ ctx.drawImage(quadro, 0, 0, largura, altura);
154
+ return canvas;
155
+ });
156
+ }
157
+ }
158
+ class SuperficieDesenho {
159
+ constructor(canvas) {
160
+ this.corAtual = "#000000";
161
+ this.opacidadeAtual = 1;
162
+ this.rotacaoAtual = 0;
163
+ this.canvas = canvas;
164
+ this.ctx = canvas.getContext("2d");
165
+ this.backBuffer = (0, canvas_1.createCanvas)(canvas.width, canvas.height);
166
+ this.backCtx = this.backBuffer.getContext("2d");
167
+ }
168
+ limpar() {
169
+ this.backCtx.fillStyle = this.corAtual;
170
+ this.backCtx.fillRect(0, 0, this.backBuffer.width, this.backBuffer.height);
171
+ }
172
+ renderizar() {
173
+ this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
174
+ this.ctx.drawImage(this.backBuffer, 0, 0);
175
+ }
176
+ renderizarImagem(largura, altura) {
177
+ const novaImagem = (0, canvas_1.createCanvas)(largura, altura);
178
+ const ctx = novaImagem.getContext("2d");
179
+ ctx.drawImage(this.backBuffer, 0, 0, largura, altura);
180
+ return novaImagem;
181
+ }
182
+ aplicarTransformacao(ctx, x, y, largura, altura, fn) {
183
+ ctx.save();
184
+ ctx.globalAlpha = this.opacidadeAtual;
185
+ if (this.rotacaoAtual !== 0) {
186
+ ctx.translate(x + largura / 2, y + altura / 2);
187
+ ctx.rotate((this.rotacaoAtual * Math.PI) / 180);
188
+ ctx.translate(-(x + largura / 2), -(y + altura / 2));
189
+ }
190
+ fn();
191
+ ctx.restore();
192
+ }
193
+ desenharRetangulo(x, y, largura, altura, arredondarCantos, preencher) {
194
+ this.aplicarTransformacao(this.backCtx, x, y, largura, altura, () => {
195
+ this.backCtx.fillStyle = this.corAtual;
196
+ this.backCtx.strokeStyle = this.corAtual;
197
+ if (arredondarCantos) {
198
+ const raio = Math.min(largura, altura) * 0.1;
199
+ this.backCtx.beginPath();
200
+ this.backCtx.roundRect(x, y, largura, altura, raio);
201
+ preencher ? this.backCtx.fill() : this.backCtx.stroke();
202
+ }
203
+ else {
204
+ preencher
205
+ ? this.backCtx.fillRect(x, y, largura, altura)
206
+ : this.backCtx.strokeRect(x, y, largura, altura);
207
+ }
208
+ });
209
+ }
210
+ desenharPoligono(pontos, preencher) {
211
+ if (pontos.length < 2)
212
+ return;
213
+ this.backCtx.save();
214
+ this.backCtx.globalAlpha = this.opacidadeAtual;
215
+ this.backCtx.fillStyle = this.corAtual;
216
+ this.backCtx.strokeStyle = this.corAtual;
217
+ this.backCtx.beginPath();
218
+ this.backCtx.moveTo(pontos[0][0], pontos[0][1]);
219
+ for (let i = 1; i < pontos.length; i++) {
220
+ this.backCtx.lineTo(pontos[i][0], pontos[i][1]);
221
+ }
222
+ this.backCtx.closePath();
223
+ preencher ? this.backCtx.fill() : this.backCtx.stroke();
224
+ this.backCtx.restore();
225
+ }
226
+ desenharElipse(x, y, largura, altura, preencher) {
227
+ this.aplicarTransformacao(this.backCtx, x, y, largura, altura, () => {
228
+ this.backCtx.fillStyle = this.corAtual;
229
+ this.backCtx.strokeStyle = this.corAtual;
230
+ this.backCtx.beginPath();
231
+ this.backCtx.ellipse(x + largura / 2, y + altura / 2, largura / 2, altura / 2, 0, 0, 2 * Math.PI);
232
+ preencher ? this.backCtx.fill() : this.backCtx.stroke();
233
+ });
234
+ }
235
+ desenharPonto(x, y) {
236
+ this.backCtx.save();
237
+ this.backCtx.globalAlpha = this.opacidadeAtual;
238
+ this.backCtx.fillStyle = this.corAtual;
239
+ this.backCtx.fillRect(x, y, 1, 1);
240
+ this.backCtx.restore();
241
+ }
242
+ desenharLinha(x1, y1, x2, y2) {
243
+ this.backCtx.save();
244
+ this.backCtx.globalAlpha = this.opacidadeAtual;
245
+ this.backCtx.strokeStyle = this.corAtual;
246
+ this.backCtx.beginPath();
247
+ this.backCtx.moveTo(x1, y1);
248
+ this.backCtx.lineTo(x2, y2);
249
+ this.backCtx.stroke();
250
+ this.backCtx.restore();
251
+ }
252
+ desenharImagem(x, y, imagem) {
253
+ this.backCtx.save();
254
+ this.backCtx.globalAlpha = this.opacidadeAtual;
255
+ if (this.rotacaoAtual !== 0) {
256
+ const w = imagem.width;
257
+ const h = imagem.height;
258
+ this.backCtx.translate(x + w / 2, y + h / 2);
259
+ this.backCtx.rotate((this.rotacaoAtual * Math.PI) / 180);
260
+ this.backCtx.drawImage(imagem, -w / 2, -h / 2);
261
+ }
262
+ else {
263
+ this.backCtx.drawImage(imagem, x, y);
264
+ }
265
+ this.backCtx.restore();
266
+ }
267
+ desenharPorcaoImagem(x, y, xi, yi, largura, altura, imagem) {
268
+ this.backCtx.save();
269
+ this.backCtx.globalAlpha = this.opacidadeAtual;
270
+ this.backCtx.drawImage(imagem, xi, yi, largura, altura, x, y, largura, altura);
271
+ this.backCtx.restore();
272
+ }
273
+ desenharTexto(texto, x, y) {
274
+ this.backCtx.save();
275
+ this.backCtx.globalAlpha = this.opacidadeAtual;
276
+ this.backCtx.fillStyle = this.corAtual;
277
+ this.backCtx.fillText(texto, x, y);
278
+ this.backCtx.restore();
279
+ }
280
+ definirCor(cor) {
281
+ this.corAtual = corParaCss(cor);
282
+ }
283
+ definirGradiente(tipo, cor1, cor2) {
284
+ const w = this.backBuffer.width;
285
+ const h = this.backBuffer.height;
286
+ let gradiente;
287
+ switch (tipo) {
288
+ case exports.GRADIENTE_DIREITA:
289
+ gradiente = this.backCtx.createLinearGradient(0, 0, w, 0);
290
+ break;
291
+ case exports.GRADIENTE_ESQUERDA:
292
+ gradiente = this.backCtx.createLinearGradient(w, 0, 0, 0);
293
+ break;
294
+ case exports.GRADIENTE_ACIMA:
295
+ gradiente = this.backCtx.createLinearGradient(0, h, 0, 0);
296
+ break;
297
+ case exports.GRADIENTE_ABAIXO:
298
+ gradiente = this.backCtx.createLinearGradient(0, 0, 0, h);
299
+ break;
300
+ case exports.GRADIENTE_INFERIOR_DIREITO:
301
+ gradiente = this.backCtx.createLinearGradient(0, 0, w, h);
302
+ break;
303
+ case exports.GRADIENTE_INFERIOR_ESQUERDO:
304
+ gradiente = this.backCtx.createLinearGradient(w, 0, 0, h);
305
+ break;
306
+ case exports.GRADIENTE_SUPERIOR_DIREITO:
307
+ gradiente = this.backCtx.createLinearGradient(0, h, w, 0);
308
+ break;
309
+ case exports.GRADIENTE_SUPERIOR_ESQUERDO:
310
+ gradiente = this.backCtx.createLinearGradient(w, h, 0, 0);
311
+ break;
312
+ default:
313
+ gradiente = this.backCtx.createLinearGradient(0, 0, w, 0);
314
+ }
315
+ gradiente.addColorStop(0, corParaCss(cor1));
316
+ gradiente.addColorStop(1, corParaCss(cor2));
317
+ this.corAtual = gradiente;
318
+ }
319
+ definirFonteTexto(nome) {
320
+ const fonteAtual = this.backCtx.font;
321
+ const partes = fonteAtual.match(/(\d+)px\s(.+)/);
322
+ const tamanho = partes ? partes[1] : "16";
323
+ this.backCtx.font = `${tamanho}px ${nome}`;
324
+ }
325
+ definirTamanhoTexto(tamanho) {
326
+ const fonteAtual = this.backCtx.font;
327
+ const partes = fonteAtual.match(/\d+px\s(.+)/);
328
+ const nome = partes ? partes[1] : "sans-serif";
329
+ this.backCtx.font = `${tamanho}px ${nome}`;
330
+ }
331
+ definirEstiloTexto(italico, negrito, _sublinhado) {
332
+ const fonteAtual = this.backCtx.font;
333
+ const partes = fonteAtual.match(/(\d+)px\s(.+)/);
334
+ const tamanho = partes ? partes[1] : "16";
335
+ const nome = partes ? partes[2] : "sans-serif";
336
+ const prefixo = [italico ? "italic" : "", negrito ? "bold" : ""]
337
+ .filter(Boolean)
338
+ .join(" ");
339
+ this.backCtx.font = `${prefixo} ${tamanho}px ${nome}`.trim();
340
+ }
341
+ larguraTexto(texto) {
342
+ return this.backCtx.measureText(texto).width;
343
+ }
344
+ alturaTexto(_texto) {
345
+ const metrics = this.backCtx.measureText("M");
346
+ return metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent;
347
+ }
348
+ definirOpacidade(opacidade) {
349
+ if (opacidade < 0 || opacidade > 255) {
350
+ throw new excecoes_1.ErroExecucaoBiblioteca("O valor da opacidade deve estar entre 0 e 255");
351
+ }
352
+ this.opacidadeAtual = opacidade / 255;
353
+ }
354
+ definirRotacao(rotacao) {
355
+ this.rotacaoAtual = rotacao;
356
+ }
357
+ }
358
+ class Graficos {
359
+ constructor() {
360
+ this.canvas = null;
361
+ this.superficieDesenho = null;
362
+ this.cacheImagens = new CacheImagens();
363
+ this.inicializado = false;
364
+ }
365
+ iniciar_modo_grafico() {
366
+ if (this.inicializado)
367
+ return;
368
+ this.canvas = (0, canvas_1.createCanvas)(640, 480);
369
+ this.superficieDesenho = new SuperficieDesenho(this.canvas);
370
+ this.inicializado = true;
371
+ }
372
+ definir_dimensoes_janela(largura, altura) {
373
+ const janela = this.obterJanela();
374
+ janela.width = largura;
375
+ janela.height = altura;
376
+ }
377
+ limpar() {
378
+ this.obterSuperficie().limpar();
379
+ }
380
+ renderizar() {
381
+ this.obterSuperficie().renderizar();
382
+ }
383
+ renderizar_imagem(largura, altura) {
384
+ const canvas = this.obterSuperficie().renderizarImagem(largura, altura);
385
+ return this.cacheImagens.adicionarImagem(canvas);
386
+ }
387
+ desenhar_retangulo(x, y, largura, altura, arredondarCantos, preencher) {
388
+ this
389
+ .obterSuperficie()
390
+ .desenharRetangulo(x, y, largura, altura, arredondarCantos, preencher);
391
+ }
392
+ desenhar_poligono(pontos, preencher) {
393
+ this.obterSuperficie().desenharPoligono(pontos, preencher);
394
+ }
395
+ desenhar_elipse(x, y, largura, altura, preencher) {
396
+ this.obterSuperficie().desenharElipse(x, y, largura, altura, preencher);
397
+ }
398
+ desenhar_ponto(x, y) {
399
+ this.obterSuperficie().desenharPonto(x, y);
400
+ }
401
+ desenhar_linha(x1, y1, x2, y2) {
402
+ this.obterSuperficie().desenharLinha(x1, y1, x2, y2);
403
+ }
404
+ async carregar_imagem(caminho) {
405
+ try {
406
+ const img = await (0, canvas_1.loadImage)(caminho);
407
+ return this.cacheImagens.adicionarImagem(img);
408
+ }
409
+ catch (_a) {
410
+ throw new excecoes_1.ErroExecucaoBiblioteca(`A imagem '${caminho}' não foi encontrada`);
411
+ }
412
+ }
413
+ proximo_frame_gif(endereco) {
414
+ this.cacheImagens.obterGif(endereco).avancarQuadro();
415
+ }
416
+ transformar_imagem(endereco, espelhamentoHorizontal, espelhamentoVertical, rotacao, corIgnorada) {
417
+ const original = this.cacheImagens.obterImagem(endereco);
418
+ let canvas = imagemParaCanvas(original);
419
+ canvas = aplicarChromaKey(canvas, corIgnorada);
420
+ canvas = espelharImagem(canvas, espelhamentoHorizontal, espelhamentoVertical);
421
+ canvas = rotacionarImagem(canvas, rotacao);
422
+ return this.cacheImagens.adicionarImagem(canvas);
423
+ }
424
+ redimensionar_imagem(endereco, largura, altura) {
425
+ if (largura <= 0 && altura <= 0) {
426
+ throw new excecoes_1.ErroExecucaoBiblioteca("Impossível transformar imagem para estas dimensões");
427
+ }
428
+ const original = this.cacheImagens.obterImagem(endereco);
429
+ const w = original.width;
430
+ const h = original.height;
431
+ if (altura === 0 && largura !== 0) {
432
+ altura = Math.round(h * (largura / w));
433
+ }
434
+ else if (largura === 0 && altura !== 0) {
435
+ largura = Math.round(w * (altura / h));
436
+ }
437
+ const canvas = (0, canvas_1.createCanvas)(largura, altura);
438
+ const ctx = canvas.getContext("2d");
439
+ ctx.drawImage(original, 0, 0, largura, altura);
440
+ return this.cacheImagens.adicionarImagem(canvas);
441
+ }
442
+ obter_cor_pixel(endereco, x, y) {
443
+ const imagem = this.cacheImagens.obterImagem(endereco);
444
+ const canvas = imagemParaCanvas(imagem);
445
+ const ctx = canvas.getContext("2d");
446
+ const pixel = ctx.getImageData(x, y, 1, 1).data;
447
+ return ((pixel[3] << 24) | (pixel[0] << 16) | (pixel[1] << 8) | pixel[2]) >>> 0;
448
+ }
449
+ obter_RGB(cor, canal) {
450
+ switch (canal) {
451
+ case exports.CANAL_R:
452
+ return (cor & 0xff0000) >> 16;
453
+ case exports.CANAL_G:
454
+ return (cor & 0x00ff00) >> 8;
455
+ case exports.CANAL_B:
456
+ return cor & 0x0000ff;
457
+ default:
458
+ return 0;
459
+ }
460
+ }
461
+ transformar_porcao_imagem(endereco, x, y, largura, altura, espelhamentoHorizontal, espelhamentoVertical, rotacao, corIgnorada) {
462
+ const original = this.cacheImagens.obterImagem(endereco);
463
+ const porcao = (0, canvas_1.createCanvas)(largura, altura);
464
+ const ctx = porcao.getContext("2d");
465
+ ctx.drawImage(original, x, y, largura, altura, 0, 0, largura, altura);
466
+ let canvas = aplicarChromaKey(porcao, corIgnorada);
467
+ canvas = espelharImagem(canvas, espelhamentoHorizontal, espelhamentoVertical);
468
+ canvas = rotacionarImagem(canvas, rotacao);
469
+ return this.cacheImagens.adicionarImagem(canvas);
470
+ }
471
+ desenhar_imagem(x, y, endereco) {
472
+ const imagem = this.cacheImagens.obterImagem(endereco);
473
+ this.obterSuperficie().desenharImagem(x, y, imagem);
474
+ }
475
+ salvar_imagem(endereco, caminho) {
476
+ const imagem = this.cacheImagens.obterImagem(endereco);
477
+ const canvas = imagemParaCanvas(imagem);
478
+ const buffer = canvas.toBuffer("image/png");
479
+ fs.writeFileSync(caminho, buffer);
480
+ }
481
+ desenhar_quadro_atual_gif(x, y, endereco) {
482
+ const quadro = this.cacheImagens.obterGif(endereco).getQuadroAtual();
483
+ this.obterSuperficie().desenharImagem(x, y, quadro);
484
+ }
485
+ desenhar_porcao_imagem(x, y, xi, yi, largura, altura, endereco) {
486
+ const imagem = this.cacheImagens.obterImagem(endereco);
487
+ this.obterSuperficie().desenharPorcaoImagem(x, y, xi, yi, largura, altura, imagem);
488
+ }
489
+ obter_intervalo_gif(endereco) {
490
+ return this.cacheImagens.obterGif(endereco).getIntervalo();
491
+ }
492
+ obter_numero_quadros_gif(endereco) {
493
+ return this.cacheImagens.obterGif(endereco).getNumeroFrames();
494
+ }
495
+ obter_numero_quadro_atual_gif(endereco) {
496
+ return this.cacheImagens.obterGif(endereco).getIndiceQuadroAtual();
497
+ }
498
+ obter_quadro_gif(endereco, quadro) {
499
+ const canvas = this.cacheImagens.obterGif(endereco).getQuadro(quadro);
500
+ return this.cacheImagens.adicionarImagem(canvas);
501
+ }
502
+ definir_quadro_gif(endereco, quadro) {
503
+ this.cacheImagens.obterGif(endereco).irParaQuadro(quadro);
504
+ }
505
+ liberar_imagem(endereco) {
506
+ this.cacheImagens.liberarImagem(endereco);
507
+ }
508
+ desenhar_texto(x, y, texto) {
509
+ this.obterSuperficie().desenharTexto(texto, x, y);
510
+ }
511
+ definir_cor(cor) {
512
+ this.obterSuperficie().definirCor(cor);
513
+ }
514
+ definir_gradiente(tipo, cor1, cor2) {
515
+ this.obterSuperficie().definirGradiente(tipo, cor1, cor2);
516
+ }
517
+ definir_fonte_texto(nome) {
518
+ this.obterSuperficie().definirFonteTexto(nome);
519
+ }
520
+ definir_tamanho_texto(tamanho) {
521
+ this.obterSuperficie().definirTamanhoTexto(tamanho);
522
+ }
523
+ definir_estilo_texto(italico, negrito, sublinhado) {
524
+ this.obterSuperficie().definirEstiloTexto(italico, negrito, sublinhado);
525
+ }
526
+ largura_texto(texto) {
527
+ return this.obterSuperficie().larguraTexto(texto);
528
+ }
529
+ altura_texto(texto) {
530
+ return this.obterSuperficie().alturaTexto(texto);
531
+ }
532
+ largura_imagem(endereco) {
533
+ const img = this.cacheImagens.obterImagem(endereco);
534
+ return img.width;
535
+ }
536
+ altura_imagem(endereco) {
537
+ const img = this.cacheImagens.obterImagem(endereco);
538
+ return img.height;
539
+ }
540
+ criar_cor(vermelho, verde, azul) {
541
+ if (vermelho < 0 || vermelho > 255 ||
542
+ verde < 0 || verde > 255 ||
543
+ azul < 0 || azul > 255) {
544
+ throw new excecoes_1.ErroExecucaoBiblioteca("Erro ao criar a cor, os valores dos tons devem estar entre 0 e 255");
545
+ }
546
+ return ((0xff << 24) | (vermelho << 16) | (verde << 8) | azul) >>> 0;
547
+ }
548
+ carregar_fonte(caminhoFonte) {
549
+ if (!fs.existsSync(caminhoFonte)) {
550
+ throw new excecoes_1.ErroExecucaoBiblioteca(`A fonte '${caminhoFonte}' não foi encontrada`);
551
+ }
552
+ const nome = path_1.default.basename(caminhoFonte, path_1.default.extname(caminhoFonte));
553
+ (0, canvas_1.registerFont)(caminhoFonte, { family: nome });
554
+ }
555
+ definir_opacidade(opacidade) {
556
+ this.obterSuperficie().definirOpacidade(opacidade);
557
+ }
558
+ definir_rotacao(rotacao) {
559
+ this.obterSuperficie().definirRotacao(rotacao);
560
+ }
561
+ largura_janela() {
562
+ return this.obterJanela().width;
563
+ }
564
+ altura_janela() {
565
+ return this.obterJanela().height;
566
+ }
567
+ obterJanela() {
568
+ if (!this.inicializado || !this.canvas) {
569
+ throw new excecoes_1.ErroExecucaoBiblioteca("O modo gráfico não foi inicializado");
570
+ }
571
+ return this.canvas;
572
+ }
573
+ obterSuperficie() {
574
+ if (!this.inicializado || !this.superficieDesenho) {
575
+ throw new excecoes_1.ErroExecucaoBiblioteca("O modo gráfico não foi inicializado");
576
+ }
577
+ return this.superficieDesenho;
578
+ }
579
+ }
580
+ exports.Graficos = Graficos;
581
+ function corParaCss(cor) {
582
+ const a = (cor >>> 24) & 0xff;
583
+ const r = (cor >>> 16) & 0xff;
584
+ const g = (cor >>> 8) & 0xff;
585
+ const b = cor & 0xff;
586
+ return a < 255
587
+ ? `rgba(${r}, ${g}, ${b}, ${(a / 255).toFixed(3)})`
588
+ : `rgb(${r}, ${g}, ${b})`;
589
+ }
590
+ function imagemParaCanvas(imagem) {
591
+ if (imagem instanceof canvas_1.Canvas)
592
+ return imagem;
593
+ const canvas = (0, canvas_1.createCanvas)(imagem.width, imagem.height);
594
+ canvas.getContext("2d").drawImage(imagem, 0, 0);
595
+ return canvas;
596
+ }
597
+ function aplicarChromaKey(canvas, cor) {
598
+ if (cor === 0)
599
+ return canvas;
600
+ const r = (cor >>> 16) & 0xff;
601
+ const g = (cor >>> 8) & 0xff;
602
+ const b = cor & 0xff;
603
+ const ctx = canvas.getContext("2d");
604
+ const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
605
+ const data = imageData.data;
606
+ for (let i = 0; i < data.length; i += 4) {
607
+ if (data[i] === r && data[i + 1] === g && data[i + 2] === b) {
608
+ data[i] = 0;
609
+ data[i + 1] = 0;
610
+ data[i + 2] = 0;
611
+ data[i + 3] = 0;
612
+ }
613
+ }
614
+ ctx.putImageData(imageData, 0, 0);
615
+ return canvas;
616
+ }
617
+ function espelharImagem(canvas, horizontal, vertical) {
618
+ if (!horizontal && !vertical)
619
+ return canvas;
620
+ const novo = (0, canvas_1.createCanvas)(canvas.width, canvas.height);
621
+ const ctx = novo.getContext("2d");
622
+ ctx.translate(horizontal ? canvas.width : 0, vertical ? canvas.height : 0);
623
+ ctx.scale(horizontal ? -1 : 1, vertical ? -1 : 1);
624
+ ctx.drawImage(canvas, 0, 0);
625
+ return novo;
626
+ }
627
+ function rotacionarImagem(canvas, graus) {
628
+ if (graus % 360 === 0)
629
+ return canvas;
630
+ const rad = (graus * Math.PI) / 180;
631
+ const cos = Math.abs(Math.cos(rad));
632
+ const sin = Math.abs(Math.sin(rad));
633
+ const novaLargura = Math.round(canvas.width * cos + canvas.height * sin);
634
+ const novaAltura = Math.round(canvas.width * sin + canvas.height * cos);
635
+ const novo = (0, canvas_1.createCanvas)(novaLargura, novaAltura);
636
+ const ctx = novo.getContext("2d");
637
+ ctx.translate(novaLargura / 2, novaAltura / 2);
638
+ ctx.rotate(rad);
639
+ ctx.drawImage(canvas, -canvas.width / 2, -canvas.height / 2);
640
+ return novo;
641
+ }
642
+ //# sourceMappingURL=graficos.js.map