From 70d36bf478bc3ea17a45001b7d59c4b9a58cdfe0 Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Tue, 4 Feb 2020 11:59:52 +0300 Subject: [PATCH] IDEA-230636 Editor scrolls on fold/unfold of a code block GitOrigin-RevId: 13898393797433723d75b741a24c81a8e76c5db7 --- .../openapi/editor/impl/EditorGutterComponentImpl.java | 4 ---- .../src/com/intellij/openapi/editor/impl/EditorImpl.java | 8 +++++--- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java index e80d25cb7902..525758c9b44a 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java @@ -1267,10 +1267,6 @@ class EditorGutterComponentImpl extends EditorGutterComponentEx implements Mouse return myEditor.visualLineToY(line) + myEditor.getAscent() - width; } - int getHeadCenterY(FoldRegion foldRange) { - return getLineCenterY(myEditor.offsetToVisualLine(foldRange.getStartOffset())); - } - private void drawFoldingAnchor(double width, @NotNull Rectangle clip, @NotNull Graphics2D g, int visualLine, @NotNull DisplayedFoldingAnchor.Type type, boolean active) { double off = width / 4; diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java index 7630f58437d4..e4d6737150ff 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java @@ -3901,7 +3901,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi if (range != null) { final boolean expansion = !range.isExpanded(); - int scrollShift = y - getScrollingModel().getVerticalScrollOffset(); + int scrollShift = expansion ? 0 : visualLineToY(yToVisualLine(y)) - getScrollingModel().getVerticalScrollOffset(); getFoldingModel().runBatchFoldingOperation(() -> { range.setExpanded(expansion); if (e.isAltDown()) { @@ -3912,8 +3912,10 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi } } }, true, false); - y = myGutterComponent.getHeadCenterY(range); - getScrollingModel().scrollVertically(y - scrollShift); + if (!expansion) { + int newY = visualLineToY(offsetToVisualLine(range.getStartOffset())); + EditorUtil.runWithAnimationDisabled(EditorImpl.this, () -> myScrollingModel.scrollVertically(newY - scrollShift)); + } myGutterComponent.updateSize(); validateMousePointer(e); e.consume();