@inst/vscode-bin-darwin
Version:
BINARY ONLY - VSCode binary deployment for macOS
152 lines (150 loc) • 6.58 kB
JavaScript
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
var Buffer_1 = require("../Buffer");
var Types_1 = require("./Types");
var GridCache_1 = require("./GridCache");
var BaseRenderLayer_1 = require("./BaseRenderLayer");
var OVERLAP_OWNED_CHAR_DATA = [null, '', 0, -1];
var TextRenderLayer = (function (_super) {
__extends(TextRenderLayer, _super);
function TextRenderLayer(container, zIndex, colors) {
var _this = _super.call(this, container, 'text', zIndex, false, colors) || this;
_this._characterOverlapCache = {};
_this._state = new GridCache_1.GridCache();
return _this;
}
TextRenderLayer.prototype.resize = function (terminal, dim, charSizeChanged) {
_super.prototype.resize.call(this, terminal, dim, charSizeChanged);
var terminalFont = terminal.options.fontSize * window.devicePixelRatio + "px " + terminal.options.fontFamily;
if (this._characterWidth !== dim.scaledCharWidth || this._characterFont !== terminalFont) {
this._characterWidth = dim.scaledCharWidth;
this._characterFont = terminalFont;
this._characterOverlapCache = {};
}
this._state.clear();
this._state.resize(terminal.cols, terminal.rows);
};
TextRenderLayer.prototype.reset = function (terminal) {
this._state.clear();
this.clearAll();
};
TextRenderLayer.prototype.onGridChanged = function (terminal, startRow, endRow) {
if (this._state.cache.length === 0) {
return;
}
for (var y = startRow; y <= endRow; y++) {
var row = y + terminal.buffer.ydisp;
var line = terminal.buffer.lines.get(row);
this.clearCells(0, y, terminal.cols, 1);
for (var x = 0; x < terminal.cols; x++) {
var charData = line[x];
var code = charData[Buffer_1.CHAR_DATA_CODE_INDEX];
var char = charData[Buffer_1.CHAR_DATA_CHAR_INDEX];
var attr = charData[Buffer_1.CHAR_DATA_ATTR_INDEX];
var width = charData[Buffer_1.CHAR_DATA_WIDTH_INDEX];
if (width === 0) {
continue;
}
if (code === 32) {
if (x > 0) {
var previousChar = line[x - 1];
if (this._isOverlapping(previousChar)) {
continue;
}
}
}
var flags = attr >> 18;
var bg = attr & 0x1ff;
var isDefaultBackground = bg >= 256;
var isInvisible = flags & Types_1.FLAGS.INVISIBLE;
var isInverted = flags & Types_1.FLAGS.INVERSE;
if (!code || (code === 32 && isDefaultBackground && !isInverted) || isInvisible) {
continue;
}
if (width !== 0 && this._isOverlapping(charData)) {
if (x < line.length - 1 && line[x + 1][Buffer_1.CHAR_DATA_CODE_INDEX] === 32) {
width = 2;
}
}
var fg = (attr >> 9) & 0x1ff;
if (isInverted) {
var temp = bg;
bg = fg;
fg = temp;
if (fg === 256) {
fg = BaseRenderLayer_1.INVERTED_DEFAULT_COLOR;
}
if (bg === 257) {
bg = BaseRenderLayer_1.INVERTED_DEFAULT_COLOR;
}
}
if (width === 2) {
}
if (bg < 256) {
this._ctx.save();
this._ctx.fillStyle = (bg === BaseRenderLayer_1.INVERTED_DEFAULT_COLOR ? this._colors.foreground : this._colors.ansi[bg]);
this.fillCells(x, y, width, 1);
this._ctx.restore();
}
this._ctx.save();
if (flags & Types_1.FLAGS.BOLD) {
this._ctx.font = "bold " + this._ctx.font;
if (fg < 8) {
fg += 8;
}
}
if (flags & Types_1.FLAGS.UNDERLINE) {
if (fg === BaseRenderLayer_1.INVERTED_DEFAULT_COLOR) {
this._ctx.fillStyle = this._colors.background;
}
else if (fg < 256) {
this._ctx.fillStyle = this._colors.ansi[fg];
}
else {
this._ctx.fillStyle = this._colors.foreground;
}
this.fillBottomLineAtCells(x, y);
}
this.drawChar(terminal, char, code, width, x, y, fg, bg, !!(flags & Types_1.FLAGS.BOLD));
this._ctx.restore();
}
}
};
TextRenderLayer.prototype._isOverlapping = function (charData) {
var code = charData[Buffer_1.CHAR_DATA_CODE_INDEX];
if (code < 256) {
return false;
}
var char = charData[Buffer_1.CHAR_DATA_CHAR_INDEX];
if (this._characterOverlapCache.hasOwnProperty(char)) {
return this._characterOverlapCache[char];
}
this._ctx.save();
this._ctx.font = this._characterFont;
var overlaps = Math.floor(this._ctx.measureText(char).width) > this._characterWidth;
this._ctx.restore();
this._characterOverlapCache[char] = overlaps;
return overlaps;
};
TextRenderLayer.prototype._clearChar = function (x, y) {
var colsToClear = 1;
var state = this._state.cache[x][y];
if (state && state[Buffer_1.CHAR_DATA_WIDTH_INDEX] === 2) {
colsToClear = 2;
}
this.clearCells(x, y, colsToClear, 1);
};
return TextRenderLayer;
}(BaseRenderLayer_1.BaseRenderLayer));
exports.TextRenderLayer = TextRenderLayer;
//# sourceMappingURL=TextRenderLayer.js.map