Skip to content

Commit 98cb279

Browse files
committed
allow passing in info
1 parent fa35e8d commit 98cb279

File tree

4 files changed

+24
-12
lines changed

4 files changed

+24
-12
lines changed

src/vs/editor/contrib/hover/browser/contentHover.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,17 +24,26 @@ import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
2424
import { Context as SuggestContext } from 'vs/editor/contrib/suggest/browser/suggest';
2525
import { AsyncIterableObject } from 'vs/base/common/async';
2626
import { EditorContextKeys } from 'vs/editor/common/editorContextKeys';
27-
import { withNullAsUndefined } from 'vs/base/common/types';
2827

2928
const $ = dom.$;
3029

30+
export interface IHoverElementInfo {
31+
dimensions?: { width: number; height: number }; content?: string;
32+
}
33+
3134
export class ContentHoverController extends Disposable {
3235

3336
private readonly _participants: IEditorHoverParticipant[];
3437

3538
private readonly _widget = this._register(this._instantiationService.createInstance(ContentHoverWidget, this._editor));
3639

37-
getWidgetContents(): string | undefined { return withNullAsUndefined(this._widget.getDomNode()?.textContent); }
40+
getWidgetInfo(): IHoverElementInfo | undefined {
41+
const node = this._widget.getDomNode();
42+
if (!node.textContent) {
43+
return undefined;
44+
}
45+
return { content: node.textContent, dimensions: { width: node.clientWidth, height: node.clientHeight } };
46+
}
3847

3948
private readonly _computer: ContentHoverComputer;
4049
private readonly _hoverOperation: HoverOperation<IHoverPart>;

src/vs/editor/contrib/hover/browser/hover.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import { EditorContextKeys } from 'vs/editor/common/editorContextKeys';
1515
import { ILanguageService } from 'vs/editor/common/languages/language';
1616
import { GotoDefinitionAtPositionEditorContribution } from 'vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition';
1717
import { HoverStartMode, HoverStartSource } from 'vs/editor/contrib/hover/browser/hoverOperation';
18-
import { ContentHoverWidget, ContentHoverController } from 'vs/editor/contrib/hover/browser/contentHover';
18+
import { ContentHoverWidget, ContentHoverController, IHoverElementInfo } from 'vs/editor/contrib/hover/browser/contentHover';
1919
import { MarginHoverWidget } from 'vs/editor/contrib/hover/browser/marginHover';
2020
import * as nls from 'vs/nls';
2121
import { AccessibilitySupport } from 'vs/platform/accessibility/common/accessibility';
@@ -41,7 +41,7 @@ export class ModesHoverController implements IEditorContribution {
4141

4242
private _contentWidget: ContentHoverController | null;
4343

44-
getWidgetContents(): string | undefined { return this._contentWidget?.getWidgetContents(); }
44+
getWidgetInfo(): IHoverElementInfo | undefined { return this._contentWidget?.getWidgetInfo(); }
4545

4646
private _glyphWidget: MarginHoverWidget | null;
4747

src/vs/workbench/contrib/accessibility/browser/accessibility.contribution.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -138,12 +138,12 @@ class HoverAccessibileViewContribution extends Disposable {
138138
return false;
139139
}
140140
const controller = ModesHoverController.get(editor);
141-
const hoverContent = withNullAsUndefined(controller?.getWidgetContents());
142-
if (!controller || !hoverContent) {
141+
const hoverInfo = withNullAsUndefined(controller?.getWidgetInfo());
142+
if (!controller || !hoverInfo?.content) {
143143
return false;
144144
}
145145
function provideContent(): string {
146-
return hoverContent!;
146+
return hoverInfo?.content!;
147147
}
148148
const provider = accessibleViewService.registerProvider({
149149
id: 'hover',
@@ -152,7 +152,9 @@ class HoverAccessibileViewContribution extends Disposable {
152152
provider.dispose();
153153
controller.focus();
154154
},
155-
options: { ariaLabel: localize('hoverAccessibleView', "Hover Accessible View"), language: 'typescript', type: AccessibleViewType.View }
155+
options: {
156+
ariaLabel: localize('hoverAccessibleView', "Hover Accessible View"), language: 'typescript', type: AccessibleViewType.View, dimensions: controller.getWidgetInfo()!.dimensions
157+
}
156158
});
157159
accessibleViewService.show('hover');
158160
return true;

src/vs/workbench/contrib/accessibility/browser/accessibleView.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ export interface IAccessibleViewOptions {
5454
readMoreUrl?: string;
5555
language?: string;
5656
type: AccessibleViewType;
57+
dimensions?: { width: number; height: number };
5758
}
5859

5960
class AccessibleView extends Disposable {
@@ -139,17 +140,17 @@ class AccessibleView extends Disposable {
139140
provider.onKeyDown?.(e);
140141
}));
141142
this._register(this._editorWidget.onDidBlurEditorText(() => this._contextViewService.hideContextView()));
142-
this._register(this._editorWidget.onDidContentSizeChange(() => this._layout()));
143+
this._register(this._editorWidget.onDidContentSizeChange(() => this._layout(provider)));
143144
this._editorWidget.updateOptions({ ariaLabel: provider.options.ariaLabel });
144145
this._editorWidget.focus();
145146
});
146147
return toDisposable(() => provider.onClose());
147148
}
148149

149-
private _layout(): void {
150+
private _layout(provider: IAccessibleContentProvider): void {
150151
const windowWidth = window.innerWidth;
151-
const width = windowWidth * DIMENSION_DEFAULT.WIDTH;
152-
this._editorWidget.layout({ width, height: this._editorWidget.getContentHeight() });
152+
const width = provider.options.dimensions?.width || windowWidth * DIMENSION_DEFAULT.WIDTH;
153+
this._editorWidget.layout({ width, height: provider.options.dimensions?.height || this._editorWidget.getContentHeight() });
153154
const left = Math.round((windowWidth - width) / 2);
154155
this._editorContainer.style.left = `${left}px`;
155156
}

0 commit comments

Comments
 (0)