int (@NotNull VisualLinesIterator iterator, @Nullable Runnable quickEvaluationListener) { CustomFoldRegion customFoldRegion = iterator.getCustomFoldRegion(); if (customFoldRegion != null) { return customFoldRegion.getWidthInPixels(); } int visualLine = iterator.getVisualLine(); FoldRegion[] topLevelRegions = myEditor.getFoldingModel().fetchTopLevel(); if (quickEvaluationListener != null && (topLevelRegions == null || topLevelRegions.length == 0) && myEditor.getSoftWrapModel().getRegisteredSoftWraps().isEmpty() && (myDocument.getLineCount() == 0 || !myView.getTextLayoutCache().hasCachedLayoutFor(visualLine)) && !myEditor.getInlayModel().hasInlineElements() && !myEditor.getInlayModel().hasAfterLineEndElements() && (visualLine > 0 || myView.getPrefixTextWidthInPixels() == 0)) { // fast path - speeds up editor opening quickEvaluationListener.run(); return (int)(myView.getLogicalPositionCache().offsetToLogicalColumn(visualLine, myDocument.getLineEndOffset(visualLine) - myDocument.getLineStartOffset(visualLine)) * myView.getMaxCharWidth()); } float x = visualLine == 0 ? myView.getPrefixTextWidthInPixels() : 0; int maxOffset = iterator.getVisualLineStartOffset(); int leftInset = myView.getInsets().left; for (VisualLineFragmentsIterator.Fragment fragment : VisualLineFragmentsIterator.create(myView, iterator, quickEvaluationListener, false)) { x = fragment.getEndX() - leftInset; maxOffset = Math.max(maxOffset, fragment.getMaxOffset()); } if (myEditor.getSoftWrapModel().getSoftWrap(maxOffset) != null) { x += myEditor.getSoftWrapModel().getMinDrawingWidthInPixels(SoftWrapDrawingType.BEFORE_SOFT_WRAP_LINE_FEED); } else { List<Inlay<?>> inlays = myEditor.getInlayModel().getAfterLineEndElementsForLogicalLine(iterator.getEndLogicalLine()); if (!inlays.isEmpty()) { x += myView.getPlainSpaceWidth(); for (Inlay<?> inlay : inlays) { x += inlay.getWidthInPixels(); } } } return (int)x; }