From b393008b542191d863c041eda2af6329a1a047f3 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Sat, 15 Oct 2022 13:19:04 -0700 Subject: [PATCH] Use new render dimensions in canvasrenderer --- .../xterm-addon-canvas/src/CanvasRenderer.ts | 18 +++++++++++++++--- addons/xterm-addon-canvas/src/Types.d.ts | 18 +----------------- 2 files changed, 16 insertions(+), 20 deletions(-) diff --git a/addons/xterm-addon-canvas/src/CanvasRenderer.ts b/addons/xterm-addon-canvas/src/CanvasRenderer.ts index 405cabec..f8ab3eef 100644 --- a/addons/xterm-addon-canvas/src/CanvasRenderer.ts +++ b/addons/xterm-addon-canvas/src/CanvasRenderer.ts @@ -8,7 +8,7 @@ import { observeDevicePixelDimensions } from 'browser/renderer/shared/DevicePixe import { createRenderDimensions } from 'browser/renderer/shared/RendererUtils'; import { IRenderDimensions, IRenderer, IRequestRedrawEvent } from 'browser/renderer/shared/Types'; import { ICharacterJoinerService, ICharSizeService, ICoreBrowserService, IThemeService } from 'browser/services/Services'; -import { IColorSet, ILinkifier2, ReadonlyColorSet } from 'browser/Types'; +import { ILinkifier2 } from 'browser/Types'; import { EventEmitter } from 'common/EventEmitter'; import { Disposable, toDisposable } from 'common/Lifecycle'; import { IBufferService, ICoreService, IDecorationService, IOptionsService } from 'common/services/Services'; @@ -152,22 +152,34 @@ export class CanvasRenderer extends Disposable implements IRenderer { // See the WebGL renderer for an explanation of this section. const dpr = this._coreBrowserService.dpr; this.dimensions.scaledCharWidth = Math.floor(this._charSizeService.width * dpr); + this.dimensions.device.char.width = Math.floor(this._charSizeService.width * dpr); this.dimensions.scaledCharHeight = Math.ceil(this._charSizeService.height * dpr); + this.dimensions.device.char.height = Math.ceil(this._charSizeService.height * dpr); this.dimensions.scaledCellHeight = Math.floor(this.dimensions.scaledCharHeight * this._optionsService.rawOptions.lineHeight); + this.dimensions.device.cell.height = Math.floor(this.dimensions.device.char.height * this._optionsService.rawOptions.lineHeight); this.dimensions.scaledCharTop = this._optionsService.rawOptions.lineHeight === 1 ? 0 : Math.round((this.dimensions.scaledCellHeight - this.dimensions.scaledCharHeight) / 2); + this.dimensions.device.char.top = this._optionsService.rawOptions.lineHeight === 1 ? 0 : Math.round((this.dimensions.device.cell.height - this.dimensions.device.char.height) / 2); this.dimensions.scaledCellWidth = this.dimensions.scaledCharWidth + Math.round(this._optionsService.rawOptions.letterSpacing); + this.dimensions.device.cell.width = this.dimensions.device.char.width + Math.round(this._optionsService.rawOptions.letterSpacing); this.dimensions.scaledCharLeft = Math.floor(this._optionsService.rawOptions.letterSpacing / 2); + this.dimensions.device.char.left = Math.floor(this._optionsService.rawOptions.letterSpacing / 2); this.dimensions.scaledCanvasHeight = this._bufferService.rows * this.dimensions.scaledCellHeight; + this.dimensions.device.canvas.height = this._bufferService.rows * this.dimensions.device.cell.height; this.dimensions.scaledCanvasWidth = this._bufferService.cols * this.dimensions.scaledCellWidth; + this.dimensions.device.canvas.width = this._bufferService.cols * this.dimensions.device.cell.width; this.dimensions.canvasHeight = Math.round(this.dimensions.scaledCanvasHeight / dpr); + this.dimensions.css.canvas.height = Math.round(this.dimensions.device.canvas.height / dpr); this.dimensions.canvasWidth = Math.round(this.dimensions.scaledCanvasWidth / dpr); + this.dimensions.css.canvas.width = Math.round(this.dimensions.device.canvas.width / dpr); this.dimensions.actualCellHeight = this.dimensions.canvasHeight / this._bufferService.rows; + this.dimensions.css.cell.height = this.dimensions.css.canvas.height / this._bufferService.rows; this.dimensions.actualCellWidth = this.dimensions.canvasWidth / this._bufferService.cols; + this.dimensions.css.cell.width = this.dimensions.css.canvas.width / this._bufferService.cols; } private _setCanvasDevicePixelDimensions(width: number, height: number): void { - this.dimensions.scaledCanvasHeight = height; - this.dimensions.scaledCanvasWidth = width; + this.dimensions.device.canvas.height = height; + this.dimensions.device.canvas.width = width; // Resize all render layers for (const l of this._renderLayers) { l.resize(this.dimensions); diff --git a/addons/xterm-addon-canvas/src/Types.d.ts b/addons/xterm-addon-canvas/src/Types.d.ts index edd5c2ea..7e582535 100644 --- a/addons/xterm-addon-canvas/src/Types.d.ts +++ b/addons/xterm-addon-canvas/src/Types.d.ts @@ -4,24 +4,8 @@ */ import { IDisposable } from 'common/Types'; -import { IColorSet, ReadonlyColorSet } from 'browser/Types'; import { IEvent } from 'common/EventEmitter'; - -// TODO: Use core interfaces -export interface IRenderDimensions { - scaledCharWidth: number; - scaledCharHeight: number; - scaledCellWidth: number; - scaledCellHeight: number; - scaledCharLeft: number; - scaledCharTop: number; - scaledCanvasWidth: number; - scaledCanvasHeight: number; - canvasWidth: number; - canvasHeight: number; - actualCellWidth: number; - actualCellHeight: number; -} +import { IRenderDimensions } from 'browser/renderer/shared/Types'; export interface IRequestRedrawEvent { start: number;