diff options
author | Mickael Istria | 2019-04-29 12:50:05 +0000 |
---|---|---|
committer | Mickael Istria - away until Apr 22nd | 2019-04-29 14:51:37 +0000 |
commit | b26b8782569616fcace8dcbd47a61c13ae694513 (patch) | |
tree | 84fd60f11a0c7debe839f9da112df36572b987ca /org.eclipse.jface.text | |
parent | 54ad465f841c2c09437070d0234d1e3166301b89 (diff) | |
download | eclipse.platform.text-b26b8782569616fcace8dcbd47a61c13ae694513.tar.gz eclipse.platform.text-b26b8782569616fcace8dcbd47a61c13ae694513.tar.xz eclipse.platform.text-b26b8782569616fcace8dcbd47a61c13ae694513.zip |
Bug 546706 - multi-line code minings rendered erroneouslyI20190429-1800
Change-Id: I1a89962176d2583551e4fcd28b2511a69b62aa23
Signed-off-by: Mickael Istria <mistria@redhat.com>
Diffstat (limited to 'org.eclipse.jface.text')
3 files changed, 16 insertions, 7 deletions
diff --git a/org.eclipse.jface.text/src/org/eclipse/jface/text/source/inlined/AbstractInlinedAnnotation.java b/org.eclipse.jface.text/src/org/eclipse/jface/text/source/inlined/AbstractInlinedAnnotation.java index 8bc3c312b9a..28e80553d42 100644 --- a/org.eclipse.jface.text/src/org/eclipse/jface/text/source/inlined/AbstractInlinedAnnotation.java +++ b/org.eclipse.jface.text/src/org/eclipse/jface/text/source/inlined/AbstractInlinedAnnotation.java @@ -28,6 +28,7 @@ import org.eclipse.jface.text.Position; import org.eclipse.jface.text.Region; import org.eclipse.jface.text.source.Annotation; import org.eclipse.jface.text.source.ISourceViewer; +import org.eclipse.jface.text.source.projection.ProjectionViewer; /** * Abstract class for inlined annotation. @@ -188,6 +189,15 @@ public abstract class AbstractInlinedAnnotation extends Annotation { return support.isInVisibleLines(getPosition().getOffset()); } + boolean isFirstVisibleOffset(int widgetOffset) { + if (fViewer instanceof ProjectionViewer) { + IRegion widgetRange= ((ProjectionViewer) fViewer).modelRange2WidgetRange(new Region(position.getOffset(), position.getLength())); + return widgetOffset == widgetRange.getOffset(); + } else { + return position.getOffset() == widgetOffset; + } + } + /** * Return whether the given offset is in visible lines. * diff --git a/org.eclipse.jface.text/src/org/eclipse/jface/text/source/inlined/InlinedAnnotationDrawingStrategy.java b/org.eclipse.jface.text/src/org/eclipse/jface/text/source/inlined/InlinedAnnotationDrawingStrategy.java index 5deaad5c5d2..719ff79debe 100644 --- a/org.eclipse.jface.text/src/org/eclipse/jface/text/source/inlined/InlinedAnnotationDrawingStrategy.java +++ b/org.eclipse.jface.text/src/org/eclipse/jface/text/source/inlined/InlinedAnnotationDrawingStrategy.java @@ -32,16 +32,15 @@ import org.eclipse.jface.text.source.AnnotationPainter.IDrawingStrategy; class InlinedAnnotationDrawingStrategy implements IDrawingStrategy { @Override - public void draw(Annotation annotation, GC gc, StyledText textWidget, int widgetoffset, int length, Color color) { + public void draw(Annotation annotation, GC gc, StyledText textWidget, int widgetOffset, int length, Color color) { if (!(annotation instanceof AbstractInlinedAnnotation)) { return; } - if (!((AbstractInlinedAnnotation) annotation).isInVisibleLines()) { - // The annotation is not in visible lines, don't draw it. - return; + AbstractInlinedAnnotation inlinedAnnotation= (AbstractInlinedAnnotation) annotation; + if (inlinedAnnotation.isInVisibleLines() && inlinedAnnotation.isFirstVisibleOffset(widgetOffset)) { + draw((AbstractInlinedAnnotation) annotation, gc, textWidget, widgetOffset, length, + color); } - draw((AbstractInlinedAnnotation) annotation, gc, textWidget, widgetoffset, length, - color); } /** diff --git a/org.eclipse.jface.text/src/org/eclipse/jface/text/source/inlined/LineContentAnnotation.java b/org.eclipse.jface.text/src/org/eclipse/jface/text/source/inlined/LineContentAnnotation.java index 23d4f706805..a7a898b7de9 100644 --- a/org.eclipse.jface.text/src/org/eclipse/jface/text/source/inlined/LineContentAnnotation.java +++ b/org.eclipse.jface.text/src/org/eclipse/jface/text/source/inlined/LineContentAnnotation.java @@ -151,7 +151,7 @@ public class LineContentAnnotation extends AbstractInlinedAnnotation { }
boolean drawRightToPreviousChar(int widgetOffset) {
- return getTextWidget().getLineAtOffset(widgetOffset) == getTextWidget().getLineAtOffset(widgetOffset - 1);
+ return widgetOffset > 0 && getTextWidget().getLineAtOffset(widgetOffset) == getTextWidget().getLineAtOffset(widgetOffset - 1);
}
}
|