2003/09/27 06:42:26
[org.ibex.core.git] / src / org / xwt / plat / Darwin.java
index 813cc75..0812a3d 100644 (file)
@@ -13,11 +13,6 @@ public class Darwin extends POSIX {
     private CarbonOpenGL openGL;
     boolean jaguar; // true if we are on OS X >= 10.2
     
-    // TEMPORARY HACKS (remove these when we ditch platform fonts)
-    protected int _stringWidth(String font, String text) { return (int)Math.round(6.5 * text.length()); }
-    protected int _getMaxAscent(String font) { return 10; }
-    protected int _getMaxDescent(String font) { return 2; }
-    
     // General Methods
     protected String _getAltKeyName() { return "Option"; }
     protected boolean _needsAutoClick() { return false; }
@@ -32,9 +27,8 @@ public class Darwin extends POSIX {
     private native static int cgScreenWidth();
     private native static int cgScreenHeight();
     protected native void   _newBrowserWindow(String url);
-    protected native Proxy   natDetectProxy();
+    protected native HTTP.Proxy   natDetectProxy();
     private   native void    natInit();
-    protected native void   _exit();
 
     private native String natGetClipBoard();
     private native void natSetClipBoard(String text);
@@ -67,9 +61,6 @@ public class Darwin extends POSIX {
     }
 
     
-    // Called by main thread after initialization, this is the event handler
-    protected native void _running();
-    
     static void abort(String err) {
         throw new Error(err);
     }
@@ -81,12 +72,15 @@ public class Darwin extends POSIX {
         }
     }
     
-    protected synchronized Proxy _detectProxy() {
+    protected synchronized HTTP.Proxy _detectProxy() {
         return natDetectProxy();
     }
     
     private static native final boolean isJaguar();
     
+    // Called by main thread after initialization, this is the event handler
+    protected native void runApplicationEventLoop();
+    
     public void init() {
         super.init();
         jaguar = isJaguar();
@@ -95,10 +89,15 @@ public class Darwin extends POSIX {
             openGL.init();
         } catch(OpenGL.NotSupportedException e) {
             Log.log(this,"WARNING: OpenGL support not available: " + e);
-            // FIXME: We need to fallback to Quartz2D
+            // FEATURE: fall back to quartz 2d
             throw new Error("No OpenGL support");
         }
         natInit();
+        new Thread() {
+            public void run() {
+                runApplicationEventLoop();
+            }
+        }.start();
     }
     
     private final class CarbonOpenGL extends OpenGL {
@@ -131,7 +130,7 @@ public class Darwin extends POSIX {
         protected native void activateSharedContext();
     }
     
-    static abstract class CarbonSurface extends Surface {  
+    static abstract class CarbonSurface extends Surface.DoubleBufferedSurface {  
         RawData rawWindowRef;
         RawData rawEventHandlerUPP;
         int modifiers;
@@ -148,8 +147,8 @@ public class Darwin extends POSIX {
         public void setTitleBarText(final String s) { CarbonMessage.add(new CarbonMessage() { public void perform() { natSetTitleBarText(s); } }); }
         private native void natSetSize(int w, int h);
         public void setSize(final int w, final int h) { CarbonMessage.add(new CarbonMessage() { public void perform() { natSetSize(w,h); } }); }
-        private native void natSetLocation(int x, int y);
-        public void setLocation(final int x, final int y) { CarbonMessage.add(new CarbonMessage() { public void perform() { natSetLocation(x,y); } }); }
+        private native void natSetLocation();
+        public void setLocation() { CarbonMessage.add(new CarbonMessage() { public void perform() { natSetLocation(); } }); }
         private native void natToFront();
         public void toFront() { CarbonMessage.add(new CarbonMessage() { public void perform() { natToFront(); } }); }
         private native void natToBack();
@@ -177,7 +176,7 @@ public class Darwin extends POSIX {
         public void _sizeChange(int w, int h) { SizeChange(w,h); }
         
         /* Drawing stuff */
-        public abstract void blit(DoubleBuffer s, int sx, int sy, int dx, int dy, int dx2, int dy2);
+        public abstract void blit(PixelBuffer s, int sx, int sy, int dx, int dy, int dx2, int dy2);
 
         public final void _dispose() { CarbonMessage.add(new CarbonMessage() { public void perform() { natDispose(); } }); }
         public native void natDispose();
@@ -194,7 +193,7 @@ public class Darwin extends POSIX {
         public void reshape(int w, int h) { }
     }
     
-    static class GLCarbonDoubleBuffer extends OpenGL.GLDoubleBuffer {
+    static class GLCarbonPixelBuffer extends OpenGL.GLPixelBuffer {
         RawData rawCTX;
         RawData rawWindowRef;
         int textureName;
@@ -209,12 +208,12 @@ public class Darwin extends POSIX {
             if(!gl.rectangularTextures) n = OpenGL.roundToPowerOf2(n);
             return Math.min(n,gl.maxAglSurfaceTexSize);
         }
-        public GLCarbonDoubleBuffer(int w, int h, final CarbonOpenGL gl) {
+        public GLCarbonPixelBuffer(int w, int h, final CarbonOpenGL gl) {
             super(fixupDimension(gl,w),fixupDimension(gl,h));
             this.gl = gl;
             rectTexture = gl.hasRectangularTextures();
             final Semaphore sem = new Semaphore();
-            CarbonMessage.add(new CarbonMessage() { public void perform() { GLCarbonDoubleBuffer.this.natInit(); sem.release(); } });
+            CarbonMessage.add(new CarbonMessage() { public void perform() { GLCarbonPixelBuffer.this.natInit(); sem.release(); } });
             sem.block();
         }
         public native void activateContext();
@@ -254,9 +253,9 @@ public class Darwin extends POSIX {
             super.setSize(w,h);
         }
         
-        private native void natBlit(GLCarbonDoubleBuffer db, int sx, int sy, int dx, int dy, int dx2, int dy2);
-        public synchronized void blit(DoubleBuffer db, int sx, int sy, int dx, int dy, int dx2, int dy2) {
-            natBlit((GLCarbonDoubleBuffer)db,sx,sy,dx,dy,dx2,dy2);
+        private native void natBlit(GLCarbonPixelBuffer db, int sx, int sy, int dx, int dy, int dx2, int dy2);
+        public synchronized void blit(PixelBuffer db, int sx, int sy, int dx, int dy, int dx2, int dy2) {
+            natBlit((GLCarbonPixelBuffer)db,sx,sy,dx,dy,dx2,dy2);
         }
         
         private native void natReshape(int w, int h);
@@ -265,16 +264,16 @@ public class Darwin extends POSIX {
         public native void natDispose();
     }
 
-    /*private class QZCarbonDoubleBuffer extends DoubleBuffer {
+    /*private class QZCarbonPixelBuffer extends PixelBuffer {
         
-        public QZCarbonDoubleBuffer(int width, int height) {
+        public QZCarbonPixelBuffer(int width, int height) {
         }
     }
        private class QZCarbonSurface extends CarbonSurface {
         public QZCarbonSurface(Box root, boolean framed) {
             super(b,root);
         }
-        public native void blit(DoubleBuffer s, int sx, int sy, int dx, int dy, int dx2, int dy2);
+        public native void blit(PixelBuffer s, int sx, int sy, int dx, int dy, int dx2, int dy2);
     }
     
     private class QZCarbonPicture extends Picture {
@@ -290,11 +289,11 @@ public class Darwin extends POSIX {
         }
     }*/
     
-    protected DoubleBuffer _createDoubleBuffer(int w, int h, Surface owner) {
+    protected PixelBuffer _createPixelBuffer(int w, int h, Surface owner) {
         if(openGL != null)
-            return new GLCarbonDoubleBuffer(w,h,openGL);
+            return new GLCarbonPixelBuffer(w,h,openGL);
         else
-            return /*new QZCarbonDoubleBuffer(w,h)*/ null;
+            return /*new QZCarbonPixelBuffer(w,h)*/ null;
     }
     protected Surface _createSurface(Box b, boolean framed) {
         if(openGL != null)