monaco-editor
Version:
A browser based code editor
102 lines (101 loc) • 3.8 kB
JavaScript
/*---------------------------------------------------------------------------------------------
* 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, includeViewZones) {
return this._viewLayout.getVerticalOffsetForLineNumber(lineNumber, includeViewZones);
}
getVerticalOffsetAfterLineNumber(lineNumber, includeViewZones) {
return this._viewLayout.getVerticalOffsetAfterLineNumber(lineNumber, includeViewZones);
}
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,
/**
* Indicates if the requested range does not end in this line, but continues on the next line.
*/
continuesOnNextLine) {
this.outsideRenderedLine = outsideRenderedLine;
this.lineNumber = lineNumber;
this.ranges = ranges;
this.continuesOnNextLine = continuesOnNextLine;
}
}
export class HorizontalRange {
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;
}
constructor(left, width) {
this._horizontalRangeBrand = undefined;
this.left = Math.round(left);
this.width = Math.round(width);
}
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;
}
}