Implement Resizing Display API for OS X

This commit is contained in:
kappa1 2011-07-13 22:15:35 +00:00
parent 1f305d514a
commit 5949d57bb1
7 changed files with 63 additions and 28 deletions

View File

@ -93,6 +93,12 @@ public final class Display {
* unlike GL, where it is typically at the bottom of the display. * unlike GL, where it is typically at the bottom of the display.
*/ */
private static int y = -1; private static int y = -1;
/** the width of the Display window */
private static int width = 0;
/** the height of the Display window */
private static int height = 0;
/** Title of the window (never null) */ /** Title of the window (never null) */
private static String title = "Game"; private static String title = "Game";
@ -109,6 +115,10 @@ public final class Display {
private static boolean window_created; private static boolean window_created;
private static boolean parent_resized; private static boolean parent_resized;
private static boolean window_resized;
private static boolean window_resizable;
/** Initial Background Color of Display */ /** Initial Background Color of Display */
private static float r, g, b; private static float r, g, b;
@ -295,6 +305,9 @@ public final class Display {
DisplayMode mode = getEffectiveMode(); DisplayMode mode = getEffectiveMode();
display_impl.createWindow(drawable, mode, tmp_parent, getWindowX(), getWindowY()); display_impl.createWindow(drawable, mode, tmp_parent, getWindowX(), getWindowY());
window_created = true; window_created = true;
width = Display.getDisplayMode().getWidth();
height = Display.getDisplayMode().getHeight();
setTitle(title); setTitle(title);
initControls(); initControls();
@ -661,6 +674,13 @@ public final class Display {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
} }
window_resized = !isFullscreen() && parent == null && display_impl.wasResized();
if ( window_resized ) {
width = display_impl.getWidth();
height = display_impl.getHeight();
}
if ( parent_resized ) { if ( parent_resized ) {
reshape(); reshape();
@ -1257,14 +1277,17 @@ public final class Display {
* false to disable resizing on the Display window. * false to disable resizing on the Display window.
*/ */
public static void setResizable(boolean resizable) { public static void setResizable(boolean resizable) {
window_resizable = resizable;
if ( isCreated() ) {
display_impl.setResizable(resizable);
}
} }
/** /**
* @return true if the Display window is resizable. * @return true if the Display window is resizable.
*/ */
public static boolean isResizable() { public static boolean isResizable() {
return false; return window_resizable;
} }
/** /**
@ -1274,7 +1297,7 @@ public final class Display {
* This will return false if running in fullscreen or with Display.setParent(Canvas parent) * This will return false if running in fullscreen or with Display.setParent(Canvas parent)
*/ */
public static boolean wasResized() { public static boolean wasResized() {
return false; return window_resized;
} }
/** /**
@ -1287,7 +1310,16 @@ public final class Display {
* This value will be updated after a call to Display.update(). * This value will be updated after a call to Display.update().
*/ */
public static int getWidth() { public static int getWidth() {
return 0;
if (Display.isFullscreen()) {
return Display.getDisplayMode().getWidth();
}
if (parent != null) {
return parent.getWidth();
}
return width;
} }
/** /**
@ -1300,6 +1332,15 @@ public final class Display {
* This value will be updated after a call to Display.update(). * This value will be updated after a call to Display.update().
*/ */
public static int getHeight() { public static int getHeight() {
return 0;
if (Display.isFullscreen()) {
return Display.getDisplayMode().getHeight();
}
if (parent != null) {
return parent.getHeight();
}
return height;
} }
} }

View File

@ -169,12 +169,7 @@ interface DisplayImplementation extends InputImplementation {
void setResizable(boolean resizable); void setResizable(boolean resizable);
/** /**
* @return true if the Display window is resizable. * @return true if the Display window has been resized since this method was last called.
*/
boolean isResizable();
/**
* @return true if the Display window has been resized.
*/ */
boolean wasResized(); boolean wasResized();

View File

@ -1361,10 +1361,6 @@ final class LinuxDisplay implements DisplayImplementation {
} }
public boolean isResizable() {
return false;
}
public boolean wasResized() { public boolean wasResized() {
return false; return false;
} }

View File

@ -47,6 +47,7 @@ final class MacOSXCanvasListener implements ComponentListener, HierarchyListener
private int width; private int width;
private int height; private int height;
private boolean context_update; private boolean context_update;
private boolean resized;
MacOSXCanvasListener(Canvas canvas) { MacOSXCanvasListener(Canvas canvas) {
this.canvas = canvas; this.canvas = canvas;
@ -102,6 +103,7 @@ final class MacOSXCanvasListener implements ComponentListener, HierarchyListener
public void componentResized(ComponentEvent e) { public void componentResized(ComponentEvent e) {
setUpdate(); setUpdate();
resized = true;
} }
public void componentMoved(ComponentEvent e) { public void componentMoved(ComponentEvent e) {
@ -111,4 +113,13 @@ final class MacOSXCanvasListener implements ComponentListener, HierarchyListener
public void hierarchyChanged(HierarchyEvent e) { public void hierarchyChanged(HierarchyEvent e) {
setUpdate(); setUpdate();
} }
public boolean wasResized() {
if (resized) {
resized = false;
return true;
}
return false;
}
} }

View File

@ -497,11 +497,11 @@ final class MacOSXDisplay implements DisplayImplementation {
} }
public int getWidth() { public int getWidth() {
return Display.getDisplayMode().getWidth(); return frame.getWidth();
} }
public int getHeight() { public int getHeight() {
return Display.getDisplayMode().getHeight(); return frame.getHeight();
} }
public boolean isInsideWindow() { public boolean isInsideWindow() {
@ -509,15 +509,11 @@ final class MacOSXDisplay implements DisplayImplementation {
} }
public void setResizable(boolean resizable) { public void setResizable(boolean resizable) {
frame.setResizable(resizable);
}
public boolean isResizable() {
return false;
} }
public boolean wasResized() { public boolean wasResized() {
return false; return canvas_listener.wasResized();
} }
} }

View File

@ -68,7 +68,7 @@ final class MacOSXFrame extends Frame implements WindowListener, ComponentListen
private boolean should_release_cursor; private boolean should_release_cursor;
MacOSXFrame(DisplayMode mode, final java.awt.DisplayMode requested_mode, boolean fullscreen, int x, int y) throws LWJGLException { MacOSXFrame(DisplayMode mode, final java.awt.DisplayMode requested_mode, boolean fullscreen, int x, int y) throws LWJGLException {
setResizable(false); setResizable(Display.isResizable());
addWindowListener(this); addWindowListener(this);
addComponentListener(this); addComponentListener(this);
canvas = new MacOSXGLCanvas(); canvas = new MacOSXGLCanvas();

View File

@ -945,10 +945,6 @@ final class WindowsDisplay implements DisplayImplementation {
} }
public boolean isResizable() {
return false;
}
public boolean wasResized() { public boolean wasResized() {
return false; return false;
} }