| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- /*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
- import './linesDecorations.css';
- import { DecorationToRender, DedupOverlay } from '../glyphMargin/glyphMargin.js';
- export class LinesDecorationsOverlay extends DedupOverlay {
- constructor(context) {
- super();
- this._context = context;
- const options = this._context.configuration.options;
- const layoutInfo = options.get(133 /* EditorOption.layoutInfo */);
- this._decorationsLeft = layoutInfo.decorationsLeft;
- this._decorationsWidth = layoutInfo.decorationsWidth;
- this._renderResult = null;
- this._context.addEventHandler(this);
- }
- dispose() {
- this._context.removeEventHandler(this);
- this._renderResult = null;
- super.dispose();
- }
- // --- begin event handlers
- onConfigurationChanged(e) {
- const options = this._context.configuration.options;
- const layoutInfo = options.get(133 /* EditorOption.layoutInfo */);
- this._decorationsLeft = layoutInfo.decorationsLeft;
- this._decorationsWidth = layoutInfo.decorationsWidth;
- return true;
- }
- onDecorationsChanged(e) {
- return true;
- }
- onFlushed(e) {
- return true;
- }
- onLinesChanged(e) {
- return true;
- }
- onLinesDeleted(e) {
- return true;
- }
- onLinesInserted(e) {
- return true;
- }
- onScrollChanged(e) {
- return e.scrollTopChanged;
- }
- onZonesChanged(e) {
- return true;
- }
- // --- end event handlers
- _getDecorations(ctx) {
- const decorations = ctx.getDecorationsInViewport();
- const r = [];
- let rLen = 0;
- for (let i = 0, len = decorations.length; i < len; i++) {
- const d = decorations[i];
- const linesDecorationsClassName = d.options.linesDecorationsClassName;
- if (linesDecorationsClassName) {
- r[rLen++] = new DecorationToRender(d.range.startLineNumber, d.range.endLineNumber, linesDecorationsClassName);
- }
- const firstLineDecorationClassName = d.options.firstLineDecorationClassName;
- if (firstLineDecorationClassName) {
- r[rLen++] = new DecorationToRender(d.range.startLineNumber, d.range.startLineNumber, firstLineDecorationClassName);
- }
- }
- return r;
- }
- prepareRender(ctx) {
- const visibleStartLineNumber = ctx.visibleRange.startLineNumber;
- const visibleEndLineNumber = ctx.visibleRange.endLineNumber;
- const toRender = this._render(visibleStartLineNumber, visibleEndLineNumber, this._getDecorations(ctx));
- const left = this._decorationsLeft.toString();
- const width = this._decorationsWidth.toString();
- const common = '" style="left:' + left + 'px;width:' + width + 'px;"></div>';
- const output = [];
- for (let lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {
- const lineIndex = lineNumber - visibleStartLineNumber;
- const classNames = toRender[lineIndex];
- let lineOutput = '';
- for (let i = 0, len = classNames.length; i < len; i++) {
- lineOutput += '<div class="cldr ' + classNames[i] + common;
- }
- output[lineIndex] = lineOutput;
- }
- this._renderResult = output;
- }
- render(startLineNumber, lineNumber) {
- if (!this._renderResult) {
- return '';
- }
- return this._renderResult[lineNumber - startLineNumber];
- }
- }
|