mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Editor: improve multiline BOX effect painting: old painting fix
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user