Imported GNU Classpath 0.90

Imported GNU Classpath 0.90
       * scripts/makemake.tcl: Set gnu/java/awt/peer/swing to ignore.
       * gnu/classpath/jdwp/VMFrame.java (SIZE): New constant.
       * java/lang/VMCompiler.java: Use gnu.java.security.hash.MD5.
       * java/lang/Math.java: New override file.
       * java/lang/Character.java: Merged from Classpath.
       (start, end): Now 'int's.
       (canonicalName): New field.
       (CANONICAL_NAME, NO_SPACES_NAME, CONSTANT_NAME): New constants.
       (UnicodeBlock): Added argument.
       (of): New overload.
       (forName): New method.
       Updated unicode blocks.
       (sets): Updated.
       * sources.am: Regenerated.
       * Makefile.in: Likewise.

From-SVN: r111942
This commit is contained in:
Mark Wielaard 2006-03-10 21:46:48 +00:00
parent 27079765d0
commit 8aa540d2f7
1367 changed files with 188789 additions and 22762 deletions

View file

@ -1,5 +1,5 @@
/* PlainView.java --
Copyright (C) 2004, 2005 Free Software Foundation, Inc.
Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@ -46,7 +46,7 @@ import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.Shape;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentEvent.ElementChange;
@ -137,22 +137,32 @@ public class PlainView extends View implements TabExpander
return rect;
}
/**
* Draws a line of text. The X and Y coordinates specify the start of
* the <em>baseline</em> of the line.
*
* @param lineIndex the index of the line
* @param g the graphics to use for drawing the text
* @param x the X coordinate of the baseline
* @param y the Y coordinate of the baseline
*/
protected void drawLine(int lineIndex, Graphics g, int x, int y)
{
try
{
metrics = g.getFontMetrics();
// FIXME: Selected text are not drawn yet.
Element line = getElement().getElement(lineIndex);
drawUnselectedText(g, x, y, line.getStartOffset(), line.getEndOffset());
//drawSelectedText(g, , , , );
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, , , , );
}
catch (BadLocationException e)
{
AssertionError ae = new AssertionError("Unexpected bad location");
ae.initCause(e);
throw ae;
}
{
AssertionError ae = new AssertionError("Unexpected bad location");
ae.initCause(e);
throw ae;
}
}
protected int drawSelectedText(Graphics g, int x, int y, int p0, int p1)
@ -164,6 +174,20 @@ public class PlainView extends View implements TabExpander
return Utilities.drawTabbedText(segment, x, y, g, this, 0);
}
/**
* Draws a chunk of unselected text.
*
* @param g the graphics to use for drawing the text
* @param x the X coordinate of the baseline
* @param y the Y coordinate of the baseline
* @param p0 the start position in the text model
* @param p1 the end position in the text model
*
* @return the X location of the end of the range
*
* @throws BadLocationException if <code>p0</code> or <code>p1</code> are
* invalid
*/
protected int drawUnselectedText(Graphics g, int x, int y, int p0, int p1)
throws BadLocationException
{
@ -194,12 +218,12 @@ public class PlainView extends View implements TabExpander
// FIXME: Text may be scrolled.
Document document = textComponent.getDocument();
Element root = document.getDefaultRootElement();
int y = rect.y;
int y = rect.y + metrics.getAscent();
for (int i = 0; i < root.getElementCount(); i++)
{
drawLine(i, g, rect.x, y);
y += metrics.getHeight();
drawLine(i, g, rect.x, y);
y += metrics.getHeight();
}
}
@ -284,18 +308,20 @@ public class PlainView extends View implements TabExpander
// make sure we have the metrics
updateMetrics();
float span = 0;
Element el = getElement();
float span;
switch (axis)
{
case X_AXIS:
span = determineMaxLineLength();
break;
case Y_AXIS:
default:
span = metrics.getHeight() * el.getElementCount();
break;
}
return span;
}
@ -318,12 +344,19 @@ public class PlainView extends View implements TabExpander
Element root = doc.getDefaultRootElement();
// PlainView doesn't support line-wrapping so we can find out which
// Element was clicked on just by the y-position
int lineClicked = (int) (y - rec.y) / metrics.getHeight();
if (lineClicked >= root.getElementCount())
return getEndOffset() - 1;
// Element was clicked on just by the y-position.
// Since the coordinates may be outside of the coordinate space
// of the allocation area (e.g. user dragged mouse outside
// the component) we have to limit the values.
// This has the nice effect that the user can drag the
// mouse above or below the component and it will still
// react to the x values (e.g. when selecting).
int lineClicked
= Math.min(Math.max((int) (y - rec.y) / metrics.getHeight(), 0),
root.getElementCount() - 1);
Element line = root.getElement(lineClicked);
Segment s = getLineBuffer();
int start = line.getStartOffset();
// We don't want the \n at the end of the line.
@ -353,6 +386,8 @@ public class PlainView extends View implements TabExpander
*/
protected void updateDamage(DocumentEvent changes, Shape a, ViewFactory f)
{
float oldMaxLineLength = maxLineLength;
Rectangle alloc = a.getBounds();
Element el = getElement();
ElementChange ec = changes.getChange(el);
@ -360,7 +395,19 @@ public class PlainView extends View implements TabExpander
// repaint the changed line
if (ec == null)
{
int line = getElement().getElementIndex(changes.getOffset());
int line = el.getElementIndex(changes.getOffset());
// If characters have been removed from the current longest line
// we have to find out which one is the longest now otherwise
// the preferred x-axis span will not shrink.
if (changes.getType() == DocumentEvent.EventType.REMOVE
&& el.getElement(line) == longestLine)
{
maxLineLength = -1;
if (determineMaxLineLength() != alloc.width)
preferenceChanged(this, true, false);
}
damageLineRange(line, line, a, getContainer());
return;
}
@ -373,12 +420,13 @@ public class PlainView extends View implements TabExpander
if (removed == null && newElements == null)
{
int line = getElement().getElementIndex(changes.getOffset());
damageLineRange(line, line, a, getContainer());
return;
}
// Check to see if we removed the longest line, if so we have to
// search through all lines and find the longest one again
// search through all lines and find the longest one again.
if (removed != null)
{
for (int i = 0; i < removed.length; i++)
@ -386,8 +434,11 @@ public class PlainView extends View implements TabExpander
{
// reset maxLineLength and search through all lines for longest one
maxLineLength = -1;
determineMaxLineLength();
if (determineMaxLineLength() != alloc.width)
preferenceChanged(this, true, removed.length != newElements.length);
((JTextComponent)getContainer()).repaint();
return;
}
}
@ -397,6 +448,7 @@ public class PlainView extends View implements TabExpander
{
// No lines were added, just repaint the container and exit
((JTextComponent)getContainer()).repaint();
return;
}
@ -445,6 +497,14 @@ public class PlainView extends View implements TabExpander
maxLineLength = longestNewLength;
longestLine = longestNewLine;
}
// Report any changes to the preferred sizes of the view
// which may cause the underlying component to be revalidated.
boolean widthChanged = oldMaxLineLength != maxLineLength;
boolean heightChanged = removed.length != newElements.length;
if (widthChanged || heightChanged)
preferenceChanged(this, widthChanged, heightChanged);
// Repaint the container
((JTextComponent)getContainer()).repaint();
}
@ -511,7 +571,9 @@ public class PlainView extends View implements TabExpander
host.repaint();
else
{
Rectangle repaintRec = rec0.union(rec1);
Rectangle repaintRec = SwingUtilities.computeUnion(rec0.x, rec0.y,
rec0.width,
rec0.height, rec1);
host.repaint(repaintRec.x, repaintRec.y, repaintRec.width,
repaintRec.height);
}