From 0dbce4646844af3732b4df5a03bfc090d8146da0 Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Thu, 28 May 2015 15:03:55 +0300 Subject: [PATCH] incapsulate rtl context determination in Caret instance --- .../src/com/intellij/openapi/editor/Caret.java | 8 +++++++- .../src/com/intellij/injected/editor/InjectedCaret.java | 7 ++++++- .../src/com/intellij/openapi/editor/impl/CaretImpl.java | 5 +++++ .../src/com/intellij/openapi/editor/impl/EditorImpl.java | 2 +- .../openapi/editor/textarea/TextComponentCaret.java | 7 ++++++- 5 files changed, 25 insertions(+), 4 deletions(-) diff --git a/platform/editor-ui-api/src/com/intellij/openapi/editor/Caret.java b/platform/editor-ui-api/src/com/intellij/openapi/editor/Caret.java index 68ff8ce7f563..1ca3f7bac418 100644 --- a/platform/editor-ui-api/src/com/intellij/openapi/editor/Caret.java +++ b/platform/editor-ui-api/src/com/intellij/openapi/editor/Caret.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -296,4 +296,10 @@ public interface Caret extends UserDataHolderEx, Disposable { */ @Nullable Caret clone(boolean above); + + /** + * Returns true if caret is located in RTL text fragment. In that case visual column number is inversely related + * to offset and logical column number in the vicinity of caret. + */ + boolean isAtRtlLocation(); } diff --git a/platform/lang-impl/src/com/intellij/injected/editor/InjectedCaret.java b/platform/lang-impl/src/com/intellij/injected/editor/InjectedCaret.java index ec958fdc557a..508a9bee4f8e 100644 --- a/platform/lang-impl/src/com/intellij/injected/editor/InjectedCaret.java +++ b/platform/lang-impl/src/com/intellij/injected/editor/InjectedCaret.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -237,4 +237,9 @@ public class InjectedCaret implements Caret { public void putUserData(@NotNull Key key, @Nullable T value) { myDelegate.putUserData(key, value); } + + @Override + public boolean isAtRtlLocation() { + return myDelegate.isAtRtlLocation(); + } } diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretImpl.java index a46a79654db8..1bab16ab8981 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretImpl.java @@ -1461,6 +1461,11 @@ public class CaretImpl extends UserDataHolderBase implements Caret { return "Caret at " + myVisibleCaret + (mySelectionMarker == null ? "" : (", selection marker: " + mySelectionMarker.toString())); } + @Override + public boolean isAtRtlLocation() { + return myEditor.myUseNewRendering && myEditor.myView.isRtlLocation(myOffset, myLogicalCaret.leansForward); + } + /** * Encapsulates information about target vertical range info - its 'y' coordinate and height in pixels. */ 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 04306f4c4754..d32326e4333b 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 @@ -4598,7 +4598,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi private void setCursorPosition() { final List caretPoints = new ArrayList(); for (Caret caret : getCaretModel().getAllCarets()) { - boolean isRtl = myUseNewRendering && myView.isRtlLocation(caret.getOffset(), caret.getLogicalPosition().leansForward); + boolean isRtl = caret.isAtRtlLocation(); VisualPosition caretPosition = caret.getVisualPosition(); Point pos1 = visualPositionToXY(caretPosition); Point pos2 = visualPositionToXY(new VisualPosition(caretPosition.line, Math.max(0, caretPosition.column + (isRtl ? -1 : 1)))); diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/textarea/TextComponentCaret.java b/platform/platform-impl/src/com/intellij/openapi/editor/textarea/TextComponentCaret.java index 48ba57e150cf..bce02d483344 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/textarea/TextComponentCaret.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/textarea/TextComponentCaret.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -198,6 +198,11 @@ public class TextComponentCaret extends UserDataHolderBase implements Caret { public void dispose() { } + @Override + public boolean isAtRtlLocation() { + return false; + } + private SelectionModel getSelectionModel() { return myEditor.getSelectionModel(); }