From fd7f35aa4cd239367fbe0dbfd283ad35d71897f3 Mon Sep 17 00:00:00 2001 From: rebornix Date: Mon, 28 Mar 2022 11:23:23 -0700 Subject: [PATCH] re #123828. Reveal middle of the cell to the center. --- .../notebook/browser/view/notebookCellList.ts | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/vs/workbench/contrib/notebook/browser/view/notebookCellList.ts b/src/vs/workbench/contrib/notebook/browser/view/notebookCellList.ts index 673fe4a4312..3ef1c58649e 100644 --- a/src/vs/workbench/contrib/notebook/browser/view/notebookCellList.ts +++ b/src/vs/workbench/contrib/notebook/browser/view/notebookCellList.ts @@ -1252,8 +1252,20 @@ export class NotebookCellList extends WorkbenchList implements ID this.view.setScrollTop(this.view.elementTop(viewIndex)); break; case CellRevealPosition.Center: - this.view.setScrollTop(elementTop - this.view.renderHeight / 2); - this.view.setScrollTop(this.view.elementTop(viewIndex) - this.view.renderHeight / 2); + { + // reveal the cell top in the viewport center initially + this.view.setScrollTop(elementTop - this.view.renderHeight / 2); + // cell rendered already, we now have a more accurate cell height + const newElementTop = this.view.elementTop(viewIndex); + const newElementHeight = this.view.elementHeight(viewIndex); + const renderHeight = this.getViewScrollBottom() - this.getViewScrollTop(); + if (newElementHeight >= renderHeight) { + // cell is larger than viewport, reveal top + this.view.setScrollTop(newElementTop); + } else { + this.view.setScrollTop(newElementTop + (newElementHeight / 2) - (renderHeight / 2)); + } + } break; case CellRevealPosition.Bottom: this.view.setScrollTop(this.scrollTop + (elementBottom - wrapperBottom));