Editor: improve multiline BOX effect painting: old painting fix

This commit is contained in:
Gregory.Shrago
2015-11-03 16:04:05 +03:00
parent f7797140ef
commit 3a373ac353
2 changed files with 13 additions and 10 deletions
@@ -79,11 +79,6 @@ public class BorderEffect {
paintBorder(myGraphics, myEditor, startOffset, endOffset, color, effectType);
}
private boolean intersectsRange(RangeHighlighterEx rangeHighlighter) {
return myRange.contains(rangeHighlighter.getAffectedAreaStartOffset()) ||
myRange.contains(rangeHighlighter.getAffectedAreaEndOffset());
}
public void paintHighlighters(MarkupModelEx markupModel) {
markupModel.processRangeHighlightersOverlappingWith(myStartOffset, myEndOffset, new Processor<RangeHighlighterEx>() {
@Override
@@ -91,7 +86,7 @@ public class BorderEffect {
if (!rangeHighlighter.getEditorFilter().avaliableIn(myEditor)) return true;
TextAttributes textAttributes = rangeHighlighter.getTextAttributes();
if (isBorder(textAttributes) && intersectsRange(rangeHighlighter)) {
if (isBorder(textAttributes)) {
paintBorder(rangeHighlighter, textAttributes);
}
return true;
@@ -144,8 +139,11 @@ public class BorderEffect {
}
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(editor.getMaxWidthInRange(startOffset, endOffset) - 1);
border.horizontalTo(maxWidth);
border.verticalRel(height - 1);
border.horizontalTo(endX);
if (endX > 0) {
@@ -2412,12 +2412,17 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi
@Override
public int getMaxWidthInRange(int startOffset, int endOffset) {
if (myUseNewRendering) return myView.getMaxWidthInRange(startOffset, endOffset);
int width = 0;
int start = offsetToVisualLine(startOffset);
int end = offsetToVisualLine(endOffset);
for (int i = start; i <= end; i++) {
int lastColumn = EditorUtil.getLastVisualLineColumnNumber(this, i) + 1;
return getMaxWidthInVisualLineRange(start, end, true);
}
int getMaxWidthInVisualLineRange(int startVisualLine, int endVisualLine, boolean addOneColumn) {
int width = 0;
for (int i = startVisualLine; i <= endVisualLine; i++) {
int lastColumn = EditorUtil.getLastVisualLineColumnNumber(this, i) + (addOneColumn ? 1 : 0);
int lineWidth = visualPositionToXY(new VisualPosition(i, lastColumn)).x;
if (lineWidth > width) {