Commit 7e48f773 authored by Dmitry Batrak's avatar Dmitry Batrak
Browse files

IDEA-132554 undesirable editor scrolling on reformat

parent ea5c1ba3
Showing with 19 additions and 5 deletions
+19 -5
......@@ -1701,15 +1701,17 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi
}
private void bulkUpdateStarted() {
myFoldingModel.onBulkDocumentUpdateStarted();
saveCaretRelativePosition();
myCaretModel.onBulkDocumentUpdateStarted();
mySoftWrapModel.onBulkDocumentUpdateStarted();
myFoldingModel.onBulkDocumentUpdateStarted();
}
private void bulkUpdateFinished() {
myFoldingModel.onBulkDocumentUpdateFinished();
myCaretModel.onBulkDocumentUpdateFinished();
mySoftWrapModel.onBulkDocumentUpdateFinished();
myCaretModel.onBulkDocumentUpdateFinished();
clearTextWidthCache();
......@@ -1722,6 +1724,8 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi
updateGutterSize();
repaintToScreenBottom(0);
updateCaretCursor();
restoreCaretRelativePosition();
}
private void beforeChangedUpdate(@NotNull DocumentEvent e) {
......@@ -1733,9 +1737,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi
return;
}
Rectangle visibleArea = getScrollingModel().getVisibleArea();
Point pos = visualPositionToXY(getCaretModel().getVisualPosition());
myCaretUpdateVShift = pos.y - visibleArea.y;
saveCaretRelativePosition();
// We assume that size container is already notified with the visual line widths during soft wraps processing
if (!mySoftWrapModel.isSoftWrappingEnabled()) {
......@@ -1779,9 +1781,21 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi
repaintLines(startLine, endLine);
}
restoreCaretRelativePosition();
}
private void saveCaretRelativePosition() {
Rectangle visibleArea = getScrollingModel().getVisibleArea();
Point pos = visualPositionToXY(getCaretModel().getVisualPosition());
myCaretUpdateVShift = pos.y - visibleArea.y;
}
private void restoreCaretRelativePosition() {
Point caretLocation = visualPositionToXY(getCaretModel().getVisualPosition());
int scrollOffset = caretLocation.y - myCaretUpdateVShift;
getScrollingModel().disableAnimation();
getScrollingModel().scrollVertically(scrollOffset);
getScrollingModel().enableAnimation();
}
public boolean hasTabs() {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment