refactoring: extracted common code for scrolling to caret

This commit is contained in:
Dmitry Batrak
2014-10-14 19:24:44 +04:00
parent 67f1289e18
commit 860f5a0b36
3 changed files with 18 additions and 20 deletions
@@ -54,9 +54,7 @@ public class EditorModificationUtil {
}
selectionModel.removeSelection();
editor.getDocument().deleteString(selectionStart, selectionEnd);
if (editor.getCaretModel().getCurrentCaret() == editor.getCaretModel().getPrimaryCaret()) {
editor.getScrollingModel().scrollToCaret(ScrollType.RELATIVE);
}
scrollToCaret(editor);
}
public static void deleteSelectedTextForAllCarets(@NotNull final Editor editor) {
@@ -116,8 +114,8 @@ public class EditorModificationUtil {
public static int insertStringAtCaret(Editor editor, @NotNull String s, boolean toProcessOverwriteMode, boolean toMoveCaret, int caretShift) {
int result = insertStringAtCaretNoScrolling(editor, s, toProcessOverwriteMode, toMoveCaret, caretShift);
if (toMoveCaret && editor.getCaretModel().getCurrentCaret() == editor.getCaretModel().getPrimaryCaret()) {
editor.getScrollingModel().scrollToCaret(ScrollType.RELATIVE);
if (toMoveCaret) {
scrollToCaret(editor);
}
return result;
}
@@ -475,4 +473,15 @@ public class EditorModificationUtil {
CaretModel caretModel = editor.getCaretModel();
caretModel.moveToOffset(caretModel.getOffset() + caretShift);
}
/**
* This method is safe to run both in and out of {@link com.intellij.openapi.editor.CaretModel#runForEachCaret(CaretAction)} context.
* It scrolls to primary caret in both cases, and, in the former case, avoids performing excessive scrolling in case of large number
* of carets.
*/
public static void scrollToCaret(@NotNull Editor editor) {
if (editor.getCaretModel().getCurrentCaret() == editor.getCaretModel().getPrimaryCaret()) {
editor.getScrollingModel().scrollToCaret(ScrollType.RELATIVE);
}
}
}
@@ -92,7 +92,7 @@ public class BackspaceAction extends EditorAction {
editor.getCaretModel().moveCaretRelatively(columnShift, 0, false, false, true);
}
else {
scrollToCaret(editor);
EditorModificationUtil.scrollToCaret(editor);
editor.getSelectionModel().removeSelection();
FoldRegion region = editor.getFoldingModel().getCollapsedRegionAtOffset(offset - 1);
@@ -111,17 +111,11 @@ public class BackspaceAction extends EditorAction {
int lineEnd = document.getLineEndOffset(lineNumber - 1) + separatorLength;
document.deleteString(lineEnd - separatorLength, lineEnd);
editor.getCaretModel().moveToOffset(lineEnd - separatorLength);
scrollToCaret(editor);
EditorModificationUtil.scrollToCaret(editor);
editor.getSelectionModel().removeSelection();
// Do not group delete newline and other deletions.
CommandProcessor commandProcessor = CommandProcessor.getInstance();
commandProcessor.setCurrentCommandGroupId(null);
}
}
private static void scrollToCaret(Editor editor) {
if (editor.getCaretModel().getCurrentCaret() == editor.getCaretModel().getPrimaryCaret()) {
editor.getScrollingModel().scrollToCaret(ScrollType.RELATIVE);
}
}
}
@@ -122,7 +122,6 @@ public class EditorActionUtil {
editor.getCaretModel().moveCaretRelatively(columnShift, lineShift, withSelection, false, false);
//editor.getScrollingModel().scrollToCaret(ScrollType.RELATIVE);
VisualPosition caretPos = editor.getCaretModel().getVisualPosition();
Point caretLocation2 = editor.visualPositionToXY(caretPos);
final boolean scrollToCaret = !(editor instanceof EditorImpl) || ((EditorImpl)editor).isScrollToCaret();
@@ -624,9 +623,7 @@ public class EditorActionUtil {
}
}
caretModel.moveToOffset(newOffset);
if (editor.getCaretModel().getCurrentCaret() == editor.getCaretModel().getPrimaryCaret()) {
editor.getScrollingModel().scrollToCaret(ScrollType.RELATIVE);
}
EditorModificationUtil.scrollToCaret(editor);
setupSelection(editor, isWithSelection, selectionStart, blockSelectionStart);
}
@@ -698,9 +695,7 @@ public class EditorActionUtil {
if (isWordOrLexemeStart(editor, newOffset, camel)) break;
}
editor.getCaretModel().moveToOffset(newOffset);
if (editor.getCaretModel().getCurrentCaret() == editor.getCaretModel().getPrimaryCaret()) {
editor.getScrollingModel().scrollToCaret(ScrollType.RELATIVE);
}
EditorModificationUtil.scrollToCaret(editor);
setupSelection(editor, isWithSelection, selectionStart, blockSelectionStart);
}