incapsulate rtl context determination in Caret instance
authorDmitry Batrak <Dmitry.Batrak@jetbrains.com>
Thu, 28 May 2015 12:03:55 +0000 (15:03 +0300)
committerDmitry Batrak <Dmitry.Batrak@jetbrains.com>
Thu, 28 May 2015 12:08:43 +0000 (15:08 +0300)
platform/editor-ui-api/src/com/intellij/openapi/editor/Caret.java
platform/lang-impl/src/com/intellij/injected/editor/InjectedCaret.java
platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretImpl.java
platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java
platform/platform-impl/src/com/intellij/openapi/editor/textarea/TextComponentCaret.java

index 68ff8ce7f563aeb5c352ff30209d32977ac12d39..1ca3f7bac4181d998179a7650c4d76592653f1b0 100644 (file)
@@ -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 <code>true</code> 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();
 }
index ec958fdc557a43a1f1b3275524ab52234c3ffb2c..508a9bee4f8ead0ec6fa53e0418b42a1e6d87aa7 100644 (file)
@@ -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 <T> void putUserData(@NotNull Key<T> key, @Nullable T value) {
     myDelegate.putUserData(key, value);
   }
+
+  @Override
+  public boolean isAtRtlLocation() {
+    return myDelegate.isAtRtlLocation();
+  }
 }
index a46a79654db8564a943609ad60eaf77417590ee3..1bab16ab8981faf93370780559d0eeeda9d404b0 100644 (file)
@@ -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 <code>'y'</code> coordinate and height in pixels.
    */
index 04306f4c4754acc066e34a0e56f8ac27448de758..d32326e4333bfceca4274c7c82c7dc0e408cb3b5 100644 (file)
@@ -4598,7 +4598,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi
   private void setCursorPosition() {
     final List<CaretRectangle> caretPoints = new ArrayList<CaretRectangle>();
     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))));
index 48ba57e150cff5eb952c38cbac46a7708539842e..bce02d4833448923a330e0c91b6c8d93df503019 100644 (file)
@@ -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();
   }