| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- /*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
- import './marginDecorations.css';
- import { DecorationToRender, DedupOverlay } from '../glyphMargin/glyphMargin.js';
- export class MarginViewLineDecorationsOverlay extends DedupOverlay {
- constructor(context) {
- super();
- this._context = context;
- this._renderResult = null;
- this._context.addEventHandler(this);
- }
- dispose() {
- this._context.removeEventHandler(this);
- this._renderResult = null;
- super.dispose();
- }
- // --- begin event handlers
- onConfigurationChanged(e) {
- 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 marginClassName = d.options.marginClassName;
- if (marginClassName) {
- r[rLen++] = new DecorationToRender(d.range.startLineNumber, d.range.endLineNumber, marginClassName);
- }
- }
- return r;
- }
- prepareRender(ctx) {
- const visibleStartLineNumber = ctx.visibleRange.startLineNumber;
- const visibleEndLineNumber = ctx.visibleRange.endLineNumber;
- const toRender = this._render(visibleStartLineNumber, visibleEndLineNumber, this._getDecorations(ctx));
- 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="cmdr ' + classNames[i] + '" style=""></div>';
- }
- output[lineIndex] = lineOutput;
- }
- this._renderResult = output;
- }
- render(startLineNumber, lineNumber) {
- if (!this._renderResult) {
- return '';
- }
- return this._renderResult[lineNumber - startLineNumber];
- }
- }
|