| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- /*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
- import { TimeoutTimer } from '../../../common/async.js';
- import { Disposable } from '../../../common/lifecycle.js';
- export class ScrollbarVisibilityController extends Disposable {
- constructor(visibility, visibleClassName, invisibleClassName) {
- super();
- this._visibility = visibility;
- this._visibleClassName = visibleClassName;
- this._invisibleClassName = invisibleClassName;
- this._domNode = null;
- this._isVisible = false;
- this._isNeeded = false;
- this._rawShouldBeVisible = false;
- this._shouldBeVisible = false;
- this._revealTimer = this._register(new TimeoutTimer());
- }
- setVisibility(visibility) {
- if (this._visibility !== visibility) {
- this._visibility = visibility;
- this._updateShouldBeVisible();
- }
- }
- // ----------------- Hide / Reveal
- setShouldBeVisible(rawShouldBeVisible) {
- this._rawShouldBeVisible = rawShouldBeVisible;
- this._updateShouldBeVisible();
- }
- _applyVisibilitySetting() {
- if (this._visibility === 2 /* ScrollbarVisibility.Hidden */) {
- return false;
- }
- if (this._visibility === 3 /* ScrollbarVisibility.Visible */) {
- return true;
- }
- return this._rawShouldBeVisible;
- }
- _updateShouldBeVisible() {
- const shouldBeVisible = this._applyVisibilitySetting();
- if (this._shouldBeVisible !== shouldBeVisible) {
- this._shouldBeVisible = shouldBeVisible;
- this.ensureVisibility();
- }
- }
- setIsNeeded(isNeeded) {
- if (this._isNeeded !== isNeeded) {
- this._isNeeded = isNeeded;
- this.ensureVisibility();
- }
- }
- setDomNode(domNode) {
- this._domNode = domNode;
- this._domNode.setClassName(this._invisibleClassName);
- // Now that the flags & the dom node are in a consistent state, ensure the Hidden/Visible configuration
- this.setShouldBeVisible(false);
- }
- ensureVisibility() {
- if (!this._isNeeded) {
- // Nothing to be rendered
- this._hide(false);
- return;
- }
- if (this._shouldBeVisible) {
- this._reveal();
- }
- else {
- this._hide(true);
- }
- }
- _reveal() {
- if (this._isVisible) {
- return;
- }
- this._isVisible = true;
- // The CSS animation doesn't play otherwise
- this._revealTimer.setIfNotSet(() => {
- var _a;
- (_a = this._domNode) === null || _a === void 0 ? void 0 : _a.setClassName(this._visibleClassName);
- }, 0);
- }
- _hide(withFadeAway) {
- var _a;
- this._revealTimer.cancel();
- if (!this._isVisible) {
- return;
- }
- this._isVisible = false;
- (_a = this._domNode) === null || _a === void 0 ? void 0 : _a.setClassName(this._invisibleClassName + (withFadeAway ? ' fade' : ''));
- }
- }
|