Imported Classpath 0.18.
* sources.am, Makefile.in: Updated. * Makefile.am (nat_source_files): Removed natProxy.cc. * java/lang/reflect/natProxy.cc: Removed. * gnu/classpath/jdwp/VMFrame.java, gnu/classpath/jdwp/VMIdManager.java, gnu/classpath/jdwp/VMVirtualMachine.java, java/lang/reflect/VMProxy.java: New files. 2005-09-23 Thomas Fitzsimmons <fitzsim@redhat.com> * scripts/makemake.tcl (verbose): Add gnu/java/awt/peer/qt to BC list. 2005-09-23 Thomas Fitzsimmons <fitzsim@redhat.com> * gnu/java/net/DefaultContentHandlerFactory.java (getContent): Remove ClasspathToolkit references. 2005-09-23 Thomas Fitzsimmons <fitzsim@redhat.com> * gnu/awt/xlib/XCanvasPeer.java: Add new peer methods. * gnu/awt/xlib/XFramePeer.java: Likewise. * gnu/awt/xlib/XGraphicsConfiguration.java: Likewise. 2005-09-23 Thomas Fitzsimmons <fitzsim@redhat.com> * Makefile.am (libgcjawt_la_SOURCES): Remove jawt.c. Add classpath/native/jawt/jawt.c. * Makefile.in: Regenerate. * jawt.c: Remove file. * include/Makefile.am (tool_include__HEADERS): Remove jawt.h and jawt_md.h. Add ../classpath/include/jawt.h and ../classpath/include/jawt_md.h. * include/Makefile.in: Regenerate. * include/jawt.h: Regenerate. * include/jawt_md.h: Regenerate. From-SVN: r104586
This commit is contained in:
parent
9b044d1951
commit
1ea63ef8be
544 changed files with 34724 additions and 14512 deletions
|
@ -37,17 +37,28 @@ exception statement from your version. */
|
|||
|
||||
package gnu.java.awt;
|
||||
|
||||
import java.applet.Applet;
|
||||
import java.awt.Component;
|
||||
import java.awt.Container;
|
||||
import java.awt.Font;
|
||||
import java.awt.FontMetrics;
|
||||
import java.awt.Insets;
|
||||
import java.awt.Point;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.Toolkit;
|
||||
import java.awt.Window;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.util.AbstractSequentialList;
|
||||
import java.util.List;
|
||||
import java.util.ListIterator;
|
||||
import java.util.NoSuchElementException;
|
||||
import java.util.WeakHashMap;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
|
||||
/**
|
||||
* This class provides utility methods that are commonly used in AWT
|
||||
* (and Swing).
|
||||
* This class mirrors the javax.swing.SwingUtilities class. It
|
||||
* provides commonly needed functionalities for AWT classes without
|
||||
* the need to reference classes in the javax.swing package.
|
||||
*/
|
||||
public class AWTUtilities
|
||||
{
|
||||
|
@ -318,4 +329,366 @@ public class AWTUtilities
|
|||
|
||||
return visibleChildren;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the portion of the base rectangle which is inside the
|
||||
* insets.
|
||||
*
|
||||
* @param base The rectangle to apply the insets to
|
||||
* @param insets The insets to apply to the base rectangle
|
||||
* @param ret A rectangle to use for storing the return value, or
|
||||
* <code>null</code>
|
||||
*
|
||||
* @return The calculated area inside the base rectangle and its insets,
|
||||
* either stored in ret or a new Rectangle if ret is <code>null</code>
|
||||
*
|
||||
* @see #calculateInnerArea
|
||||
*/
|
||||
public static Rectangle calculateInsetArea(Rectangle base, Insets insets,
|
||||
Rectangle ret)
|
||||
{
|
||||
if (ret == null)
|
||||
ret = new Rectangle();
|
||||
ret.setBounds(base.x + insets.left, base.y + insets.top,
|
||||
base.width - (insets.left + insets.right),
|
||||
base.height - (insets.top + insets.bottom));
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculates the bounds of a component in the component's own coordinate
|
||||
* space. The result has the same height and width as the component's
|
||||
* bounds, but its location is set to (0,0).
|
||||
*
|
||||
* @param aComponent The component to measure
|
||||
*
|
||||
* @return The component's bounds in its local coordinate space
|
||||
*/
|
||||
public static Rectangle getLocalBounds(Component aComponent)
|
||||
{
|
||||
Rectangle bounds = aComponent.getBounds();
|
||||
return new Rectangle(0, 0, bounds.width, bounds.height);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the font metrics object for a given font. The metrics can be
|
||||
* used to calculate crude bounding boxes and positioning information,
|
||||
* for laying out components with textual elements.
|
||||
*
|
||||
* @param font The font to get metrics for
|
||||
*
|
||||
* @return The font's metrics
|
||||
*
|
||||
* @see java.awt.font.GlyphMetrics
|
||||
*/
|
||||
public static FontMetrics getFontMetrics(Font font)
|
||||
{
|
||||
return Toolkit.getDefaultToolkit().getFontMetrics(font);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the least ancestor of <code>comp</code> which has the
|
||||
* specified name.
|
||||
*
|
||||
* @param name The name to search for
|
||||
* @param comp The component to search the ancestors of
|
||||
*
|
||||
* @return The nearest ancestor of <code>comp</code> with the given
|
||||
* name, or <code>null</code> if no such ancestor exists
|
||||
*
|
||||
* @see java.awt.Component#getName
|
||||
* @see #getAncestorOfClass
|
||||
*/
|
||||
public static Container getAncestorNamed(String name, Component comp)
|
||||
{
|
||||
while (comp != null && (comp.getName() != name))
|
||||
comp = comp.getParent();
|
||||
return (Container) comp;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the least ancestor of <code>comp</code> which is an instance
|
||||
* of the specified class.
|
||||
*
|
||||
* @param c The class to search for
|
||||
* @param comp The component to search the ancestors of
|
||||
*
|
||||
* @return The nearest ancestor of <code>comp</code> which is an instance
|
||||
* of the given class, or <code>null</code> if no such ancestor exists
|
||||
*
|
||||
* @see #getAncestorOfClass
|
||||
* @see #windowForComponent
|
||||
* @see
|
||||
*
|
||||
*/
|
||||
public static Container getAncestorOfClass(Class c, Component comp)
|
||||
{
|
||||
while (comp != null && (! c.isInstance(comp)))
|
||||
comp = comp.getParent();
|
||||
return (Container) comp;
|
||||
}
|
||||
|
||||
/**
|
||||
* Equivalent to calling <code>getAncestorOfClass(Window, comp)</code>.
|
||||
*
|
||||
* @param comp The component to search for an ancestor window
|
||||
*
|
||||
* @return An ancestral window, or <code>null</code> if none exists
|
||||
*/
|
||||
public static Window windowForComponent(Component comp)
|
||||
{
|
||||
return (Window) getAncestorOfClass(Window.class, comp);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the "root" of the component tree containint <code>comp</code>
|
||||
* The root is defined as either the <em>least</em> ancestor of
|
||||
* <code>comp</code> which is a {@link Window}, or the <em>greatest</em>
|
||||
* ancestor of <code>comp</code> which is a {@link Applet} if no {@link
|
||||
* Window} ancestors are found.
|
||||
*
|
||||
* @param comp The component to search for a root
|
||||
*
|
||||
* @return The root of the component's tree, or <code>null</code>
|
||||
*/
|
||||
public static Component getRoot(Component comp)
|
||||
{
|
||||
Applet app = null;
|
||||
Window win = null;
|
||||
|
||||
while (comp != null)
|
||||
{
|
||||
if (win == null && comp instanceof Window)
|
||||
win = (Window) comp;
|
||||
else if (comp instanceof Applet)
|
||||
app = (Applet) comp;
|
||||
comp = comp.getParent();
|
||||
}
|
||||
|
||||
if (win != null)
|
||||
return win;
|
||||
else
|
||||
return app;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if a descends from b, in other words if b is an
|
||||
* ancestor of a.
|
||||
*
|
||||
* @param a The child to search the ancestry of
|
||||
* @param b The potential ancestor to search for
|
||||
*
|
||||
* @return true if a is a descendent of b, false otherwise
|
||||
*/
|
||||
public static boolean isDescendingFrom(Component a, Component b)
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
if (a == null || b == null)
|
||||
return false;
|
||||
if (a == b)
|
||||
return true;
|
||||
a = a.getParent();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the deepest descendent of parent which is both visible and
|
||||
* contains the point <code>(x,y)</code>. Returns parent when either
|
||||
* parent is not a container, or has no children which contain
|
||||
* <code>(x,y)</code>. Returns <code>null</code> when either
|
||||
* <code>(x,y)</code> is outside the bounds of parent, or parent is
|
||||
* <code>null</code>.
|
||||
*
|
||||
* @param parent The component to search the descendents of
|
||||
* @param x Horizontal coordinate to search for
|
||||
* @param y Vertical coordinate to search for
|
||||
*
|
||||
* @return A component containing <code>(x,y)</code>, or
|
||||
* <code>null</code>
|
||||
*
|
||||
* @see java.awt.Container#findComponentAt
|
||||
*/
|
||||
public static Component getDeepestComponentAt(Component parent, int x, int y)
|
||||
{
|
||||
if (parent == null || (! parent.contains(x, y)))
|
||||
return null;
|
||||
|
||||
if (! (parent instanceof Container))
|
||||
return parent;
|
||||
|
||||
Container c = (Container) parent;
|
||||
return c.findComponentAt(x, y);
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a point from a component's local coordinate space to "screen"
|
||||
* coordinates (such as the coordinate space mouse events are delivered
|
||||
* in). This operation is equivalent to translating the point by the
|
||||
* location of the component (which is the origin of its coordinate
|
||||
* space).
|
||||
*
|
||||
* @param p The point to convert
|
||||
* @param c The component which the point is expressed in terms of
|
||||
*
|
||||
* @see convertPointFromScreen
|
||||
*/
|
||||
public static void convertPointToScreen(Point p, Component c)
|
||||
{
|
||||
Point c0 = c.getLocationOnScreen();
|
||||
p.translate(c0.x, c0.y);
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a point from "screen" coordinates (such as the coordinate
|
||||
* space mouse events are delivered in) to a component's local coordinate
|
||||
* space. This operation is equivalent to translating the point by the
|
||||
* negation of the component's location (which is the origin of its
|
||||
* coordinate space).
|
||||
*
|
||||
* @param p The point to convert
|
||||
* @param c The component which the point should be expressed in terms of
|
||||
*/
|
||||
public static void convertPointFromScreen(Point p, Component c)
|
||||
{
|
||||
Point c0 = c.getLocationOnScreen();
|
||||
p.translate(-c0.x, -c0.y);
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a point <code>(x,y)</code> from the coordinate space of one
|
||||
* component to another. This is equivalent to converting the point from
|
||||
* <code>source</code> space to screen space, then back from screen space
|
||||
* to <code>destination</code> space. If exactly one of the two
|
||||
* Components is <code>null</code>, it is taken to refer to the root
|
||||
* ancestor of the other component. If both are <code>null</code>, no
|
||||
* transformation is done.
|
||||
*
|
||||
* @param source The component which the point is expressed in terms of
|
||||
* @param x Horizontal coordinate of point to transform
|
||||
* @param y Vertical coordinate of point to transform
|
||||
* @param destination The component which the return value will be
|
||||
* expressed in terms of
|
||||
*
|
||||
* @return The point <code>(x,y)</code> converted from the coordinate
|
||||
* space of the
|
||||
* source component to the coordinate space of the destination component
|
||||
*
|
||||
* @see #convertPointToScreen
|
||||
* @see #convertPointFromScreen
|
||||
* @see #convertRectangle
|
||||
* @see #getRoot
|
||||
*/
|
||||
public static Point convertPoint(Component source, int x, int y,
|
||||
Component destination)
|
||||
{
|
||||
Point pt = new Point(x, y);
|
||||
|
||||
if (source == null && destination == null)
|
||||
return pt;
|
||||
|
||||
if (source == null)
|
||||
source = getRoot(destination);
|
||||
|
||||
if (destination == null)
|
||||
destination = getRoot(source);
|
||||
|
||||
convertPointToScreen(pt, source);
|
||||
convertPointFromScreen(pt, destination);
|
||||
|
||||
return pt;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Converts a rectangle from the coordinate space of one component to
|
||||
* another. This is equivalent to converting the rectangle from
|
||||
* <code>source</code> space to screen space, then back from screen space
|
||||
* to <code>destination</code> space. If exactly one of the two
|
||||
* Components is <code>null</code>, it is taken to refer to the root
|
||||
* ancestor of the other component. If both are <code>null</code>, no
|
||||
* transformation is done.
|
||||
*
|
||||
* @param source The component which the rectangle is expressed in terms of
|
||||
* @param rect The rectangle to convert
|
||||
* @param destination The component which the return value will be
|
||||
* expressed in terms of
|
||||
*
|
||||
* @return A new rectangle, equal in size to the input rectangle, but
|
||||
* with its position converted from the coordinate space of the source
|
||||
* component to the coordinate space of the destination component
|
||||
*
|
||||
* @see #convertPointToScreen
|
||||
* @see #convertPointFromScreen
|
||||
* @see #convertPoint
|
||||
* @see #getRoot
|
||||
*/
|
||||
public static Rectangle convertRectangle(Component source, Rectangle rect,
|
||||
Component destination)
|
||||
{
|
||||
Point pt = convertPoint(source, rect.x, rect.y, destination);
|
||||
return new Rectangle(pt.x, pt.y, rect.width, rect.height);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a mouse event which refrers to one component to another. This
|
||||
* includes changing the mouse event's coordinate space, as well as the
|
||||
* source property of the event. If <code>source</code> is
|
||||
* <code>null</code>, it is taken to refer to <code>destination</code>'s
|
||||
* root component. If <code>destination</code> is <code>null</code>, the
|
||||
* new event will remain expressed in <code>source</code>'s coordinate
|
||||
* system.
|
||||
*
|
||||
* @param source The component the mouse event currently refers to
|
||||
* @param sourceEvent The mouse event to convert
|
||||
* @param destination The component the new mouse event should refer to
|
||||
*
|
||||
* @return A new mouse event expressed in terms of the destination
|
||||
* component's coordinate space, and with the destination component as
|
||||
* its source
|
||||
*
|
||||
* @see #convertPoint
|
||||
*/
|
||||
public static MouseEvent convertMouseEvent(Component source,
|
||||
MouseEvent sourceEvent,
|
||||
Component destination)
|
||||
{
|
||||
Point newpt = convertPoint(source, sourceEvent.getX(), sourceEvent.getY(),
|
||||
destination);
|
||||
|
||||
return new MouseEvent(destination, sourceEvent.getID(),
|
||||
sourceEvent.getWhen(), sourceEvent.getModifiers(),
|
||||
newpt.x, newpt.y, sourceEvent.getClickCount(),
|
||||
sourceEvent.isPopupTrigger(),
|
||||
sourceEvent.getButton());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Calls {@link java.awt.EventQueue.invokeLater} with the
|
||||
* specified {@link Runnable}.
|
||||
*/
|
||||
public static void invokeLater(Runnable doRun)
|
||||
{
|
||||
java.awt.EventQueue.invokeLater(doRun);
|
||||
}
|
||||
|
||||
/**
|
||||
* Calls {@link java.awt.EventQueue.invokeAndWait} with the
|
||||
* specified {@link Runnable}.
|
||||
*/
|
||||
public static void invokeAndWait(Runnable doRun)
|
||||
throws InterruptedException,
|
||||
InvocationTargetException
|
||||
{
|
||||
java.awt.EventQueue.invokeAndWait(doRun);
|
||||
}
|
||||
|
||||
/**
|
||||
* Calls {@link java.awt.EventQueue.isEventDispatchThread}.
|
||||
*/
|
||||
public static boolean isEventDispatchThread()
|
||||
{
|
||||
return java.awt.EventQueue.isDispatchThread();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue