diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java index 799520b7932d..c07c599e5dad 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java @@ -637,11 +637,11 @@ class EditorGutterComponentImpl extends EditorGutterComponentEx implements Mouse if (renderer == null) { return; } - if (myEditor.getFoldingModel().isOffsetCollapsed(highlighter.getStartOffset())) { + if (!isHighlighterVisible(highlighter)) { return; } - VisualPosition visualPosition = myEditor.offsetToVisualPosition(highlighter.getStartOffset()); - int line = EditorUtil.calcSurroundingRange(myEditor, visualPosition, visualPosition).getFirst().line; + int lineStartOffset = EditorUtil.getNotFoldedLineStartOffset(myEditor, highlighter.getStartOffset()); + int line = myEditor.getDocument().getLineNumber(lineStartOffset); List renderers = myLineToGutterRenderers.get(line); if (renderers == null) { renderers = new SmartList(); @@ -675,6 +675,17 @@ class EditorGutterComponentImpl extends EditorGutterComponentEx implements Mouse myLineMarkerAreaWidth = myIconsAreaWidth + FREE_PAINTERS_AREA_WIDTH; } + private boolean isHighlighterVisible(RangeHighlighter highlighter) { + int startOffset = highlighter instanceof RangeHighlighterEx ? + ((RangeHighlighterEx)highlighter).getAffectedAreaStartOffset() : + highlighter.getStartOffset(); + int endOffset = highlighter instanceof RangeHighlighterEx ? + ((RangeHighlighterEx)highlighter).getAffectedAreaEndOffset() : + highlighter.getEndOffset(); + FoldRegion foldRegion = myEditor.getFoldingModel().getCollapsedRegionAtOffset(startOffset); + return foldRegion == null || foldRegion.getEndOffset() < endOffset; + } + private void paintGutterRenderers(final Graphics g, int firstVisibleOffset, int lastVisibleOffset) { Graphics2D g2 = (Graphics2D)g; @@ -698,22 +709,12 @@ class EditorGutterComponentImpl extends EditorGutterComponentEx implements Mouse } private void paintIcons(final int firstVisibleLine, final int lastVisibleLine, final Graphics g) { - myLineToGutterRenderers.forEachKey(new TIntProcedure() { - @Override - public boolean execute(int line) { - if (firstVisibleLine > line || lastVisibleLine < line) return true; - if (isLineCollapsed(line)) return true; - List renderers = myLineToGutterRenderers.get(line); + for (int line = firstVisibleLine; line <= lastVisibleLine; line++) { + List renderers = myLineToGutterRenderers.get(line); + if (renderers != null) { paintIconRow(line, renderers, g); - return true; } - }); - } - - private boolean isLineCollapsed(final int line) { - int startOffset = myEditor.getDocument().getLineStartOffset(line); - final FoldRegion region = myEditor.getFoldingModel().getCollapsedRegionAtOffset(startOffset); - return region != null && region.getEndOffset() >= myEditor.getDocument().getLineEndOffset(line); + } } private void paintIconRow(int line, List row, final Graphics g) { 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 7aa781237180..15fa8d523e2b 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 @@ -1115,7 +1115,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi @NotNull @Override - public EditorGutterComponentEx getGutterComponentEx() { + public EditorGutterComponentImpl getGutterComponentEx() { return myGutterComponent; } diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/FoldingModelImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/FoldingModelImpl.java index 82eceacf1547..cca125c85f6f 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/FoldingModelImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/FoldingModelImpl.java @@ -368,9 +368,8 @@ public class FoldingModelImpl implements FoldingModelEx, PrioritizedDocumentList myEditor.updateCaretCursor(); myEditor.recalculateSizeAndRepaint(); - if (myEditor.getGutterComponentEx().isFoldingOutlineShown()) { - myEditor.getGutterComponentEx().repaint(); - } + myEditor.getGutterComponentEx().updateSize(); + myEditor.getGutterComponentEx().repaint(); LogicalPosition caretPosition = myEditor.getCaretModel().getLogicalPosition(); // There is a possible case that caret position is already visual position aware. But visual position depends on number of folded