2002/08/07 04:33:57
[org.ibex.core.git] / src / org / xwt / plat / AWT.java
index ab3cfa9..eedfdc3 100644 (file)
@@ -27,6 +27,31 @@ public class AWT extends Platform {
     protected int _getMaxDescent(String font) { return getFont(font).metrics.getMaxDescent(); }
     protected boolean _supressDirtyOnResize() { return true; }
 
+    protected void postInit() {
+        if (Log.on) Log.log(Platform.class, "               color depth = " +
+                            Toolkit.getDefaultToolkit().getColorModel().getPixelSize() + "bpp");
+    }
+
+    protected void _criticalAbort(String message) {
+        if (Log.on) Log.log(this, message);
+        final Dialog d = new Dialog(new Frame(), "XWT Cannot Continue");
+        d.setLayout(new BorderLayout());
+        TextArea ta = new TextArea("XWT cannot continue because:\n\n" + message, 10, 80);
+        ta.setEditable(false);
+        d.add(ta, "Center");
+        Button b = new Button("OK");
+        b.addActionListener(new ActionListener() {
+                public void actionPerformed(ActionEvent e) {
+                    d.dispose();
+                }
+            });
+        d.add(b, "South");
+        d.setModal(true);
+        d.pack();
+        d.show();
+        new Semaphore().block();
+    }
+
     protected String _getClipBoard() {
         Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
         if (cb == null) return null;
@@ -44,8 +69,16 @@ public class AWT extends Platform {
     /** some platforms (cough, cough, NetscapeVM) have totally broken modifier masks; they will need to override this */
     protected static int modifiersToButtonNumber(int modifiers) {
         if ((modifiers & InputEvent.BUTTON1_MASK) == InputEvent.BUTTON1_MASK) return 1;
-        if ((modifiers & InputEvent.BUTTON2_MASK) == InputEvent.BUTTON2_MASK) return 3;
-        if ((modifiers & InputEvent.BUTTON3_MASK) == InputEvent.BUTTON3_MASK) return 2;
+        if ((modifiers & InputEvent.BUTTON2_MASK) == InputEvent.BUTTON2_MASK) {
+            // ugh, MacOSX reports the right mouse button as BUTTON2_MASK...
+            if (System.getProperty("os.name", "").startsWith("Mac OS X")) return 2;
+            return 3;
+        }
+        if ((modifiers & InputEvent.BUTTON3_MASK) == InputEvent.BUTTON3_MASK) {
+            // ugh, MacOSX reports the right mouse button as BUTTON2_MASK...
+            if (System.getProperty("os.name", "").startsWith("Mac OS X")) return 3;
+            return 2;
+        }
         return 0;
     }
 
@@ -208,9 +241,6 @@ public class AWT extends Platform {
                     componentResized(window.getWidth() - insets.left - insets.right, window.getHeight() - insets.top - insets.bottom);
 
                 Dirty(r.x - insets.left, r.y - insets.top, r.width, r.height);
-
-                // this is safe because AWT's low-level drawing functions are threadsafe
-                blitDirtyScreenRegions();
             }
         }
 
@@ -220,9 +250,6 @@ public class AWT extends Platform {
             public void paint(Graphics gr) {
                 Rectangle r = gr.getClipBounds();
                 Dirty(r.x - insets.left, r.y - insets.top, r.width, r.height);
-
-                // this is safe because AWT's low-level drawing functions are threadsafe
-                blitDirtyScreenRegions();
             }
         }
 
@@ -318,7 +345,7 @@ public class AWT extends Platform {
 
             ourGraphics = null;
         }
-        
+
         public void keyTyped(KeyEvent k) { }
         public void keyPressed(KeyEvent k) { KeyPressed(translateKey(k)); }
         public void keyReleased(KeyEvent k) { KeyReleased(translateKey(k)); }
@@ -405,7 +432,11 @@ public class AWT extends Platform {
         if (ret == null) {
             pf.parse(font);
             if (pf.name.equals("tty")) pf.name = "monospace";
-            ret = new MetricatedFont(pf.name, (pf.bold ? Font.BOLD : 0) | (pf.italic ? Font.ITALIC : 0), pf.size);
+            
+            // Java's fonts tend to be, on average, two points smaller than Win32/X11 fonts. This is most acute in
+            // the proxy password dialog on Linux
+            ret = new MetricatedFont(pf.name, (pf.bold ? Font.BOLD : 0) | (pf.italic ? Font.ITALIC : 0), pf.size + 2);
+
             fontCache.put(font, ret);
         }
         return ret;