/** * Every soft wrap implies that multiple visual positions correspond to the same document offset. We can classify * such positions by the following criteria: * <pre> * <ul> * <li>positions from visual line with soft wrap start;</li> * <li>positions from visual line with soft wrap end;</li> * </ul> * </pre> * <p/> * This method allows to answer if caret offset of the given editor points to soft wrap and visual caret position * belongs to the visual line where soft wrap end is located. * * @param editor target editor * @return <code>true</code> if caret offset of the given editor points to visual position that belongs to * visual line where soft wrap end is located */ public static boolean isCaretAfterSoftWrap(CaretImpl caret) { if (!caret.isUpToDate()) { return false; } EditorImpl editor = caret.getEditor(); SoftWrapModel softWrapModel = editor.getSoftWrapModel(); int offset = caret.getOffset(); SoftWrap softWrap = softWrapModel.getSoftWrap(offset); if (softWrap == null) { return false; } if (editor.myUseNewRendering) { VisualPosition afterWrapPosition = editor.offsetToVisualPosition(offset, false, false); VisualPosition caretPosition = caret.getVisualPosition(); return caretPosition.line == afterWrapPosition.line && caretPosition.column <= afterWrapPosition.column; } else { return editor.offsetToVisualLine(offset) == caret.getVisualPosition().line; } }
/** * Every soft wrap implies that multiple visual positions correspond to the same document offset. We can classify * such positions by the following criteria: * <pre> * <ul> * <li>positions from visual line with soft wrap start;</li> * <li>positions from visual line with soft wrap end;</li> * </ul> * </pre> * <p/> * This method allows to answer if caret offset of the given editor points to soft wrap and visual caret position * belongs to the visual line where soft wrap end is located. * * @param editor target editor * @return <code>true</code> if caret offset of the given editor points to visual position that belongs to * visual line where soft wrap end is located */ public static boolean isCaretAfterSoftWrap(CaretImpl caret) { if (!caret.isUpToDate()) { return false; } EditorImpl editor = caret.getEditor(); SoftWrapModel softWrapModel = editor.getSoftWrapModel(); int offset = caret.getOffset(); SoftWrap softWrap = softWrapModel.getSoftWrap(offset); if (softWrap == null) { return false; } VisualPosition afterWrapPosition = editor.offsetToVisualPosition(offset, false, false); VisualPosition caretPosition = caret.getVisualPosition(); return caretPosition.line == afterWrapPosition.line && caretPosition.column <= afterWrapPosition.column; }
/** * Every soft wrap implies that multiple visual positions correspond to the same document offset. We can classify * such positions by the following criteria: * <pre> * <ul> * <li>positions from visual line with soft wrap start;</li> * <li>positions from visual line with soft wrap end;</li> * </ul> * </pre> * <p/> * This method allows to answer if caret offset of the given editor points to soft wrap and visual caret position * belongs to the visual line where soft wrap end is located. * * @param editor target editor * @return <code>true</code> if caret offset of the given editor points to visual position that belongs to * visual line where soft wrap end is located */ public static boolean isCaretAfterSoftWrap(EditorImpl editor) { CaretModel caretModel = editor.getCaretModel(); if (!caretModel.isUpToDate()) { return false; } SoftWrapModel softWrapModel = editor.getSoftWrapModel(); int offset = caretModel.getOffset(); SoftWrap softWrap = softWrapModel.getSoftWrap(offset); if (softWrap == null) { return false; } return editor.offsetToVisualLine(offset) == caretModel.getVisualPosition().line; }