UNPKG

monaco-editor-core

Version:

A browser based code editor

64 lines (63 loc) 3.04 kB
/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import './margin.css'; import { createFastDomNode } from '../../../../base/browser/fastDomNode.js'; import { ViewPart } from '../../view/viewPart.js'; export class Margin extends ViewPart { static { this.CLASS_NAME = 'glyph-margin'; } static { this.OUTER_CLASS_NAME = 'margin'; } constructor(context) { super(context); const options = this._context.configuration.options; const layoutInfo = options.get(146 /* EditorOption.layoutInfo */); this._canUseLayerHinting = !options.get(32 /* EditorOption.disableLayerHinting */); this._contentLeft = layoutInfo.contentLeft; this._glyphMarginLeft = layoutInfo.glyphMarginLeft; this._glyphMarginWidth = layoutInfo.glyphMarginWidth; this._domNode = createFastDomNode(document.createElement('div')); this._domNode.setClassName(Margin.OUTER_CLASS_NAME); this._domNode.setPosition('absolute'); this._domNode.setAttribute('role', 'presentation'); this._domNode.setAttribute('aria-hidden', 'true'); this._glyphMarginBackgroundDomNode = createFastDomNode(document.createElement('div')); this._glyphMarginBackgroundDomNode.setClassName(Margin.CLASS_NAME); this._domNode.appendChild(this._glyphMarginBackgroundDomNode); } dispose() { super.dispose(); } getDomNode() { return this._domNode; } // --- begin event handlers onConfigurationChanged(e) { const options = this._context.configuration.options; const layoutInfo = options.get(146 /* EditorOption.layoutInfo */); this._canUseLayerHinting = !options.get(32 /* EditorOption.disableLayerHinting */); this._contentLeft = layoutInfo.contentLeft; this._glyphMarginLeft = layoutInfo.glyphMarginLeft; this._glyphMarginWidth = layoutInfo.glyphMarginWidth; return true; } onScrollChanged(e) { return super.onScrollChanged(e) || e.scrollTopChanged; } // --- end event handlers prepareRender(ctx) { // Nothing to read } render(ctx) { this._domNode.setLayerHinting(this._canUseLayerHinting); this._domNode.setContain('strict'); const adjustedScrollTop = ctx.scrollTop - ctx.bigNumbersDelta; this._domNode.setTop(-adjustedScrollTop); const height = Math.min(ctx.scrollHeight, 1000000); this._domNode.setHeight(height); this._domNode.setWidth(this._contentLeft); this._glyphMarginBackgroundDomNode.setLeft(this._glyphMarginLeft); this._glyphMarginBackgroundDomNode.setWidth(this._glyphMarginWidth); this._glyphMarginBackgroundDomNode.setHeight(height); } }