From e45fddacfc33e9e628bfcad7cdeee890ba935061 Mon Sep 17 00:00:00 2001 From: Aiday Marlen Kyzy Date: Fri, 11 Jul 2025 10:20:55 +0000 Subject: [PATCH] relayout color picker on hover content change (#255335) relayout color picker on content change --- .../colorPickerParts/colorPickerSaturationBox.ts | 4 ---- .../hoverColorPicker/hoverColorPickerParticipant.ts | 4 ++++ .../editor/contrib/hover/browser/contentHoverWidget.ts | 10 +++++++--- .../contrib/hover/browser/contentHoverWidgetWrapper.ts | 9 +++++++-- src/vs/editor/contrib/hover/browser/hoverTypes.ts | 1 + 5 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerSaturationBox.ts b/src/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerSaturationBox.ts index feb65929064..28cb4f4f869 100644 --- a/src/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerSaturationBox.ts +++ b/src/vs/editor/contrib/colorPicker/browser/colorPickerParts/colorPickerSaturationBox.ts @@ -53,10 +53,6 @@ export class SaturationBox extends Disposable { return this._domNode; } - public get canvas() { - return this._canvas; - } - private onPointerDown(e: PointerEvent): void { if (!e.target || !(e.target instanceof Element)) { return; diff --git a/src/vs/editor/contrib/colorPicker/browser/hoverColorPicker/hoverColorPickerParticipant.ts b/src/vs/editor/contrib/colorPicker/browser/hoverColorPicker/hoverColorPickerParticipant.ts index c850d374443..964de485bfc 100644 --- a/src/vs/editor/contrib/colorPicker/browser/hoverColorPicker/hoverColorPickerParticipant.ts +++ b/src/vs/editor/contrib/colorPicker/browser/hoverColorPicker/hoverColorPickerParticipant.ts @@ -156,6 +156,10 @@ export class HoverColorPickerParticipant implements IEditorHoverParticipant()); public readonly onDidScroll = this._onDidScroll.event; + private readonly _onContentsChanged = this._register(new Emitter()); + public readonly onContentsChanged = this._onContentsChanged.event; + public get isVisibleFromKeyboard(): boolean { return (this._renderedHover?.source === HoverStartSource.Keyboard); } @@ -311,7 +314,7 @@ export class ContentHoverWidget extends ResizableContentWidget { this._setRenderedHover(renderedHover); this._updateFont(); this._updateContent(renderedHover.domNode); - this.onContentsChanged(); + this.handleContentsChanged(); // Simply force a synchronous render on the editor // such that the widget does not really render with left = '0px' this._editor.render(); @@ -340,7 +343,7 @@ export class ContentHoverWidget extends ResizableContentWidget { // See https://github.com/microsoft/vscode/issues/140339 // TODO: Doing a second layout of the hover after force rendering the editor - this.onContentsChanged(); + this.handleContentsChanged(); if (renderedHover.shouldFocus) { this._hover.containerDomNode.focus(); } @@ -399,7 +402,7 @@ export class ContentHoverWidget extends ResizableContentWidget { this._resizableNode.minSize = new dom.Dimension(width, this._minimumSize.height); } - public onContentsChanged(): void { + public handleContentsChanged(): void { this._removeConstraintsRenderNormally(); const contentsDomNode = this._hover.contentsDomNode; @@ -420,6 +423,7 @@ export class ContentHoverWidget extends ResizableContentWidget { this._positionPreference = this._findPositionPreference(widgetHeight, this._renderedHover.showAtPosition); } this._layoutContentWidget(); + this._onContentsChanged.fire(); } public focus(): void { diff --git a/src/vs/editor/contrib/hover/browser/contentHoverWidgetWrapper.ts b/src/vs/editor/contrib/hover/browser/contentHoverWidgetWrapper.ts index 1be3324dffa..305ef15f35e 100644 --- a/src/vs/editor/contrib/hover/browser/contentHoverWidgetWrapper.ts +++ b/src/vs/editor/contrib/hover/browser/contentHoverWidgetWrapper.ts @@ -61,6 +61,9 @@ export class ContentHoverWidgetWrapper extends Disposable implements IHoverWidge this._register(this._contentHoverWidget.onDidScroll((e) => { this._participants.forEach(participant => participant.handleScroll?.(e)); })); + this._register(this._contentHoverWidget.onContentsChanged(() => { + this._participants.forEach(participant => participant.handleContentsChanged?.()); + })); return participants; } @@ -83,6 +86,9 @@ export class ContentHoverWidgetWrapper extends Disposable implements IHoverWidge this._setCurrentResult(this._currentResult); // render again } })); + this._register(this._contentHoverWidget.onContentsChanged(() => { + this._onContentsChanged.fire(); + })); } /** @@ -228,8 +234,7 @@ export class ContentHoverWidgetWrapper extends Disposable implements IHoverWidge this.hide(); }; const onContentsChanged = () => { - this._onContentsChanged.fire(); - this._contentHoverWidget.onContentsChanged(); + this._contentHoverWidget.handleContentsChanged(); }; const setMinimumDimensions = (dimensions: dom.Dimension) => { this._contentHoverWidget.setMinimumDimensions(dimensions); diff --git a/src/vs/editor/contrib/hover/browser/hoverTypes.ts b/src/vs/editor/contrib/hover/browser/hoverTypes.ts index 82fe9eebf99..5f92db9c9b2 100644 --- a/src/vs/editor/contrib/hover/browser/hoverTypes.ts +++ b/src/vs/editor/contrib/hover/browser/hoverTypes.ts @@ -169,6 +169,7 @@ export interface IEditorHoverParticipant { getAccessibleContent(hoverPart: T): string; handleResize?(): void; handleHide?(): void; + handleContentsChanged?(): void; handleScroll?(e: ScrollEvent): void; }