From 4f9533c7722fa07511a94d005227961f4a4dec23 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Thu, 18 May 2006 17:29:21 +0000 Subject: Imported GNU Classpath 0.90 Imported GNU Classpath 0.90 * scripts/makemake.tcl: LocaleData.java moved to gnu/java/locale. * sources.am: Regenerated. * gcj/javaprims.h: Regenerated. * Makefile.in: Regenerated. * gcj/Makefile.in: Regenerated. * include/Makefile.in: Regenerated. * testsuite/Makefile.in: Regenerated. * gnu/java/lang/VMInstrumentationImpl.java: New override. * gnu/java/net/local/LocalSocketImpl.java: Likewise. * gnu/classpath/jdwp/VMMethod.java: Likewise. * gnu/classpath/jdwp/VMVirtualMachine.java: Update to latest interface. * java/lang/Thread.java: Add UncaughtExceptionHandler. * java/lang/reflect/Method.java: Implements GenericDeclaration and isSynthetic(), * java/lang/reflect/Field.java: Likewise. * java/lang/reflect/Constructor.java * java/lang/Class.java: Implements Type, GenericDeclaration, getSimpleName() and getEnclosing*() methods. * java/lang/Class.h: Add new public methods. * java/lang/Math.java: Add signum(), ulp() and log10(). * java/lang/natMath.cc (log10): New function. * java/security/VMSecureRandom.java: New override. * java/util/logging/Logger.java: Updated to latest classpath version. * java/util/logging/LogManager.java: New override. From-SVN: r113887 --- libjava/classpath/javax/swing/text/PlainView.java | 78 +++++++++++++++++++---- 1 file changed, 67 insertions(+), 11 deletions(-) (limited to 'libjava/classpath/javax/swing/text/PlainView.java') diff --git a/libjava/classpath/javax/swing/text/PlainView.java b/libjava/classpath/javax/swing/text/PlainView.java index 4bb3a8e..18818c0 100644 --- a/libjava/classpath/javax/swing/text/PlainView.java +++ b/libjava/classpath/javax/swing/text/PlainView.java @@ -59,6 +59,18 @@ public class PlainView extends View implements TabExpander * The color that is used to draw disabled text fields. */ Color disabledColor; + + /** + * While painting this is the textcomponent's current start index + * of the selection. + */ + int selectionStart; + + /** + * While painting this is the textcomponent's current end index + * of the selection. + */ + int selectionEnd; Font font; @@ -150,12 +162,47 @@ public class PlainView extends View implements TabExpander { try { - metrics = g.getFontMetrics(); - // FIXME: Selected text are not drawn yet. Element line = getElement().getElement(lineIndex); - drawUnselectedText(g, x, y, line.getStartOffset(), - line.getEndOffset() - 1); - //drawSelectedText(g, , , , ); + int startOffset = line.getStartOffset(); + int endOffset = line.getEndOffset() - 1; + + if (selectionStart <= startOffset) + // Selection starts before the line ... + if (selectionEnd <= startOffset) + { + // end ends before the line: Draw completely unselected text. + drawUnselectedText(g, x, y, startOffset, endOffset); + } + else if (selectionEnd <= endOffset) + { + // and ends within the line: First part is selected, + // second is not. + x = drawSelectedText(g, x, y, startOffset, selectionEnd); + drawUnselectedText(g, x, y, selectionEnd, endOffset); + } + else + // and ends behind the line: Draw completely selected text. + drawSelectedText(g, x, y, startOffset, endOffset); + else if (selectionStart < endOffset) + // Selection starts within the line .. + if (selectionEnd < endOffset) + { + // and ends within it: First part unselected, second part + // selected, third part unselected. + x = drawUnselectedText(g, x, y, startOffset, selectionStart); + x = drawSelectedText(g, x, y, selectionStart, selectionEnd); + drawUnselectedText(g, x, y, selectionEnd, endOffset); + } + else + { + // and ends behind the line: First part unselected, second + // part selected. + x = drawUnselectedText(g, x, y, startOffset, selectionStart); + drawSelectedText(g, x, y, selectionStart, endOffset); + } + else + // Selection is behind this line: Draw completely unselected text. + drawUnselectedText(g, x, y, startOffset, endOffset); } catch (BadLocationException e) { @@ -171,7 +218,7 @@ public class PlainView extends View implements TabExpander g.setColor(selectedColor); Segment segment = getLineBuffer(); getDocument().getText(p0, p1 - p0, segment); - return Utilities.drawTabbedText(segment, x, y, g, this, 0); + return Utilities.drawTabbedText(segment, x, y, g, this, segment.offset); } /** @@ -212,6 +259,8 @@ public class PlainView extends View implements TabExpander selectedColor = textComponent.getSelectedTextColor(); unselectedColor = textComponent.getForeground(); disabledColor = textComponent.getDisabledTextColor(); + selectionStart = textComponent.getSelectionStart(); + selectionEnd = textComponent.getSelectionEnd(); Rectangle rect = s.getBounds(); @@ -219,11 +268,13 @@ public class PlainView extends View implements TabExpander Document document = textComponent.getDocument(); Element root = document.getDefaultRootElement(); int y = rect.y + metrics.getAscent(); + int height = metrics.getHeight(); - for (int i = 0; i < root.getElementCount(); i++) + int count = root.getElementCount(); + for (int i = 0; i < count; i++) { drawLine(i, g, rect.x, y); - y += metrics.getHeight(); + y += height; } } @@ -274,7 +325,7 @@ public class PlainView extends View implements TabExpander { Element child = el.getElement(i); int start = child.getStartOffset(); - int end = child.getEndOffset(); + int end = child.getEndOffset() - 1; try { el.getDocument().getText(start, end - start, seg); @@ -386,6 +437,11 @@ public class PlainView extends View implements TabExpander */ protected void updateDamage(DocumentEvent changes, Shape a, ViewFactory f) { + // Return early and do no updates if the allocation area is null + // (like the RI). + if (a == null) + return; + float oldMaxLineLength = maxLineLength; Rectangle alloc = a.getBounds(); Element el = getElement(); @@ -467,7 +523,7 @@ public class PlainView extends View implements TabExpander { Element child = newElements[i]; int start = child.getStartOffset(); - int end = child.getEndOffset(); + int end = child.getEndOffset() - 1; try { el.getDocument().getText(start, end - start, seg); @@ -586,7 +642,7 @@ public class PlainView extends View implements TabExpander * @returna {@link Segment} object, that can be used to fetch text from * the document */ - protected Segment getLineBuffer() + protected final Segment getLineBuffer() { if (lineBuffer == null) lineBuffer = new Segment(); -- cgit v1.1