Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/base/browser/ui/hover/hoverDelegateFactory.ts
3296 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { IHoverDelegate, IScopedHoverDelegate } from './hoverDelegate.js';
7
import { Lazy } from '../../../common/lazy.js';
8
9
const nullHoverDelegateFactory = () => ({
10
get delay(): number { return -1; },
11
dispose: () => { },
12
showHover: () => { return undefined; },
13
});
14
15
let hoverDelegateFactory: (placement: 'mouse' | 'element', enableInstantHover: boolean) => IScopedHoverDelegate = nullHoverDelegateFactory;
16
const defaultHoverDelegateMouse = new Lazy<IHoverDelegate>(() => hoverDelegateFactory('mouse', false));
17
const defaultHoverDelegateElement = new Lazy<IHoverDelegate>(() => hoverDelegateFactory('element', false));
18
19
// TODO: Remove when getDefaultHoverDelegate is no longer used
20
export function setHoverDelegateFactory(hoverDelegateProvider: ((placement: 'mouse' | 'element', enableInstantHover: boolean) => IScopedHoverDelegate)): void {
21
hoverDelegateFactory = hoverDelegateProvider;
22
}
23
24
// TODO: Refine type for use in new IHoverService interface
25
export function getDefaultHoverDelegate(placement: 'mouse' | 'element'): IHoverDelegate {
26
if (placement === 'element') {
27
return defaultHoverDelegateElement.value;
28
}
29
return defaultHoverDelegateMouse.value;
30
}
31
32
// TODO: Create equivalent in IHoverService
33
export function createInstantHoverDelegate(): IScopedHoverDelegate {
34
// Creates a hover delegate with instant hover enabled.
35
// This hover belongs to the consumer and requires the them to dispose it.
36
// Instant hover only makes sense for 'element' placement.
37
return hoverDelegateFactory('element', true);
38
}
39
40