Skip to content

Commit 8ce2443

Browse files
authored
Merge pull request microsoft#189248 from microsoft/tyriar/fade_unfocused
Implement unfocused view dimming
2 parents f0e1633 + 97030b0 commit 8ce2443

File tree

3 files changed

+58
-0
lines changed

3 files changed

+58
-0
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import { NotificationFocusedContext } from 'vs/workbench/common/contextkeys';
2929
import { IAccessibleViewService, AccessibleViewService, IAccessibleContentProvider, IAccessibleViewOptions, AccessibleViewType } from 'vs/workbench/contrib/accessibility/browser/accessibleView';
3030
import { IHoverService } from 'vs/workbench/services/hover/browser/hover';
3131
import { alert } from 'vs/base/browser/ui/aria/aria';
32+
import { UnfocusedViewDimmingContribution } from 'vs/workbench/contrib/accessibility/browser/unfocusedViewDimmingContribution';
3233

3334
registerAccessibilityConfiguration();
3435
registerSingleton(IAccessibleViewService, AccessibleViewService, InstantiationType.Delayed);
@@ -101,6 +102,7 @@ class EditorAccessibilityHelpContribution extends Disposable {
101102

102103
const workbenchRegistry = Registry.as<IWorkbenchContributionsRegistry>(WorkbenchExtensions.Workbench);
103104
workbenchRegistry.registerWorkbenchContribution(EditorAccessibilityHelpContribution, LifecyclePhase.Eventually);
105+
workbenchRegistry.registerWorkbenchContribution(UnfocusedViewDimmingContribution, LifecyclePhase.Restored);
104106

105107

106108

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ import { RawContextKey } from 'vs/platform/contextkey/common/contextkey';
1515
export const accessibilityHelpIsShown = new RawContextKey<boolean>('accessibilityHelpIsShown', false, true);
1616
export const accessibleViewIsShown = new RawContextKey<boolean>('accessibleViewIsShown', false, true);
1717

18+
export const enum AccessibilitySettingId {
19+
UnfocusedViewOpacity = 'accessibility.unfocusedViewOpacity'
20+
}
21+
1822
export const enum AccessibilityVerbositySettingId {
1923
Terminal = 'accessibility.verbosity.terminal',
2024
DiffEditor = 'accessibility.verbosity.diffEditor',
@@ -69,6 +73,14 @@ const configuration: IConfigurationNode = {
6973
[AccessibilityVerbositySettingId.Notification]: {
7074
description: localize('verbosity.notification', 'Provide information about how to open the notification in an accessible view.'),
7175
...baseProperty
76+
},
77+
[AccessibilitySettingId.UnfocusedViewOpacity]: {
78+
description: localize('unfocusedViewOpacity', 'The opacity percentage (0.2 to 1.0) to use for unfocused editors and terminals.'),
79+
type: 'number',
80+
minimum: 0.2,
81+
maximum: 1,
82+
default: 1,
83+
tags: ['accessibility']
7284
}
7385
}
7486
};
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
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 { Event } from 'vs/base/common/event';
7+
import { Disposable, toDisposable } from 'vs/base/common/lifecycle';
8+
import { clamp } from 'vs/base/common/numbers';
9+
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
10+
import { IWorkbenchContribution } from 'vs/workbench/common/contributions';
11+
import { AccessibilitySettingId } from 'vs/workbench/contrib/accessibility/browser/accessibilityContribution';
12+
13+
export class UnfocusedViewDimmingContribution extends Disposable implements IWorkbenchContribution {
14+
constructor(
15+
@IConfigurationService configurationService: IConfigurationService,
16+
) {
17+
super();
18+
19+
const elStyle = document.createElement('style');
20+
elStyle.className = 'accessibilityUnfocusedViewOpacity';
21+
document.head.appendChild(elStyle);
22+
this._register(toDisposable(() => elStyle.remove()));
23+
24+
this._register(Event.runAndSubscribe(configurationService.onDidChangeConfiguration, e => {
25+
if (e && !e.affectsConfiguration(AccessibilitySettingId.UnfocusedViewOpacity)) {
26+
return;
27+
}
28+
29+
let opacity: number;
30+
const opacityConfig = configurationService.getValue(AccessibilitySettingId.UnfocusedViewOpacity);
31+
if (typeof opacityConfig !== 'number') {
32+
opacity = 1;
33+
} else {
34+
opacity = clamp(opacityConfig, 0.2, 1);
35+
}
36+
37+
const rules = new Set<string>();
38+
rules.add(`.monaco-workbench .terminal.xterm:not(.focus) { filter: opacity(${opacity}); }`);
39+
rules.add(`.monaco-workbench .editor-instance .monaco-editor:not(.focused) { filter: opacity(${opacity}); }`);
40+
41+
elStyle.textContent = [...rules].join('\n');
42+
}));
43+
}
44+
}

0 commit comments

Comments
 (0)