Path: blob/main/src/vs/editor/browser/view/viewPart.ts
5221 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { FastDomNode } from '../../../base/browser/fastDomNode.js';6import { RenderingContext, RestrictedRenderingContext } from './renderingContext.js';7import { ViewContext } from '../../common/viewModel/viewContext.js';8import { ViewEventHandler } from '../../common/viewEventHandler.js';9import { ViewportData } from '../../common/viewLayout/viewLinesViewportData.js';1011export abstract class ViewPart extends ViewEventHandler {1213_context: ViewContext;1415constructor(context: ViewContext) {16super();17this._context = context;18this._context.addEventHandler(this);19}2021public override dispose(): void {22this._context.removeEventHandler(this);23super.dispose();24}2526public onBeforeRender(viewportData: ViewportData): void {27}2829public abstract prepareRender(ctx: RenderingContext): void;30public abstract render(ctx: RestrictedRenderingContext): void;31}3233export const enum PartFingerprint {34None,35ContentWidgets,36OverflowingContentWidgets,37OverflowGuard,38OverlayWidgets,39OverflowingOverlayWidgets,40ScrollableElement,41TextArea,42ViewLines,43Minimap,44ViewLinesGpu45}4647export class PartFingerprints {4849public static write(target: Element | FastDomNode<HTMLElement>, partId: PartFingerprint) {50target.setAttribute('data-mprt', String(partId));51}5253public static read(target: Element): PartFingerprint {54const r = target.getAttribute('data-mprt');55if (r === null) {56return PartFingerprint.None;57}58return parseInt(r, 10);59}6061public static collect(child: Element | null, stopAt: Element): Uint8Array {62const result: PartFingerprint[] = [];63let resultLen = 0;6465while (child && child !== child.ownerDocument.body) {66if (child === stopAt) {67break;68}69if (child.nodeType === child.ELEMENT_NODE) {70result[resultLen++] = this.read(child);71}72child = child.parentElement;73}7475const r = new Uint8Array(resultLen);76for (let i = 0; i < resultLen; i++) {77r[i] = result[resultLen - i - 1];78}79return r;80}81}828384