private void paintBorder( Graphics g, EditorImpl editor, int startOffset, int endOffset, EffectType effectType) { if (!myClipDetector.rangeCanBeVisible(startOffset, endOffset)) return; Point startPoint = offsetToXY(editor, startOffset); Point endPoint = offsetToXY(editor, endOffset); int height = endPoint.y - startPoint.y; int startX = startPoint.x; int startY = startPoint.y; int endX = endPoint.x; int lineHeight = editor.getLineHeight(); if (height == 0) { int width = endX == startX ? 1 : endX - startX - 1; if (effectType == EffectType.ROUNDED_BOX) { UIUtil.drawRectPickedOut((Graphics2D) g, startX, startY, width, lineHeight - 1); } else { g.drawRect(startX, startY, width, lineHeight - 1); } return; } int startLine = editor.offsetToVisualLine(startOffset); int endLine = editor.offsetToVisualLine(endOffset); int maxWidth = Math.max(endX, editor.getMaxWidthInVisualLineRange(startLine, endLine - 1, false)); BorderGraphics border = new BorderGraphics(g, startX, startY, effectType); border.horizontalTo(maxWidth); border.verticalRel(height - 1); border.horizontalTo(endX); if (endX > 0) { border.verticalRel(lineHeight); border.horizontalTo(0); border.verticalRel(-height + 1); } else if (height > lineHeight) { border.verticalRel(-height + lineHeight + 1); } border.horizontalTo(startX); border.verticalTo(startY); }