未验证 提交 9fd249ad 编写于 作者: R Rob Lourens 提交者: GitHub

Merge pull request #71292 from Microsoft:joao/fix-68385

Stop the Settings tree from jittering
......@@ -11,6 +11,7 @@ export interface IListVirtualDelegate<T> {
getHeight(element: T): number;
getTemplateId(element: T): string;
hasDynamicHeight?(element: T): boolean;
setDynamicHeight?(element: T, height: number): void;
}
export interface IListRenderer<T, TTemplateData> {
......
......@@ -1096,6 +1096,11 @@ export class ListView<T> implements ISpliceable<T>, IDisposable {
}
item.size = row.domNode!.offsetHeight;
if (this.virtualDelegate.setDynamicHeight) {
this.virtualDelegate.setDynamicHeight(item.element, item.size);
}
item.lastDynamicHeightWidth = this.renderWidth;
this.rowsContainer.removeChild(row.domNode!);
this.cache.release(row);
......
......@@ -178,6 +178,12 @@ export class ComposedTreeDelegate<T, N extends { element: T }> implements IListV
hasDynamicHeight(element: N): boolean {
return !!this.delegate.hasDynamicHeight && this.delegate.hasDynamicHeight(element.element);
}
setDynamicHeight(element: N, height: number): void {
if (this.delegate.setDynamicHeight) {
this.delegate.setDynamicHeight(element.element, height);
}
}
}
interface ITreeListTemplateData<T> {
......
......@@ -1220,7 +1220,16 @@ export class SettingsTreeFilter implements ITreeFilter<SettingsTreeElement> {
}
class SettingsTreeDelegate implements IListVirtualDelegate<SettingsTreeGroupChild> {
getHeight(element: SettingsTreeElement): number {
private heightCache = new WeakMap<SettingsTreeGroupChild, number>();
getHeight(element: SettingsTreeGroupChild): number {
const cachedHeight = this.heightCache.get(element);
if (typeof cachedHeight === 'number') {
return cachedHeight;
}
if (element instanceof SettingsTreeGroupElement) {
if (element.isFirstGroup) {
return 31;
......@@ -1273,6 +1282,10 @@ class SettingsTreeDelegate implements IListVirtualDelegate<SettingsTreeGroupChil
hasDynamicHeight(element: SettingsTreeGroupElement | SettingsTreeSettingElement | SettingsTreeNewExtensionsElement): boolean {
return !(element instanceof SettingsTreeGroupElement);
}
setDynamicHeight(element: SettingsTreeGroupChild, height: number): void {
this.heightCache.set(element, height);
}
}
class NonCollapsibleObjectTreeModel<T> extends ObjectTreeModel<T> {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册