/** Platform class for most reasonable Java1.2+ JVMs */
public class Java12 extends AWT {
+ public Java12() {
+ // disable the focus manager so we can intercept the tab key
+ javax.swing.FocusManager.setCurrentManager(new javax.swing.FocusManager() {
+ public void processKeyEvent(Component focusedComponent, KeyEvent anEvent) { }
+ public void focusPreviousComponent(Component aComponent) { }
+ public void focusNextComponent(Component aComponent) { }
+ });
+ }
+
/** this is done with reflection in case a new version of the plugin comes out that doesn't let us pull the sun.plugin.* trick */
- protected synchronized HTTP.ProxyInfo _detectProxy() {
- return (HTTP.ProxyInfo)java.security.AccessController.doPrivileged(new java.security.PrivilegedAction() {
+ protected synchronized org.xwt.Proxy _detectProxy() {
+ return (org.xwt.Proxy)java.security.AccessController.doPrivileged(new java.security.PrivilegedAction() {
public Object run() {
try {
- HTTP.ProxyInfo pi = new HTTP.ProxyInfo();
+ org.xwt.Proxy pi = new org.xwt.Proxy();
Class PluginProxyHandler = Class.forName("sun.plugin.protocol.PluginProxyHandler");
Method getDefaultProxyHandler = PluginProxyHandler.getMethod("getDefaultProxyHandler", new Class[] { });
} catch (Throwable e) {
if (Log.on) Log.log(this, "exception while querying sun.plugin.protocol.PluginProxyHandler: " + e);
- if (Log.on) Log.log(this, e);
return null;
}
}});
// Inner Classes //////////////////////////////////////////////////////////////////
+ private static Cursor invisibleCursor =
+ Toolkit.getDefaultToolkit().createCustomCursor(new BufferedImage(2, 2, BufferedImage.TYPE_INT_ARGB),
+ new Point(1, 1), "invisible");
+
protected static class Java12Surface extends AWTSurface {
public Java12Surface(Box root, boolean framed) { super(root, framed); }
if (b) frame.setState(java.awt.Frame.ICONIFIED);
else frame.setState(java.awt.Frame.NORMAL);
}
+
+ public void syncCursor() {
+ if (cursor.equals("invisible")) window.setCursor(invisibleCursor);
+ else super.syncCursor();
+ }
}
protected static class Java12DoubleBuffer extends AWTDoubleBuffer {
/** used to avoid garbage creation with getClipBounds() */
private static Rectangle clipBounds = new Rectangle();
- // FEATURE: performance hits here are a result of getSubimage() -- if we don't call it, Graphics2D will. It creates tons of int[]s, as well as
- // BufferedImage instances which get stored in an array deep inside Graphics2D, which the JDK does a LINEAR SCAN through. Aarrgh.
- // This is rumored to be fixed in JDK 1.4.
protected static void _doDrawImage(Graphics g, Image i, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, ImageObserver o) {
-
if (dx1 == dx2 || dy1 == dy2) return;
-
- if (dx2 - dx1 != sx2 - sx1 || dy2 - dy1 != sy2 - sy1)
- g.drawImage(i, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, o);
- else {
- // fastpath for images that do not need to be scaled
- if (i instanceof BufferedImage) {
- BufferedImage b = (BufferedImage)i;
-
- if (dx2 - dx1 != b.getWidth(null) || dy2 - dy1 != b.getHeight(null)) {
- b = b.getSubimage(sx1, sy1, sx2 - sx1, sy2 - sy1);
- sx2 = sx2 - sx1;
- sy2 = sy2 - sy1;
- sx1 = 0;
- sy1 = 0;
- }
- g.drawImage(b, dx1, dy1, o);
-
- } else {
-
- // workaround for a wierd JDK bug
- boolean skip = false;
- try { g.getClipBounds(clipBounds); } catch (NullPointerException n) { skip = true; }
-
- g.clipRect(dx1, dy1, dx2 - dx1, dy2 - dy1);
- g.drawImage(i, dx1 - sx1, dy1 - sy1, o);
-
- if (!skip) g.setClip(clipBounds.x, clipBounds.y, clipBounds.x + clipBounds.width, clipBounds.y + clipBounds.height);
- }
- }
+ g.drawImage(i, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, o);
}
protected org.xwt.Weak _getWeak(Object o) { return new Java12Weak(o); }
}
}
- /** used to notify the user of very serious failures; usually used when logging is not working or unavailable */
- protected void _criticalAbort(String message) {
- if (Log.on) Log.log(this, message);
- new Semaphore().block();
- }
-
}