summaryrefslogtreecommitdiff
path: root/javax/swing/text/DefaultHighlighter.java
diff options
context:
space:
mode:
authorAndrew John Hughes <gnu_andrew@member.fsf.org>2005-01-14 10:24:02 +0000
committerAndrew John Hughes <gnu_andrew@member.fsf.org>2005-01-14 10:24:02 +0000
commitc61f399b1d3c471a8e459a4a2be645f95560f088 (patch)
tree14e7f5759d2cded647d22e019435a770b8ed69e5 /javax/swing/text/DefaultHighlighter.java
parent451c55a31fbc6b949f7609dd90932bb2a0d91a19 (diff)
downloadclasspath-c61f399b1d3c471a8e459a4a2be645f95560f088.tar.gz
2005-01-14 Andrew John Hughes <gnu_andrew@member.fsf.org>
* Merge of September 2004 HEAD patches to generics branch.
Diffstat (limited to 'javax/swing/text/DefaultHighlighter.java')
-rw-r--r--javax/swing/text/DefaultHighlighter.java111
1 files changed, 111 insertions, 0 deletions
diff --git a/javax/swing/text/DefaultHighlighter.java b/javax/swing/text/DefaultHighlighter.java
index 003d17d1a..911e0f99b 100644
--- a/javax/swing/text/DefaultHighlighter.java
+++ b/javax/swing/text/DefaultHighlighter.java
@@ -38,7 +38,9 @@ exception statement from your version. */
package javax.swing.text;
+import java.awt.Color;
import java.awt.Graphics;
+import java.awt.Rectangle;
import java.awt.Shape;
import java.util.Vector;
@@ -48,6 +50,87 @@ import javax.swing.text.View;
public class DefaultHighlighter extends LayeredHighlighter
{
+ public static class DefaultHighlightPainter
+ extends LayerPainter
+ {
+ private Color color;
+
+ public DefaultHighlightPainter(Color c)
+ {
+ super();
+ color = c;
+ }
+
+ public Color getColor()
+ {
+ return color;
+ }
+
+ private void paintHighlight(Graphics g, Rectangle rect)
+ {
+ g.fillRect(rect.x, rect.y, rect.width, rect.height);
+ }
+
+ public void paint(Graphics g, int p0, int p1, Shape bounds,
+ JTextComponent c)
+ {
+ Rectangle r0 = null;
+ Rectangle r1 = null;
+ Rectangle rect = bounds.getBounds();
+
+ try
+ {
+ r0 = c.modelToView(p0);
+ r1 = c.modelToView(p1);
+ }
+ catch (BadLocationException e)
+ {
+ // This should never occur.
+ return;
+ }
+
+ if (r0 == null || r1 == null)
+ return;
+
+ if (color == null)
+ g.setColor(c.getSelectionColor());
+ else
+ g.setColor(color);
+
+ // Check if only one line to highlight.
+ if (r0.y == r1.y)
+ {
+ r0.width = r1.x - r0.x;
+ paintHighlight(g, r0);
+ return;
+ }
+
+ // First line, from p0 to end-of-line.
+ r0.width = rect.x + rect.width - r0.x;
+ paintHighlight(g, r0);
+
+ // FIXME: All the full lines in between, if any (assumes that all lines
+ // have the same height -- not a good assumption with JEditorPane/JTextPane).
+ r0.y += r0.height;
+ r0.x = rect.x;
+
+ while (r0.y < r1.y)
+ {
+ paintHighlight(g, r0);
+ r0.y += r0.height;
+ }
+
+ // Last line, from beginnin-of-line to p1.
+ paintHighlight(g, r1);
+ }
+
+ public Shape paintLayer(Graphics g, int p0, int p1, Shape bounds,
+ JTextComponent c, View view)
+ {
+ throw new InternalError();
+ }
+ }
+
private class HighlightEntry
{
int p0;
@@ -77,13 +160,30 @@ public class DefaultHighlighter extends LayeredHighlighter
}
}
+ /**
+ * @specnote final as of 1.4
+ */
+ public static final LayeredHighlighter.LayerPainter DefaultPainter =
+ new DefaultHighlightPainter(null);
+
private JTextComponent textComponent;
private Vector highlights = new Vector();
+ private boolean drawsLayeredHighlights = true;
public DefaultHighlighter()
{
}
+ public boolean getDrawsLayeredHighlights()
+ {
+ return drawsLayeredHighlights;
+ }
+
+ public void setDrawsLayeredHighlights(boolean newValue)
+ {
+ drawsLayeredHighlights = newValue;
+ }
+
private void checkPositions(int p0, int p1)
throws BadLocationException
{
@@ -146,5 +246,16 @@ public class DefaultHighlighter extends LayeredHighlighter
public void paint(Graphics g)
{
+ // Check if there are any highlights.
+ if (highlights.size() == 0)
+ return;
+
+ Shape bounds = textComponent.getBounds();
+
+ for (int index = 0; index < highlights.size(); ++index)
+ {
+ HighlightEntry entry = (HighlightEntry) highlights.get(index);
+ entry.painter.paint(g, entry.p0, entry.p1, bounds, textComponent);
+ }
}
}