From 06fd1c548904023f90fc8d293afea052a75531eb Mon Sep 17 00:00:00 2001 From: Juan Campa Date: Mon, 23 Dec 2024 18:36:55 -0500 Subject: [PATCH] Changes to support rendering the VSCode text editor with egui --- src/vs/editor/browser/viewParts/lines/viewLine.ts | 8 +++++++- src/vs/editor/browser/viewParts/lines/viewLines.ts | 5 +++++ src/vs/editor/common/viewLayout/viewLineRenderer.ts | 2 +- .../workbench/services/commands/common/commandService.ts | 9 +++++++++ 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/vs/editor/browser/viewParts/lines/viewLine.ts b/src/vs/editor/browser/viewParts/lines/viewLine.ts index e4174a2f2866a..7c04c52789278 100644 --- a/src/vs/editor/browser/viewParts/lines/viewLine.ts +++ b/src/vs/editor/browser/viewParts/lines/viewLine.ts @@ -12,12 +12,13 @@ import { StringBuilder } from 'vs/editor/common/core/stringBuilder'; import { IEditorConfiguration } from 'vs/editor/common/config/editorConfiguration'; import { FloatHorizontalRange, VisibleRanges } from 'vs/editor/browser/view/renderingContext'; import { LineDecoration } from 'vs/editor/common/viewLayout/lineDecorations'; -import { CharacterMapping, ForeignElementType, RenderLineInput, renderViewLine, LineRange, DomPosition } from 'vs/editor/common/viewLayout/viewLineRenderer'; +import { CharacterMapping, ForeignElementType, RenderLineInput, renderViewLine, LineRange, DomPosition, resolveRenderLineInput } from 'vs/editor/common/viewLayout/viewLineRenderer'; import { ViewportData } from 'vs/editor/common/viewLayout/viewLinesViewportData'; import { InlineDecorationType } from 'vs/editor/common/viewModel'; import { ColorScheme, isHighContrast } from 'vs/platform/theme/common/theme'; import { EditorOption, EditorFontLigatures } from 'vs/editor/common/config/editorOptions'; import { DomReadingContext } from 'vs/editor/browser/viewParts/lines/domReadingContext'; +import { CommandService } from 'vs/workbench/services/commands/common/commandService'; const canUseFastRenderedViewLine = (function () { if (platform.isNative) { @@ -227,6 +228,9 @@ export class ViewLine implements IVisibleLine { sb.appendString(ViewLine.CLASS_NAME); sb.appendString('">'); + // MEMBRANE: Use MessagePort + CommandService.getInstance().executeCommand('membrane.textEditor.onLineChanged', lineNumber, deltaTop, resolveRenderLineInput(renderLineInput)); + const output = renderViewLine(renderLineInput, sb); sb.appendString(''); @@ -259,6 +263,8 @@ export class ViewLine implements IVisibleLine { if (this._renderedViewLine && this._renderedViewLine.domNode) { this._renderedViewLine.domNode.setTop(deltaTop); this._renderedViewLine.domNode.setHeight(this._options.lineHeight); + // MEMBRANE: Use MessagePort + CommandService.getInstance().executeCommand('membrane.textEditor.onLineMoved', lineNumber, deltaTop); } } diff --git a/src/vs/editor/browser/viewParts/lines/viewLines.ts b/src/vs/editor/browser/viewParts/lines/viewLines.ts index 220ef98725529..6b68127142b27 100644 --- a/src/vs/editor/browser/viewParts/lines/viewLines.ts +++ b/src/vs/editor/browser/viewParts/lines/viewLines.ts @@ -24,6 +24,7 @@ import * as viewEvents from 'vs/editor/common/viewEvents'; import { ViewportData } from 'vs/editor/common/viewLayout/viewLinesViewportData'; import { Viewport } from 'vs/editor/common/viewModel'; import { ViewContext } from 'vs/editor/common/viewModel/viewContext'; +import { CommandService } from 'vs/workbench/services/commands/common/commandService'; class LastRenderedData { @@ -261,9 +262,11 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost, return this._visibleLines.onLinesChanged(e); } public override onLinesDeleted(e: viewEvents.ViewLinesDeletedEvent): boolean { + CommandService.getInstance().executeCommand('membrane.textEditor.onLinesDeleted', e.fromLineNumber, e.toLineNumber - e.fromLineNumber + 1); return this._visibleLines.onLinesDeleted(e); } public override onLinesInserted(e: viewEvents.ViewLinesInsertedEvent): boolean { + CommandService.getInstance().executeCommand('membrane.textEditor.onLinesInserted', e.fromLineNumber, e.toLineNumber - e.fromLineNumber + 1); return this._visibleLines.onLinesInserted(e); } public override onRevealRangeRequest(e: viewEvents.ViewRevealRangeRequestEvent): boolean { @@ -665,6 +668,8 @@ export class ViewLines extends ViewPart implements IVisibleLinesHost, const adjustedScrollTop = this._context.viewLayout.getCurrentScrollTop() - viewportData.bigNumbersDelta; this._linesContent.setTop(-adjustedScrollTop); this._linesContent.setLeft(-this._context.viewLayout.getCurrentScrollLeft()); + + CommandService.getInstance().executeCommand('membrane.textEditor.onScrollChanged', adjustedScrollTop, this._context.viewLayout.getCurrentScrollLeft()); } // --- width diff --git a/src/vs/editor/common/viewLayout/viewLineRenderer.ts b/src/vs/editor/common/viewLayout/viewLineRenderer.ts index 0e94382f9a8ae..cb437603d1dd5 100644 --- a/src/vs/editor/common/viewLayout/viewLineRenderer.ts +++ b/src/vs/editor/common/viewLayout/viewLineRenderer.ts @@ -439,7 +439,7 @@ class ResolvedRenderLineInput { } } -function resolveRenderLineInput(input: RenderLineInput): ResolvedRenderLineInput { +export function resolveRenderLineInput(input: RenderLineInput): ResolvedRenderLineInput { const lineContent = input.lineContent; let isOverflowing: boolean; diff --git a/src/vs/workbench/services/commands/common/commandService.ts b/src/vs/workbench/services/commands/common/commandService.ts index 8a719346c3f58..92b38a8b8e2c2 100644 --- a/src/vs/workbench/services/commands/common/commandService.ts +++ b/src/vs/workbench/services/commands/common/commandService.ts @@ -25,6 +25,12 @@ export class CommandService extends Disposable implements ICommandService { private readonly _onDidExecuteCommand: Emitter = new Emitter(); public readonly onDidExecuteCommand: Event = this._onDidExecuteCommand.event; + // MEMBRANE: easy access to the singleton + private static _instance: CommandService; + public static getInstance(): ICommandService { + return CommandService._instance; + } + constructor( @IInstantiationService private readonly _instantiationService: IInstantiationService, @IExtensionService private readonly _extensionService: IExtensionService, @@ -33,6 +39,9 @@ export class CommandService extends Disposable implements ICommandService { super(); this._extensionService.whenInstalledExtensionsRegistered().then(value => this._extensionHostIsReady = value); this._starActivation = null; + + // MEMBRANE: easy access to the singleton + CommandService._instance = this; } private _activateStar(): Promise {