Path: blob/main/src/vs/editor/browser/view/viewPart.ts
3294 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';910export abstract class ViewPart extends ViewEventHandler {1112_context: ViewContext;1314constructor(context: ViewContext) {15super();16this._context = context;17this._context.addEventHandler(this);18}1920public override dispose(): void {21this._context.removeEventHandler(this);22super.dispose();23}2425public abstract prepareRender(ctx: RenderingContext): void;26public abstract render(ctx: RestrictedRenderingContext): void;27}2829export const enum PartFingerprint {30None,31ContentWidgets,32OverflowingContentWidgets,33OverflowGuard,34OverlayWidgets,35OverflowingOverlayWidgets,36ScrollableElement,37TextArea,38ViewLines,39Minimap,40ViewLinesGpu41}4243export class PartFingerprints {4445public static write(target: Element | FastDomNode<HTMLElement>, partId: PartFingerprint) {46target.setAttribute('data-mprt', String(partId));47}4849public static read(target: Element): PartFingerprint {50const r = target.getAttribute('data-mprt');51if (r === null) {52return PartFingerprint.None;53}54return parseInt(r, 10);55}5657public static collect(child: Element | null, stopAt: Element): Uint8Array {58const result: PartFingerprint[] = [];59let resultLen = 0;6061while (child && child !== child.ownerDocument.body) {62if (child === stopAt) {63break;64}65if (child.nodeType === child.ELEMENT_NODE) {66result[resultLen++] = this.read(child);67}68child = child.parentElement;69}7071const r = new Uint8Array(resultLen);72for (let i = 0; i < resultLen; i++) {73r[i] = result[resultLen - i - 1];74}75return r;76}77}787980