From 00dda2f26588e8db19c087009e4cbf8d011be4b0 Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Tue, 24 Dec 2013 10:41:24 +0400 Subject: [PATCH] IDEA-118419 Keep caret on the screen while changing font size taking into account intra-line mouse position to avoid lines 'jumping' --- .../src/com/intellij/openapi/editor/impl/EditorImpl.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 eeb0d1934b67..3b59fe982d71 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 @@ -914,6 +914,8 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi Point zoomCenterRelative = zoomCenter == null ? new Point() : zoomCenter; Point zoomCenterAbsolute = new Point(visibleArea.x + zoomCenterRelative.x, visibleArea.y + zoomCenterRelative.y); LogicalPosition zoomCenterLogical = xyToLogicalPosition(zoomCenterAbsolute).withoutVisualPositionInfo(); + int oldLineHeight = getLineHeight(); + int intraLineOffset = zoomCenterAbsolute.y % oldLineHeight; myScheme.setEditorFontSize(fontSize); myPropertyChangeSupport.firePropertyChange(PROP_FONT_SIZE, oldFontSize, fontSize); @@ -925,7 +927,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi myScrollingModel.disableAnimation(); try { myScrollingModel.scrollToOffsets(visibleArea.x == 0 ? 0 : shiftedZoomCenterAbsolute.x - zoomCenterRelative.x, // stick to left border if it's visible - shiftedZoomCenterAbsolute.y - zoomCenterRelative.y); + shiftedZoomCenterAbsolute.y - zoomCenterRelative.y + (intraLineOffset * getLineHeight() + oldLineHeight / 2) / oldLineHeight); } finally { myScrollingModel.enableAnimation(); }