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 663ac91f62ad..90778c6723a0 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 @@ -1124,6 +1124,15 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi state.advance(); fontType = state.getMergedAttributes().getFontType(); } + // We need to consider 'before soft wrap drawing'. + TextChange softWrap = getSoftWrapModel().getSoftWrap(offset); + if (softWrap != null) { + column++; + x += getSoftWrapModel().getMinDrawingWidthInPixels(SoftWrapDrawingType.BEFORE_SOFT_WRAP_LINE_FEED); + if (column >= length) { + break; + } + } FoldRegion region = state.getCurrentFold(); diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/DefaultSoftWrapApplianceManager.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/DefaultSoftWrapApplianceManager.java index ae37f75e8c83..d3583b094aa7 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/DefaultSoftWrapApplianceManager.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/DefaultSoftWrapApplianceManager.java @@ -220,12 +220,13 @@ public class DefaultSoftWrapApplianceManager implements SoftWrapApplianceManager TIntArrayList result = new TIntArrayList(); // Find offsets where soft wraps should be applied for the logical line in case of no indent usage. - int x = myPainter.getMinDrawingWidth(SoftWrapDrawingType.BEFORE_SOFT_WRAP_LINE_FEED); + int x = 0; + int beforeSoftWrapDrawingWidth = myPainter.getMinDrawingWidth(SoftWrapDrawingType.BEFORE_SOFT_WRAP_LINE_FEED); int prevSoftWrapOffset = start; CharBuffer buffer = CharBuffer.wrap(text); for (int i = start; i < end; i++) { int symbolWidth = myTextRepresentationHelper.textWidth(buffer, i, i + 1, fontType, x); - if (x + symbolWidth >= myVisibleAreaWidth) { + if (x + symbolWidth + beforeSoftWrapDrawingWidth >= myVisibleAreaWidth) { int offset = calculateSoftWrapOffset(text, i, prevSoftWrapOffset, end); if (offset >= end || offset <= prevSoftWrapOffset) { // There is no way to insert soft wrap.