/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ export class RestrictedRenderingContext { constructor(viewLayout, viewportData) { this._restrictedRenderingContextBrand = undefined; this._viewLayout = viewLayout; this.viewportData = viewportData; this.scrollWidth = this._viewLayout.getScrollWidth(); this.scrollHeight = this._viewLayout.getScrollHeight(); this.visibleRange = this.viewportData.visibleRange; this.bigNumbersDelta = this.viewportData.bigNumbersDelta; const vInfo = this._viewLayout.getCurrentViewport(); this.scrollTop = vInfo.top; this.scrollLeft = vInfo.left; this.viewportWidth = vInfo.width; this.viewportHeight = vInfo.height; } getScrolledTopFromAbsoluteTop(absoluteTop) { return absoluteTop - this.scrollTop; } getVerticalOffsetForLineNumber(lineNumber) { return this._viewLayout.getVerticalOffsetForLineNumber(lineNumber); } getDecorationsInViewport() { return this.viewportData.getDecorationsInViewport(); } } export class RenderingContext extends RestrictedRenderingContext { constructor(viewLayout, viewportData, viewLines) { super(viewLayout, viewportData); this._renderingContextBrand = undefined; this._viewLines = viewLines; } linesVisibleRangesForRange(range, includeNewLines) { return this._viewLines.linesVisibleRangesForRange(range, includeNewLines); } visibleRangeForPosition(position) { return this._viewLines.visibleRangeForPosition(position); } } export class LineVisibleRanges { constructor(outsideRenderedLine, lineNumber, ranges) { this.outsideRenderedLine = outsideRenderedLine; this.lineNumber = lineNumber; this.ranges = ranges; } } export class HorizontalRange { constructor(left, width) { this._horizontalRangeBrand = undefined; this.left = Math.round(left); this.width = Math.round(width); } static from(ranges) { const result = new Array(ranges.length); for (let i = 0, len = ranges.length; i < len; i++) { const range = ranges[i]; result[i] = new HorizontalRange(range.left, range.width); } return result; } toString() { return `[${this.left},${this.width}]`; } } export class FloatHorizontalRange { constructor(left, width) { this._floatHorizontalRangeBrand = undefined; this.left = left; this.width = width; } toString() { return `[${this.left},${this.width}]`; } static compare(a, b) { return a.left - b.left; } } export class HorizontalPosition { constructor(outsideRenderedLine, left) { this.outsideRenderedLine = outsideRenderedLine; this.originalLeft = left; this.left = Math.round(this.originalLeft); } } export class VisibleRanges { constructor(outsideRenderedLine, ranges) { this.outsideRenderedLine = outsideRenderedLine; this.ranges = ranges; } }