Mac OS X: Remove invokeAndWait stuff since AWT, unlike swing, is thread safe

This commit is contained in:
Elias Naur 2005-01-21 22:07:20 +00:00
parent 0c8f349653
commit 9a4824e79b
3 changed files with 29 additions and 109 deletions

View File

@ -92,11 +92,12 @@ final class MacOSXDisplay implements DisplayImplementation {
}
public void destroyWindow() {
if (MacOSXFrame.getDevice().getFullScreenWindow() != null)
MacOSXFrame.getDevice().setFullScreenWindow(null);
if (frame != null) {
if (MacOSXFrame.getDevice().getFullScreenWindow() == frame)
MacOSXFrame.getDevice().setFullScreenWindow(null);
setView(null);
frame.syncDispose();
if (frame.isDisplayable())
frame.dispose();
frame = null;
}
hideUI(false);
@ -172,7 +173,7 @@ final class MacOSXDisplay implements DisplayImplementation {
}
public void setTitle(String title) {
frame.syncSetTitle(title);
frame.setTitle(title);
}
public boolean isCloseRequested() {
@ -238,7 +239,7 @@ final class MacOSXDisplay implements DisplayImplementation {
public native void setVSyncEnabled(boolean sync);
public void reshape(int x, int y, int width, int height) {
frame.syncReshape(x, y, width, height);
frame.resize(x, y, width, height);
}
/* Mouse */
@ -307,7 +308,7 @@ final class MacOSXDisplay implements DisplayImplementation {
public void setNativeCursor(Object handle) throws LWJGLException {
Cursor awt_cursor = (Cursor)handle;
frame.syncSetCursor(awt_cursor);
frame.setCursor(awt_cursor);
}
public int getMinCursorSize() {

View File

@ -78,23 +78,25 @@ final class MacOSXFrame extends Frame implements WindowListener, ComponentListen
/** For some strange reason, the display mode is sometimes silently capped even though the mode is reported as supported */
if ( requested_mode.getWidth() != real_mode.getWidth() || requested_mode.getHeight() != real_mode.getHeight() ) {
getDevice().setFullScreenWindow(null);
syncDispose();
if (isDisplayable())
dispose();
throw new LWJGLException("AWT capped mode: requested mode = " + requested_mode.getWidth() + "x" + requested_mode.getHeight() +
" but got " + real_mode.getWidth() + " " + real_mode.getHeight());
}
}
pack();
syncReshape(x, y, mode.getWidth(), mode.getHeight());
invokeAWT(new Runnable() {
public void run() {
setVisible(true);
requestFocus();
canvas.requestFocus();
canvas.initializeCanvas();
}
});
resize(x, y, mode.getWidth(), mode.getHeight());
setVisible(true);
requestFocus();
canvas.requestFocus();
canvas.initializeCanvas();
}
public void resize(int x, int y, int width, int height) {
Insets insets = getInsets();
setBounds(x, y, width + insets.left + insets.right, height + insets.top + insets.bottom);
}
public Rectangle syncGetBounds() {
synchronized ( this ) {
return bounds;
@ -164,32 +166,6 @@ final class MacOSXFrame extends Frame implements WindowListener, ComponentListen
}
}
public void syncDispose() {
invokeAWT(new Runnable() {
public void run() {
if ( isDisplayable() )
dispose();
}
});
}
private class TitleSetter implements Runnable {
private final String title;
TitleSetter(String title) {
this.title = title;
}
public void run() {
setTitle(title);
}
}
public void syncSetTitle(String title) {
invokeAWT(new TitleSetter(title));
}
public boolean syncIsCloseRequested() {
boolean result;
synchronized ( this ) {
@ -223,59 +199,4 @@ final class MacOSXFrame extends Frame implements WindowListener, ComponentListen
}
return result;
}
private class Reshaper implements Runnable {
private final int x;
private final int y;
private final int width;
private final int height;
Reshaper(int x, int y, int width, int height) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
public void run() {
Insets insets = getInsets();
setBounds(x, y, width + insets.left + insets.right, height + insets.top + insets.bottom);
}
}
private void invokeAWT(Runnable r) {
try {
if (java.awt.EventQueue.isDispatchThread()) {
r.run();
} else {
java.awt.EventQueue.invokeAndWait(r);
}
} catch (InterruptedException e) {
// ignore
} catch (InvocationTargetException e) {
throw new RuntimeException(e);
}
}
public void syncReshape(int x, int y, int width, int height) {
invokeAWT(new Reshaper(x, y, width, height));
}
private class CursorSetter implements Runnable {
private final java.awt.Cursor awt_cursor;
CursorSetter(java.awt.Cursor awt_cursor) {
this.awt_cursor = awt_cursor;
}
public void run() {
canvas.setCursor(awt_cursor);
}
}
public void syncSetCursor(java.awt.Cursor awt_cursor) {
invokeAWT(new CursorSetter(awt_cursor));
}
}

View File

@ -55,23 +55,21 @@ final class MacOSXGLCanvas extends Canvas implements ComponentListener {
}
public void paint(Graphics g) {
// Do nothing
synchronized ( this ) {
dirty = true;
}
}
/**
* This initializes the canvas and binds the context to it. Should only
* be called from the AWT dispatch thread.
* This initializes the canvas and binds the context to it.
*/
public void initializeCanvas() {
synchronized ( this ) {
dirty = true;
setFocusTraversalKeysEnabled(false);
/* Input methods are not enabled in fullscreen anyway, so disable always */
enableInputMethods(false);
addComponentListener(this);
((MacOSXDisplay)Display.getImplementation()).setView(this);
setUpdate();
}
setFocusTraversalKeysEnabled(false);
/* Input methods are not enabled in fullscreen anyway, so disable always */
enableInputMethods(false);
addComponentListener(this);
((MacOSXDisplay)Display.getImplementation()).setView(this);
setUpdate();
}
public boolean syncIsDirty() {