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();
}