X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fxwt%2Fplat%2FDarwin.java;h=77434418b076bef307bd5f3589c9109edae52650;hb=b213eae7072297f9121511fa671062f9b07fcc59;hp=07c2fe59cc27a1b8e33fbe1e68f939a1b671ffb6;hpb=47f708e9d75f65e097c5968653139859047ec5a0;p=org.ibex.core.git diff --git a/src/org/xwt/plat/Darwin.java b/src/org/xwt/plat/Darwin.java index 07c2fe5..7743441 100644 --- a/src/org/xwt/plat/Darwin.java +++ b/src/org/xwt/plat/Darwin.java @@ -1,10 +1,11 @@ -// Copyright 2003 Adam Megacz, see the COPYING file for licensing [LGPL] +// Copyright 2004 Adam Megacz, see the COPYING file for licensing [LGPL] // Authors: Brian Alliet and Evan Jones package org.xwt.plat; import gnu.gcj.RawData; import org.xwt.util.*; +import org.xwt.js.*; import org.xwt.*; import java.util.*; @@ -77,41 +78,43 @@ public class Darwin extends POSIX { 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(); + public void postInit() { jaguar = isJaguar(); try { openGL = new CarbonOpenGL(); openGL.init(); } catch(OpenGL.NotSupportedException e) { - Log.log(this,"WARNING: OpenGL support not available: " + e); + Log.info(this,"WARNING: OpenGL support not available: " + e); // FEATURE: fall back to quartz 2d throw new Error("No OpenGL support"); } natInit(); } - public void _running() { runApplicationEventLoop(); } + protected native void runApplicationEventLoop(); + private class DarwinScheduler extends org.xwt.Scheduler { + public void run() { + new Thread() { public void run() { defaultRun(); } }.start(); + runApplicationEventLoop(); + } + } private final class CarbonOpenGL extends OpenGL { public RawData rawPixelFormat; - public RawData rawSharedInterpreter; + public RawData rawSharedContext; public int maxAglSurfaceTexSize; public int maxSurfaceWidth; public int maxSurfaceHeight; private native boolean initPixelFormat(); - private native void initSharedInterpreter(); + private native void initSharedContext(); public CarbonOpenGL() throws NotSupportedException { if(!jaguar) throw new NotSupportedException("OpenGL requires Mac OS X 10.2 or greater"); if(!initPixelFormat()) throw new NotSupportedException("Couldn't get an acceptable pixel format"); - initSharedInterpreter(); + initSharedContext(); } public void init() throws NotSupportedException { @@ -119,11 +122,11 @@ public class Darwin extends POSIX { maxAglSurfaceTexSize = rectangularTextures ? maxRectTexSize : maxTexSize; if(renderer.startsWith("ATI Radeon 7500")) { maxAglSurfaceTexSize = Math.min(rectangularTextures ? 1600 : 1024,maxAglSurfaceTexSize); - Log.log(this,"Working around Radeon 7500 bug: maxAglSurfaceTexSize: " + maxAglSurfaceTexSize); + Log.info(this,"Working around Radeon 7500 bug: maxAglSurfaceTexSize: " + maxAglSurfaceTexSize); } maxSurfaceWidth = maxSurfaceHeight = maxAglSurfaceTexSize; } - protected native void activateSharedInterpreter(); + protected native void activateSharedContext(); } static abstract class CarbonSurface extends Surface.DoubleBufferedSurface { @@ -216,7 +219,7 @@ public class Darwin extends POSIX { CarbonMessage.add(new CarbonMessage() { public void perform() { GLCarbonPixelBuffer.this.natInit(); sem.release(); } }); sem.block(); } - public native void activateInterpreter(); + public native void activateContext(); protected void finalize() { CarbonMessage.add(new CarbonMessage() { public void perform() { natCleanup(rawWindowRef,rawCTX); } }); gl.deleteTexture(textureName); @@ -257,7 +260,7 @@ public class Darwin extends POSIX { // The blit_lock ensures the window size does not change through the entire blit operation. - public void render_() { + public void render() { blitLock(); while(pendingResize) blitWait(); if(needsReshape) { @@ -265,9 +268,10 @@ public class Darwin extends POSIX { reshape(winWidth,winHeight); clear(); - Dirty(0,0,getWidth(),getHeight()); + Dirty(0,0,winWidth,winHeight); + //Dirty(0,0,getWidth(),getHeight()); } - super.render_(); + super.render(); flush(); blitUnlock(); } @@ -316,17 +320,17 @@ public class Darwin extends POSIX { else return /*new QZCarbonSufrace(b,framed)*/ null; } - protected Picture _createPicture(int[] data, int w, int h) { + protected Picture _createPicture(JS r) { if(openGL != null) - return openGL.createPicture(data,w,h); + return openGL._createPicture(r, true); else return /*new QZCarbonPicture(data,w,h);*/ null; } - protected Picture _createAlphaOnlyPicture(byte[] data, int w, int h) { + protected org.xwt.Font.Glyph _createGlyph(org.xwt.Font f, char c) { if(openGL != null) - return openGL.createAlphaOnlyPicture(data,w,h); + return openGL._createGlyph(f, c); else - return super.createAlphaOnlyPicture(data,w,h); + return super.createGlyph(f, c); } /* A message that is sent through the carbon event queue */