@xterm/addon-image 0.9.0-beta.99 → 0.10.0-beta.1

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.
@@ -1,563 +0,0 @@
1
- "use strict";
2
- /**
3
- * Copyright (c) 2020 The xterm.js authors. All rights reserved.
4
- * @license MIT
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.ImageStorage = exports.CELL_SIZE_DEFAULT = void 0;
8
- const ImageRenderer_1 = require("./ImageRenderer");
9
- // fallback default cell size
10
- exports.CELL_SIZE_DEFAULT = {
11
- width: 7,
12
- height: 14
13
- };
14
- /**
15
- * Extend extended attribute to also hold image tile information.
16
- *
17
- * Object definition is copied from base repo to fully mimick its behavior.
18
- * Image data is added as additional public properties `imageId` and `tileId`.
19
- */
20
- class ExtendedAttrsImage {
21
- get ext() {
22
- if (this._urlId) {
23
- return ((this._ext & ~469762048 /* ExtFlags.UNDERLINE_STYLE */) |
24
- (this.underlineStyle << 26));
25
- }
26
- return this._ext;
27
- }
28
- set ext(value) { this._ext = value; }
29
- get underlineStyle() {
30
- // Always return the URL style if it has one
31
- if (this._urlId) {
32
- return 5 /* UnderlineStyle.DASHED */;
33
- }
34
- return (this._ext & 469762048 /* ExtFlags.UNDERLINE_STYLE */) >> 26;
35
- }
36
- set underlineStyle(value) {
37
- this._ext &= ~469762048 /* ExtFlags.UNDERLINE_STYLE */;
38
- this._ext |= (value << 26) & 469762048 /* ExtFlags.UNDERLINE_STYLE */;
39
- }
40
- get underlineColor() {
41
- return this._ext & (50331648 /* Attributes.CM_MASK */ | 16777215 /* Attributes.RGB_MASK */);
42
- }
43
- set underlineColor(value) {
44
- this._ext &= ~(50331648 /* Attributes.CM_MASK */ | 16777215 /* Attributes.RGB_MASK */);
45
- this._ext |= value & (50331648 /* Attributes.CM_MASK */ | 16777215 /* Attributes.RGB_MASK */);
46
- }
47
- get underlineVariantOffset() {
48
- const val = (this._ext & 3758096384 /* ExtFlags.VARIANT_OFFSET */) >> 29;
49
- if (val < 0) {
50
- return val ^ 0xFFFFFFF8;
51
- }
52
- return val;
53
- }
54
- set underlineVariantOffset(value) {
55
- this._ext &= ~3758096384 /* ExtFlags.VARIANT_OFFSET */;
56
- this._ext |= (value << 29) & 3758096384 /* ExtFlags.VARIANT_OFFSET */;
57
- }
58
- get urlId() {
59
- return this._urlId;
60
- }
61
- set urlId(value) {
62
- this._urlId = value;
63
- }
64
- constructor(ext = 0, urlId = 0, imageId = -1, tileId = -1) {
65
- this.imageId = imageId;
66
- this.tileId = tileId;
67
- this._ext = 0;
68
- this._urlId = 0;
69
- this._ext = ext;
70
- this._urlId = urlId;
71
- }
72
- clone() {
73
- /**
74
- * Technically we dont need a clone variant of ExtendedAttrsImage,
75
- * as we never clone a cell holding image data.
76
- * Note: Clone is only meant to be used by the InputHandler for
77
- * sticky attributes, which is never the case for image data.
78
- * We still provide a proper clone method to reflect the full ext attr
79
- * state in case there are future use cases for clone.
80
- */
81
- return new ExtendedAttrsImage(this._ext, this._urlId, this.imageId, this.tileId);
82
- }
83
- isEmpty() {
84
- return this.underlineStyle === 0 /* UnderlineStyle.NONE */ && this._urlId === 0 && this.imageId === -1;
85
- }
86
- }
87
- const EMPTY_ATTRS = new ExtendedAttrsImage();
88
- /**
89
- * ImageStorage - extension of CoreTerminal:
90
- * - hold image data
91
- * - write/read image data to/from buffer
92
- *
93
- * TODO: image composition for overwrites
94
- */
95
- class ImageStorage {
96
- constructor(_terminal, _renderer, _opts) {
97
- this._terminal = _terminal;
98
- this._renderer = _renderer;
99
- this._opts = _opts;
100
- // storage
101
- this._images = new Map();
102
- // last used id
103
- this._lastId = 0;
104
- // last evicted id
105
- this._lowestId = 0;
106
- // whether a full clear happened before
107
- this._fullyCleared = false;
108
- // whether render should do a full clear
109
- this._needsFullClear = false;
110
- // hard limit of stored pixels (fallback limit of 10 MB)
111
- this._pixelLimit = 2500000;
112
- try {
113
- this.setLimit(this._opts.storageLimit);
114
- }
115
- catch (e) {
116
- console.error(e.message);
117
- console.warn(`storageLimit is set to ${this.getLimit()} MB`);
118
- }
119
- this._viewportMetrics = {
120
- cols: this._terminal.cols,
121
- rows: this._terminal.rows
122
- };
123
- }
124
- dispose() {
125
- this.reset();
126
- }
127
- reset() {
128
- var _a;
129
- for (const spec of this._images.values()) {
130
- (_a = spec.marker) === null || _a === void 0 ? void 0 : _a.dispose();
131
- }
132
- // NOTE: marker.dispose above already calls ImageBitmap.close
133
- // therefore we can just wipe the map here
134
- this._images.clear();
135
- this._renderer.clearAll();
136
- }
137
- getLimit() {
138
- return this._pixelLimit * 4 / 1000000;
139
- }
140
- setLimit(value) {
141
- if (value < 0.5 || value > 1000) {
142
- throw RangeError('invalid storageLimit, should be at least 0.5 MB and not exceed 1G');
143
- }
144
- this._pixelLimit = (value / 4 * 1000000) >>> 0;
145
- this._evictOldest(0);
146
- }
147
- getUsage() {
148
- return this._getStoredPixels() * 4 / 1000000;
149
- }
150
- _getStoredPixels() {
151
- let storedPixels = 0;
152
- for (const spec of this._images.values()) {
153
- if (spec.orig) {
154
- storedPixels += spec.orig.width * spec.orig.height;
155
- if (spec.actual && spec.actual !== spec.orig) {
156
- storedPixels += spec.actual.width * spec.actual.height;
157
- }
158
- }
159
- }
160
- return storedPixels;
161
- }
162
- _delImg(id) {
163
- const spec = this._images.get(id);
164
- this._images.delete(id);
165
- // FIXME: really ugly workaround to get bitmaps deallocated :(
166
- if (spec && window.ImageBitmap && spec.orig instanceof ImageBitmap) {
167
- spec.orig.close();
168
- }
169
- }
170
- /**
171
- * Wipe canvas and images on alternate buffer.
172
- */
173
- wipeAlternate() {
174
- var _a;
175
- // remove all alternate tagged images
176
- const zero = [];
177
- for (const [id, spec] of this._images.entries()) {
178
- if (spec.bufferType === 'alternate') {
179
- (_a = spec.marker) === null || _a === void 0 ? void 0 : _a.dispose();
180
- zero.push(id);
181
- }
182
- }
183
- for (const id of zero) {
184
- this._delImg(id);
185
- }
186
- // mark canvas to be wiped on next render
187
- this._needsFullClear = true;
188
- this._fullyCleared = false;
189
- }
190
- /**
191
- * Only advance text cursor.
192
- * This is an edge case from empty sixels carrying only a height but no pixels.
193
- * Partially fixes https://github.com/jerch/xterm-addon-image/issues/37.
194
- */
195
- advanceCursor(height) {
196
- if (this._opts.sixelScrolling) {
197
- let cellSize = this._renderer.cellSize;
198
- if (cellSize.width === -1 || cellSize.height === -1) {
199
- cellSize = exports.CELL_SIZE_DEFAULT;
200
- }
201
- const rows = Math.ceil(height / cellSize.height);
202
- for (let i = 1; i < rows; ++i) {
203
- this._terminal._core._inputHandler.lineFeed();
204
- }
205
- }
206
- }
207
- /**
208
- * Method to add an image to the storage.
209
- */
210
- addImage(img) {
211
- var _a;
212
- // never allow storage to exceed memory limit
213
- this._evictOldest(img.width * img.height);
214
- // calc rows x cols needed to display the image
215
- let cellSize = this._renderer.cellSize;
216
- if (cellSize.width === -1 || cellSize.height === -1) {
217
- cellSize = exports.CELL_SIZE_DEFAULT;
218
- }
219
- const cols = Math.ceil(img.width / cellSize.width);
220
- const rows = Math.ceil(img.height / cellSize.height);
221
- const imageId = ++this._lastId;
222
- const buffer = this._terminal._core.buffer;
223
- const termCols = this._terminal.cols;
224
- const termRows = this._terminal.rows;
225
- const originX = buffer.x;
226
- const originY = buffer.y;
227
- let offset = originX;
228
- let tileCount = 0;
229
- if (!this._opts.sixelScrolling) {
230
- buffer.x = 0;
231
- buffer.y = 0;
232
- offset = 0;
233
- }
234
- this._terminal._core._inputHandler._dirtyRowTracker.markDirty(buffer.y);
235
- for (let row = 0; row < rows; ++row) {
236
- const line = buffer.lines.get(buffer.y + buffer.ybase);
237
- for (let col = 0; col < cols; ++col) {
238
- if (offset + col >= termCols)
239
- break;
240
- this._writeToCell(line, offset + col, imageId, row * cols + col);
241
- tileCount++;
242
- }
243
- if (this._opts.sixelScrolling) {
244
- if (row < rows - 1)
245
- this._terminal._core._inputHandler.lineFeed();
246
- }
247
- else {
248
- if (++buffer.y >= termRows)
249
- break;
250
- }
251
- buffer.x = offset;
252
- }
253
- this._terminal._core._inputHandler._dirtyRowTracker.markDirty(buffer.y);
254
- // cursor positioning modes
255
- if (this._opts.sixelScrolling) {
256
- buffer.x = offset;
257
- }
258
- else {
259
- buffer.x = originX;
260
- buffer.y = originY;
261
- }
262
- // deleted images with zero tile count
263
- const zero = [];
264
- for (const [id, spec] of this._images.entries()) {
265
- if (spec.tileCount < 1) {
266
- (_a = spec.marker) === null || _a === void 0 ? void 0 : _a.dispose();
267
- zero.push(id);
268
- }
269
- }
270
- for (const id of zero) {
271
- this._delImg(id);
272
- }
273
- // eviction marker:
274
- // delete the image when the marker gets disposed
275
- const endMarker = this._terminal.registerMarker(0);
276
- endMarker === null || endMarker === void 0 ? void 0 : endMarker.onDispose(() => {
277
- const spec = this._images.get(imageId);
278
- if (spec) {
279
- this._delImg(imageId);
280
- }
281
- });
282
- // since markers do not work on alternate for some reason,
283
- // we evict images here manually
284
- if (this._terminal.buffer.active.type === 'alternate') {
285
- this._evictOnAlternate();
286
- }
287
- // create storage entry
288
- const imgSpec = {
289
- orig: img,
290
- origCellSize: cellSize,
291
- actual: img,
292
- actualCellSize: Object.assign({}, cellSize), // clone needed, since later modified
293
- marker: endMarker || undefined,
294
- tileCount,
295
- bufferType: this._terminal.buffer.active.type
296
- };
297
- // finally add the image
298
- this._images.set(imageId, imgSpec);
299
- }
300
- /**
301
- * Render method. Collects buffer information and triggers
302
- * canvas updates.
303
- */
304
- // TODO: Should we move this to the ImageRenderer?
305
- render(range) {
306
- // setup image canvas in case we have none yet, but have images in store
307
- if (!this._renderer.canvas && this._images.size) {
308
- this._renderer.insertLayerToDom();
309
- // safety measure - in case we cannot spawn a canvas at all, just exit
310
- if (!this._renderer.canvas) {
311
- return;
312
- }
313
- }
314
- // rescale if needed
315
- this._renderer.rescaleCanvas();
316
- // exit early if we dont have any images to test for
317
- if (!this._images.size) {
318
- if (!this._fullyCleared) {
319
- this._renderer.clearAll();
320
- this._fullyCleared = true;
321
- this._needsFullClear = false;
322
- }
323
- if (this._renderer.canvas) {
324
- this._renderer.removeLayerFromDom();
325
- }
326
- return;
327
- }
328
- // buffer switches force a full clear
329
- if (this._needsFullClear) {
330
- this._renderer.clearAll();
331
- this._fullyCleared = true;
332
- this._needsFullClear = false;
333
- }
334
- const { start, end } = range;
335
- const buffer = this._terminal._core.buffer;
336
- const cols = this._terminal._core.cols;
337
- // clear drawing area
338
- this._renderer.clearLines(start, end);
339
- // walk all cells in viewport and draw tiles found
340
- for (let row = start; row <= end; ++row) {
341
- const line = buffer.lines.get(row + buffer.ydisp);
342
- if (!line)
343
- return;
344
- for (let col = 0; col < cols; ++col) {
345
- if (line.getBg(col) & 268435456 /* BgFlags.HAS_EXTENDED */) {
346
- let e = line._extendedAttrs[col] || EMPTY_ATTRS;
347
- const imageId = e.imageId;
348
- if (imageId === undefined || imageId === -1) {
349
- continue;
350
- }
351
- const imgSpec = this._images.get(imageId);
352
- if (e.tileId !== -1) {
353
- const startTile = e.tileId;
354
- const startCol = col;
355
- let count = 1;
356
- /**
357
- * merge tiles to the right into a single draw call, if:
358
- * - not at end of line
359
- * - cell has same image id
360
- * - cell has consecutive tile id
361
- */
362
- while (++col < cols
363
- && (line.getBg(col) & 268435456 /* BgFlags.HAS_EXTENDED */)
364
- && (e = line._extendedAttrs[col] || EMPTY_ATTRS)
365
- && (e.imageId === imageId)
366
- && (e.tileId === startTile + count)) {
367
- count++;
368
- }
369
- col--;
370
- if (imgSpec) {
371
- if (imgSpec.actual) {
372
- this._renderer.draw(imgSpec, startTile, startCol, row, count);
373
- }
374
- }
375
- else if (this._opts.showPlaceholder) {
376
- this._renderer.drawPlaceholder(startCol, row, count);
377
- }
378
- this._fullyCleared = false;
379
- }
380
- }
381
- }
382
- }
383
- }
384
- viewportResize(metrics) {
385
- var _a;
386
- // exit early if we have nothing in storage
387
- if (!this._images.size) {
388
- this._viewportMetrics = metrics;
389
- return;
390
- }
391
- // handle only viewport width enlargements, exit all other cases
392
- // TODO: needs patch for tile counter
393
- if (this._viewportMetrics.cols >= metrics.cols) {
394
- this._viewportMetrics = metrics;
395
- return;
396
- }
397
- // walk scrollbuffer at old col width to find all possible expansion matches
398
- const buffer = this._terminal._core.buffer;
399
- const rows = buffer.lines.length;
400
- const oldCol = this._viewportMetrics.cols - 1;
401
- for (let row = 0; row < rows; ++row) {
402
- const line = buffer.lines.get(row);
403
- if (line.getBg(oldCol) & 268435456 /* BgFlags.HAS_EXTENDED */) {
404
- const e = line._extendedAttrs[oldCol] || EMPTY_ATTRS;
405
- const imageId = e.imageId;
406
- if (imageId === undefined || imageId === -1) {
407
- continue;
408
- }
409
- const imgSpec = this._images.get(imageId);
410
- if (!imgSpec) {
411
- continue;
412
- }
413
- // found an image tile at oldCol, check if it qualifies for right exapansion
414
- const tilesPerRow = Math.ceil((((_a = imgSpec.actual) === null || _a === void 0 ? void 0 : _a.width) || 0) / imgSpec.actualCellSize.width);
415
- if ((e.tileId % tilesPerRow) + 1 >= tilesPerRow) {
416
- continue;
417
- }
418
- // expand only if right side is empty (nothing got wrapped from below)
419
- let hasData = false;
420
- for (let rightCol = oldCol + 1; rightCol > metrics.cols; ++rightCol) {
421
- if (line._data[rightCol * 3 /* Cell.SIZE */ + 0 /* Cell.CONTENT */] & 4194303 /* Content.HAS_CONTENT_MASK */) {
422
- hasData = true;
423
- break;
424
- }
425
- }
426
- if (hasData) {
427
- continue;
428
- }
429
- // do right expansion on terminal buffer
430
- const end = Math.min(metrics.cols, tilesPerRow - (e.tileId % tilesPerRow) + oldCol);
431
- let lastTile = e.tileId;
432
- for (let expandCol = oldCol + 1; expandCol < end; ++expandCol) {
433
- this._writeToCell(line, expandCol, imageId, ++lastTile);
434
- imgSpec.tileCount++;
435
- }
436
- }
437
- }
438
- // store new viewport metrics
439
- this._viewportMetrics = metrics;
440
- }
441
- /**
442
- * Retrieve original canvas at buffer position.
443
- */
444
- getImageAtBufferCell(x, y) {
445
- var _a, _b;
446
- const buffer = this._terminal._core.buffer;
447
- const line = buffer.lines.get(y);
448
- if (line && line.getBg(x) & 268435456 /* BgFlags.HAS_EXTENDED */) {
449
- const e = line._extendedAttrs[x] || EMPTY_ATTRS;
450
- if (e.imageId && e.imageId !== -1) {
451
- const orig = (_a = this._images.get(e.imageId)) === null || _a === void 0 ? void 0 : _a.orig;
452
- if (window.ImageBitmap && orig instanceof ImageBitmap) {
453
- const canvas = ImageRenderer_1.ImageRenderer.createCanvas(window.document, orig.width, orig.height);
454
- (_b = canvas.getContext('2d')) === null || _b === void 0 ? void 0 : _b.drawImage(orig, 0, 0, orig.width, orig.height);
455
- return canvas;
456
- }
457
- return orig;
458
- }
459
- }
460
- }
461
- /**
462
- * Extract active single tile at buffer position.
463
- */
464
- extractTileAtBufferCell(x, y) {
465
- const buffer = this._terminal._core.buffer;
466
- const line = buffer.lines.get(y);
467
- if (line && line.getBg(x) & 268435456 /* BgFlags.HAS_EXTENDED */) {
468
- const e = line._extendedAttrs[x] || EMPTY_ATTRS;
469
- if (e.imageId && e.imageId !== -1 && e.tileId !== -1) {
470
- const spec = this._images.get(e.imageId);
471
- if (spec) {
472
- return this._renderer.extractTile(spec, e.tileId);
473
- }
474
- }
475
- }
476
- }
477
- // TODO: Do we need some blob offloading tricks here to avoid early eviction?
478
- // also see https://stackoverflow.com/questions/28307789/is-there-any-limitation-on-javascript-max-blob-size
479
- _evictOldest(room) {
480
- var _a;
481
- const used = this._getStoredPixels();
482
- let current = used;
483
- while (this._pixelLimit < current + room && this._images.size) {
484
- const spec = this._images.get(++this._lowestId);
485
- if (spec && spec.orig) {
486
- current -= spec.orig.width * spec.orig.height;
487
- if (spec.actual && spec.orig !== spec.actual) {
488
- current -= spec.actual.width * spec.actual.height;
489
- }
490
- (_a = spec.marker) === null || _a === void 0 ? void 0 : _a.dispose();
491
- this._delImg(this._lowestId);
492
- }
493
- }
494
- return used - current;
495
- }
496
- _writeToCell(line, x, imageId, tileId) {
497
- if (line._data[x * 3 /* Cell.SIZE */ + 2 /* Cell.BG */] & 268435456 /* BgFlags.HAS_EXTENDED */) {
498
- const old = line._extendedAttrs[x];
499
- if (old) {
500
- if (old.imageId !== undefined) {
501
- // found an old ExtendedAttrsImage, since we know that
502
- // they are always isolated instances (single cell usage),
503
- // we can re-use it and just update their id entries
504
- const oldSpec = this._images.get(old.imageId);
505
- if (oldSpec) {
506
- // early eviction for in-viewport overwrites
507
- oldSpec.tileCount--;
508
- }
509
- old.imageId = imageId;
510
- old.tileId = tileId;
511
- return;
512
- }
513
- // found a plain ExtendedAttrs instance, clone it to new entry
514
- line._extendedAttrs[x] = new ExtendedAttrsImage(old.ext, old.urlId, imageId, tileId);
515
- return;
516
- }
517
- }
518
- // fall-through: always create new ExtendedAttrsImage entry
519
- line._data[x * 3 /* Cell.SIZE */ + 2 /* Cell.BG */] |= 268435456 /* BgFlags.HAS_EXTENDED */;
520
- line._extendedAttrs[x] = new ExtendedAttrsImage(0, 0, imageId, tileId);
521
- }
522
- _evictOnAlternate() {
523
- var _a, _b;
524
- // nullify tile count of all images on alternate buffer
525
- for (const spec of this._images.values()) {
526
- if (spec.bufferType === 'alternate') {
527
- spec.tileCount = 0;
528
- }
529
- }
530
- // re-count tiles on whole buffer
531
- const buffer = this._terminal._core.buffer;
532
- for (let y = 0; y < this._terminal.rows; ++y) {
533
- const line = buffer.lines.get(y);
534
- if (!line) {
535
- continue;
536
- }
537
- for (let x = 0; x < this._terminal.cols; ++x) {
538
- if (line._data[x * 3 /* Cell.SIZE */ + 2 /* Cell.BG */] & 268435456 /* BgFlags.HAS_EXTENDED */) {
539
- const imgId = (_a = line._extendedAttrs[x]) === null || _a === void 0 ? void 0 : _a.imageId;
540
- if (imgId) {
541
- const spec = this._images.get(imgId);
542
- if (spec) {
543
- spec.tileCount++;
544
- }
545
- }
546
- }
547
- }
548
- }
549
- // deleted images with zero tile count
550
- const zero = [];
551
- for (const [id, spec] of this._images.entries()) {
552
- if (spec.bufferType === 'alternate' && !spec.tileCount) {
553
- (_b = spec.marker) === null || _b === void 0 ? void 0 : _b.dispose();
554
- zero.push(id);
555
- }
556
- }
557
- for (const id of zero) {
558
- this._delImg(id);
559
- }
560
- }
561
- }
562
- exports.ImageStorage = ImageStorage;
563
- //# sourceMappingURL=ImageStorage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ImageStorage.js","sourceRoot":"","sources":["../src/ImageStorage.ts"],"names":[],"mappings":"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"}