From a622b97a9454324e8bb6aa5f1b4baa6de591ea62 Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Fri, 13 Oct 2017 13:13:38 -0700 Subject: [PATCH] Support enableBold option --- src/Interfaces.ts | 1 + src/Terminal.ts | 2 ++ src/renderer/BaseRenderLayer.ts | 18 +++++++++++++++--- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/Interfaces.ts b/src/Interfaces.ts index 2c77e8d3f..c6faf3737 100644 --- a/src/Interfaces.ts +++ b/src/Interfaces.ts @@ -135,6 +135,7 @@ export interface ITerminalOptions { cursorStyle?: string; debug?: boolean; disableStdin?: boolean; + enableBold?: boolean; fontSize?: number; fontFamily?: string; geometry?: [number, number]; diff --git a/src/Terminal.ts b/src/Terminal.ts index 8486f2650..da4bdc54f 100644 --- a/src/Terminal.ts +++ b/src/Terminal.ts @@ -77,6 +77,7 @@ const DEFAULT_OPTIONS: ITerminalOptions = { cursorStyle: 'block', bellSound: BellSound, bellStyle: 'none', + enableBold: true, fontFamily: 'courier-new, courier, monospace', fontSize: 15, lineHeight: 1.0, @@ -410,6 +411,7 @@ export class Terminal extends EventEmitter implements ITerminal, IInputHandlingT this.renderer.clear(); this.charMeasure.measure(this.options); break; + case 'enableBold': case 'lineHeight': // When the font changes the size of the cells may change which requires a renderer clear this.renderer.clear(); diff --git a/src/renderer/BaseRenderLayer.ts b/src/renderer/BaseRenderLayer.ts index fa1846b60..232a58f25 100644 --- a/src/renderer/BaseRenderLayer.ts +++ b/src/renderer/BaseRenderLayer.ts @@ -230,14 +230,14 @@ export abstract class BaseRenderLayer implements IRenderLayer { colorIndex = fg + 2; } else { // If default color and bold - if (bold) { + if (bold && terminal.options.enableBold) { colorIndex = 1; } } const isAscii = code < 256; // A color is basic if it is one of the standard normal or bold weight // colors of the characters held in the char atlas. Note that this excludes - // the normal weight light color characters + // the normal weight _light_ color characters. const isBasicColor = (colorIndex > 1 && fg < 16) && (fg < 8 || bold); const isDefaultColor = fg >= 256; const isDefaultBackground = bg >= 256; @@ -245,10 +245,22 @@ export abstract class BaseRenderLayer implements IRenderLayer { // ImageBitmap's draw about twice as fast as from a canvas const charAtlasCellWidth = this._scaledCharWidth + CHAR_ATLAS_CELL_SPACING; const charAtlasCellHeight = this._scaledCharHeight + CHAR_ATLAS_CELL_SPACING; + // Apply alpha to dim the character if (dim) { this._ctx.globalAlpha = DIM_OPACITY; } + + // Draw the non-bold version of the same color if bold is not enabled + if (bold && !terminal.options.enableBold) { + if (colorIndex === 1) { + // The default color + colorIndex = 0; + } else { + colorIndex -= 8; + } + } + this._ctx.drawImage(this._charAtlas, code * charAtlasCellWidth, colorIndex * charAtlasCellHeight, charAtlasCellWidth, this._scaledCharHeight, x * this._scaledCharWidth, y * this._scaledLineHeight + this._scaledLineDrawY, charAtlasCellWidth, this._scaledCharHeight); @@ -274,7 +286,7 @@ export abstract class BaseRenderLayer implements IRenderLayer { private _drawUncachedChar(terminal: ITerminal, char: string, width: number, fg: number, x: number, y: number, bold: boolean, dim: boolean): void { this._ctx.save(); this._ctx.font = `${terminal.options.fontSize * window.devicePixelRatio}px ${terminal.options.fontFamily}`; - if (bold) { + if (bold && terminal.options.enableBold) { this._ctx.font = `bold ${this._ctx.font}`; } this._ctx.textBaseline = 'top';