DefaultHighlighter.java [plain text]
package javax.swing.text;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.Shape;
import java.util.Vector;
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)
{
return;
}
if (r0 == null || r1 == null)
return;
if (color == null)
g.setColor(c.getSelectionColor());
else
g.setColor(color);
if (r0.y == r1.y)
{
r0.width = r1.x - r0.x;
paintHighlight(g, r0);
return;
}
r0.width = rect.x + rect.width - r0.x;
paintHighlight(g, r0);
r0.y += r0.height;
r0.x = rect.x;
while (r0.y < r1.y)
{
paintHighlight(g, r0);
r0.y += r0.height;
}
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;
int p1;
Highlighter.HighlightPainter painter;
public HighlightEntry(int p0, int p1, Highlighter.HighlightPainter painter)
{
this.p0 = p0;
this.p1 = p1;
this.painter = painter;
}
public int getStartPosition()
{
return p0;
}
public int getEndPosition()
{
return p1;
}
public Highlighter.HighlightPainter getPainter()
{
return painter;
}
}
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
{
if (p0 < 0)
throw new BadLocationException("DefaultHighlighter", p0);
if (p1 < p0)
throw new BadLocationException("DefaultHighlighter", p1);
}
public void install(JTextComponent c)
{
textComponent = c;
removeAllHighlights();
}
public void deinstall(JTextComponent c)
{
textComponent = null;
}
public Object addHighlight(int p0, int p1, Highlighter.HighlightPainter painter)
throws BadLocationException
{
checkPositions(p0, p1);
HighlightEntry entry = new HighlightEntry(p0, p1, painter);
highlights.add(entry);
return entry;
}
public void removeHighlight(Object tag)
{
highlights.remove(tag);
}
public void removeAllHighlights()
{
highlights.clear();
}
public Highlighter.Highlight[] getHighlights()
{
return null;
}
public void changeHighlight(Object tag, int p0, int p1)
throws BadLocationException
{
checkPositions(p0, p1);
HighlightEntry entry = (HighlightEntry) tag;
entry.p0 = p0;
entry.p1 = p1;
}
public void paintLayeredHighlights(Graphics g, int p0, int p1,
Shape viewBounds, JTextComponent editor,
View view)
{
}
public void paint(Graphics g)
{
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);
}
}
}