UNPKG

@inst/vscode-bin-darwin

Version:

BINARY ONLY - VSCode binary deployment for macOS

285 lines (283 loc) 11.4 kB
"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 BaseRenderLayer_1 = require("./BaseRenderLayer"); var BLINK_INTERVAL = 600; var CursorRenderLayer = (function (_super) { __extends(CursorRenderLayer, _super); function CursorRenderLayer(container, zIndex, colors) { var _this = _super.call(this, container, 'cursor', zIndex, true, colors) || this; _this._state = { x: null, y: null, isFocused: null, style: null, width: null, }; _this._cursorRenderers = { 'bar': _this._renderBarCursor.bind(_this), 'block': _this._renderBlockCursor.bind(_this), 'underline': _this._renderUnderlineCursor.bind(_this) }; return _this; } CursorRenderLayer.prototype.resize = function (terminal, dim, charSizeChanged) { _super.prototype.resize.call(this, terminal, dim, charSizeChanged); this._state = { x: null, y: null, isFocused: null, style: null, width: null, }; }; CursorRenderLayer.prototype.reset = function (terminal) { this._clearCursor(); if (this._cursorBlinkStateManager) { this._cursorBlinkStateManager.dispose(); this._cursorBlinkStateManager = null; this.onOptionsChanged(terminal); } }; CursorRenderLayer.prototype.onBlur = function (terminal) { if (this._cursorBlinkStateManager) { this._cursorBlinkStateManager.pause(); } terminal.refresh(terminal.buffer.y, terminal.buffer.y); }; CursorRenderLayer.prototype.onFocus = function (terminal) { if (this._cursorBlinkStateManager) { this._cursorBlinkStateManager.resume(terminal); } else { terminal.refresh(terminal.buffer.y, terminal.buffer.y); } }; CursorRenderLayer.prototype.onOptionsChanged = function (terminal) { var _this = this; if (terminal.options.cursorBlink) { if (!this._cursorBlinkStateManager) { this._cursorBlinkStateManager = new CursorBlinkStateManager(terminal, function () { _this._render(terminal, true); }); } } else { if (this._cursorBlinkStateManager) { this._cursorBlinkStateManager.dispose(); this._cursorBlinkStateManager = null; } terminal.refresh(terminal.buffer.y, terminal.buffer.y); } }; CursorRenderLayer.prototype.onCursorMove = function (terminal) { if (this._cursorBlinkStateManager) { this._cursorBlinkStateManager.restartBlinkAnimation(terminal); } }; CursorRenderLayer.prototype.onGridChanged = function (terminal, startRow, endRow) { if (!this._cursorBlinkStateManager || this._cursorBlinkStateManager.isPaused) { this._render(terminal, false); } }; CursorRenderLayer.prototype._render = function (terminal, triggeredByAnimationFrame) { if (!terminal.cursorState || terminal.cursorHidden) { this._clearCursor(); return; } var cursorY = terminal.buffer.ybase + terminal.buffer.y; var viewportRelativeCursorY = cursorY - terminal.buffer.ydisp; if (viewportRelativeCursorY < 0 || viewportRelativeCursorY >= terminal.rows) { this._clearCursor(); return; } var charData = terminal.buffer.lines.get(cursorY)[terminal.buffer.x]; if (!charData) { return; } if (!terminal.isFocused) { this._clearCursor(); this._ctx.save(); this._ctx.fillStyle = this._colors.cursor; this._renderBlurCursor(terminal, terminal.buffer.x, viewportRelativeCursorY, charData); this._ctx.restore(); this._state.x = terminal.buffer.x; this._state.y = viewportRelativeCursorY; this._state.isFocused = false; this._state.style = terminal.options.cursorStyle; this._state.width = charData[Buffer_1.CHAR_DATA_WIDTH_INDEX]; return; } if (this._cursorBlinkStateManager && !this._cursorBlinkStateManager.isCursorVisible) { this._clearCursor(); return; } if (this._state) { if (this._state.x === terminal.buffer.x && this._state.y === viewportRelativeCursorY && this._state.isFocused === terminal.isFocused && this._state.style === terminal.options.cursorStyle && this._state.width === charData[Buffer_1.CHAR_DATA_WIDTH_INDEX]) { return; } this._clearCursor(); } this._ctx.save(); this._cursorRenderers[terminal.options.cursorStyle || 'block'](terminal, terminal.buffer.x, viewportRelativeCursorY, charData); this._ctx.restore(); this._state.x = terminal.buffer.x; this._state.y = viewportRelativeCursorY; this._state.isFocused = false; this._state.style = terminal.options.cursorStyle; this._state.width = charData[Buffer_1.CHAR_DATA_WIDTH_INDEX]; }; CursorRenderLayer.prototype._clearCursor = function () { if (this._state) { this.clearCells(this._state.x, this._state.y, this._state.width, 1); this._state = { x: null, y: null, isFocused: null, style: null, width: null, }; } }; CursorRenderLayer.prototype._renderBarCursor = function (terminal, x, y, charData) { this._ctx.save(); this._ctx.fillStyle = this._colors.cursor; this.fillLeftLineAtCell(x, y); this._ctx.restore(); }; CursorRenderLayer.prototype._renderBlockCursor = function (terminal, x, y, charData) { this._ctx.save(); this._ctx.fillStyle = this._colors.cursor; this.fillCells(x, y, charData[Buffer_1.CHAR_DATA_WIDTH_INDEX], 1); this._ctx.fillStyle = this._colors.cursorAccent; this.fillCharTrueColor(terminal, charData, x, y); this._ctx.restore(); }; CursorRenderLayer.prototype._renderUnderlineCursor = function (terminal, x, y, charData) { this._ctx.save(); this._ctx.fillStyle = this._colors.cursor; this.fillBottomLineAtCells(x, y); this._ctx.restore(); }; CursorRenderLayer.prototype._renderBlurCursor = function (terminal, x, y, charData) { this._ctx.save(); this._ctx.strokeStyle = this._colors.cursor; this.strokeRectAtCell(x, y, charData[Buffer_1.CHAR_DATA_WIDTH_INDEX], 1); this._ctx.restore(); }; return CursorRenderLayer; }(BaseRenderLayer_1.BaseRenderLayer)); exports.CursorRenderLayer = CursorRenderLayer; var CursorBlinkStateManager = (function () { function CursorBlinkStateManager(terminal, renderCallback) { this.renderCallback = renderCallback; this.isCursorVisible = true; if (terminal.isFocused) { this._restartInterval(); } } Object.defineProperty(CursorBlinkStateManager.prototype, "isPaused", { get: function () { return !(this._blinkStartTimeout || this._blinkInterval); }, enumerable: true, configurable: true }); CursorBlinkStateManager.prototype.dispose = function () { if (this._blinkInterval) { window.clearInterval(this._blinkInterval); this._blinkInterval = null; } if (this._blinkStartTimeout) { window.clearTimeout(this._blinkStartTimeout); this._blinkStartTimeout = null; } if (this._animationFrame) { window.cancelAnimationFrame(this._animationFrame); this._animationFrame = null; } }; CursorBlinkStateManager.prototype.restartBlinkAnimation = function (terminal) { var _this = this; if (this.isPaused) { return; } this._animationTimeRestarted = Date.now(); this.isCursorVisible = true; if (!this._animationFrame) { this._animationFrame = window.requestAnimationFrame(function () { _this.renderCallback(); _this._animationFrame = null; }); } }; CursorBlinkStateManager.prototype._restartInterval = function (timeToStart) { var _this = this; if (timeToStart === void 0) { timeToStart = BLINK_INTERVAL; } if (this._blinkInterval) { window.clearInterval(this._blinkInterval); } this._blinkStartTimeout = setTimeout(function () { if (_this._animationTimeRestarted) { var time = BLINK_INTERVAL - (Date.now() - _this._animationTimeRestarted); _this._animationTimeRestarted = null; if (time > 0) { _this._restartInterval(time); return; } } _this.isCursorVisible = false; _this._animationFrame = window.requestAnimationFrame(function () { _this.renderCallback(); _this._animationFrame = null; }); _this._blinkInterval = setInterval(function () { if (_this._animationTimeRestarted) { var time = BLINK_INTERVAL - (Date.now() - _this._animationTimeRestarted); _this._animationTimeRestarted = null; _this._restartInterval(time); return; } _this.isCursorVisible = !_this.isCursorVisible; _this._animationFrame = window.requestAnimationFrame(function () { _this.renderCallback(); _this._animationFrame = null; }); }, BLINK_INTERVAL); }, timeToStart); }; CursorBlinkStateManager.prototype.pause = function () { this.isCursorVisible = true; if (this._blinkInterval) { window.clearInterval(this._blinkInterval); this._blinkInterval = null; } if (this._blinkStartTimeout) { window.clearTimeout(this._blinkStartTimeout); this._blinkStartTimeout = null; } if (this._animationFrame) { window.cancelAnimationFrame(this._animationFrame); this._animationFrame = null; } }; CursorBlinkStateManager.prototype.resume = function (terminal) { this._animationTimeRestarted = null; this._restartInterval(); this.restartBlinkAnimation(terminal); }; return CursorBlinkStateManager; }()); //# sourceMappingURL=CursorRenderLayer.js.map