提交 4163ea20 编写于 作者: J Joao Moreno

fixes #78228

上级 bdd162c5
...@@ -549,11 +549,11 @@ class LeafNode implements ISplitView, IDisposable { ...@@ -549,11 +549,11 @@ class LeafNode implements ISplitView, IDisposable {
} }
} }
setVisible(visible: boolean): void { setVisible(visible: boolean, cachedVisibleSize?: number): void {
if (visible) { if (visible) {
this._cachedVisibleSize = undefined; this._cachedVisibleSize = undefined;
} else { } else {
this._cachedVisibleSize = this._size; this._cachedVisibleSize = typeof cachedVisibleSize === 'number' ? cachedVisibleSize : this._size;
} }
if (this.view.setVisible) { if (this.view.setVisible) {
......
...@@ -49,7 +49,7 @@ export interface IView { ...@@ -49,7 +49,7 @@ export interface IView {
readonly priority?: LayoutPriority; readonly priority?: LayoutPriority;
readonly snap?: boolean; readonly snap?: boolean;
layout(size: number, orientation: Orientation): void; layout(size: number, orientation: Orientation): void;
setVisible?(visible: boolean): void; setVisible?(visible: boolean, cachedVisibleSize?: number): void;
} }
interface ISashEvent { interface ISashEvent {
...@@ -79,7 +79,7 @@ abstract class ViewItem { ...@@ -79,7 +79,7 @@ abstract class ViewItem {
return typeof this._cachedVisibleSize === 'undefined'; return typeof this._cachedVisibleSize === 'undefined';
} }
set visible(visible: boolean) { setVisible(visible: boolean, size?: number): void {
if (visible === this.visible) { if (visible === this.visible) {
return; return;
} }
...@@ -88,14 +88,14 @@ abstract class ViewItem { ...@@ -88,14 +88,14 @@ abstract class ViewItem {
this.size = clamp(this._cachedVisibleSize!, this.viewMinimumSize, this.viewMaximumSize); this.size = clamp(this._cachedVisibleSize!, this.viewMinimumSize, this.viewMaximumSize);
this._cachedVisibleSize = undefined; this._cachedVisibleSize = undefined;
} else { } else {
this._cachedVisibleSize = this.size; this._cachedVisibleSize = typeof size === 'number' ? size : this.size;
this.size = 0; this.size = 0;
} }
dom.toggleClass(this.container, 'visible', visible); dom.toggleClass(this.container, 'visible', visible);
if (this.view.setVisible) { if (this.view.setVisible) {
this.view.setVisible(visible); this.view.setVisible(visible, this._cachedVisibleSize);
} }
} }
...@@ -161,6 +161,7 @@ interface ISashItem { ...@@ -161,6 +161,7 @@ interface ISashItem {
interface ISashDragSnapState { interface ISashDragSnapState {
readonly index: number; readonly index: number;
readonly limitDelta: number; readonly limitDelta: number;
readonly size: number;
} }
interface ISashDragState { interface ISashDragState {
...@@ -453,7 +454,7 @@ export class SplitView extends Disposable { ...@@ -453,7 +454,7 @@ export class SplitView extends Disposable {
} }
const viewItem = this.viewItems[index]; const viewItem = this.viewItems[index];
viewItem.visible = visible; viewItem.setVisible(visible);
this.distributeEmptySpace(index); this.distributeEmptySpace(index);
this.layoutViews(); this.layoutViews();
...@@ -552,7 +553,8 @@ export class SplitView extends Disposable { ...@@ -552,7 +553,8 @@ export class SplitView extends Disposable {
snapBefore = { snapBefore = {
index: snapBeforeIndex, index: snapBeforeIndex,
limitDelta: viewItem.visible ? minDelta - halfSize : minDelta + halfSize limitDelta: viewItem.visible ? minDelta - halfSize : minDelta + halfSize,
size: viewItem.size
}; };
} }
...@@ -562,7 +564,8 @@ export class SplitView extends Disposable { ...@@ -562,7 +564,8 @@ export class SplitView extends Disposable {
snapAfter = { snapAfter = {
index: snapAfterIndex, index: snapAfterIndex,
limitDelta: viewItem.visible ? maxDelta + halfSize : maxDelta - halfSize limitDelta: viewItem.visible ? maxDelta + halfSize : maxDelta - halfSize,
size: viewItem.size
}; };
} }
} }
...@@ -740,14 +743,14 @@ export class SplitView extends Disposable { ...@@ -740,14 +743,14 @@ export class SplitView extends Disposable {
const snapView = this.viewItems[snapBefore.index]; const snapView = this.viewItems[snapBefore.index];
const visible = delta >= snapBefore.limitDelta; const visible = delta >= snapBefore.limitDelta;
snapped = visible !== snapView.visible; snapped = visible !== snapView.visible;
snapView.visible = visible; snapView.setVisible(visible, snapBefore.size);
} }
if (!snapped && snapAfter) { if (!snapped && snapAfter) {
const snapView = this.viewItems[snapAfter.index]; const snapView = this.viewItems[snapAfter.index];
const visible = delta < snapAfter.limitDelta; const visible = delta < snapAfter.limitDelta;
snapped = visible !== snapView.visible; snapped = visible !== snapView.visible;
snapView.visible = visible; snapView.setVisible(visible, snapAfter.size);
} }
if (snapped) { if (snapped) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册