176 lines
4.4 KiB
Java
176 lines
4.4 KiB
Java
|
/*
|
||
|
* Created on 27-Mar-2003
|
||
|
*
|
||
|
* To change this generated comment go to
|
||
|
* Window>Preferences>Java>Code Generation>Code Template
|
||
|
*/
|
||
|
package org.lwjgl;
|
||
|
|
||
|
/**
|
||
|
* This is the abstract base class for a Window in LWJGL. LWJGL windows have some
|
||
|
* peculiar characteristics:
|
||
|
*
|
||
|
* - width and height are always fixed and cannot be changed
|
||
|
* - the position of the window may or may not be programmable but once specified
|
||
|
* cannot be changed
|
||
|
* - the window may be closeable by the user or operating system, and may be minimized
|
||
|
* by the user or operating system
|
||
|
* - the operating system may or may not allow more than one window to be constructed
|
||
|
* at any one time. There is no guarantee that all windows can be visible at once.
|
||
|
* - the operating system may or may not be able to do fullscreen or windowed windows.
|
||
|
*
|
||
|
* @author foo
|
||
|
*/
|
||
|
public abstract class Window {
|
||
|
|
||
|
static {
|
||
|
System.loadLibrary(Sys.getLibraryName());
|
||
|
}
|
||
|
|
||
|
/** The window's native data structure. On Win32 this is an HWND. */
|
||
|
private int handle;
|
||
|
|
||
|
/** Whether the window is currently minimized */
|
||
|
private boolean minimized;
|
||
|
|
||
|
/** Whether the window has been asked to close by the user or underlying OS */
|
||
|
private boolean closeRequested;
|
||
|
|
||
|
/** Whether the window is dirty, ie. needs painting */
|
||
|
private boolean dirty;
|
||
|
|
||
|
/** X coordinate of the window */
|
||
|
private int x;
|
||
|
|
||
|
/**
|
||
|
* Y coordinate of the window. Y in window coordinates is from the top of the display down,
|
||
|
* unlike GL, where it is typically at the bottom of the display.
|
||
|
*/
|
||
|
private int y;
|
||
|
|
||
|
/** Width of the window */
|
||
|
private final int width;
|
||
|
|
||
|
/** Height of the window */
|
||
|
private final int height;
|
||
|
|
||
|
/** Title of the window */
|
||
|
private String title;
|
||
|
|
||
|
/**
|
||
|
* Construct a Window. Some OSs may not support non-fullscreen windows; in
|
||
|
* which case the window will be fullscreen regardless.
|
||
|
*
|
||
|
* In this abstract base class, no actual window peer is constructed. This should be
|
||
|
* done in specialised derived classes.
|
||
|
*
|
||
|
* @param title The window's title
|
||
|
* @param x, y, width, height The position and dimensions of the client area of
|
||
|
* the window. The dimensions may be ignored if the window cannot be made non-
|
||
|
* fullscreen. The position may be ignored in either case.
|
||
|
*/
|
||
|
protected Window(String title, int x, int y, int width, int height) {
|
||
|
this.title = title;
|
||
|
this.x = x;
|
||
|
this.y = y;
|
||
|
this.width = width;
|
||
|
this.height = height;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return the width of the window
|
||
|
*/
|
||
|
public final int getWidth() {
|
||
|
return width;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return the height of the window
|
||
|
*/
|
||
|
public final int getHeight() {
|
||
|
return height;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return the title of the window
|
||
|
*/
|
||
|
public final String getTitle() {
|
||
|
return title;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Set the title of the window. This may be ignored by the underlying OS.
|
||
|
* @param newTitle The new window title
|
||
|
*/
|
||
|
public final void setTitle(String newTitle) {
|
||
|
title = newTitle;
|
||
|
nSetTitle();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Native implementation of setTitle(). This will read the window's title member
|
||
|
* and stash it in the native title of the window.
|
||
|
*/
|
||
|
private native void nSetTitle();
|
||
|
|
||
|
/**
|
||
|
* @return true if the user or operating system has asked the window to close
|
||
|
*/
|
||
|
public final boolean isCloseRequested() {
|
||
|
return closeRequested;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return true if the window is minimized or otherwise not visible
|
||
|
*/
|
||
|
public final boolean isMinimized() {
|
||
|
return minimized;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Determine if the window's contents have been damaged by external events.
|
||
|
* If you are writing a straightforward game rendering loop and simply paint
|
||
|
* every frame regardless, you can ignore this flag altogether. If you are
|
||
|
* trying to be kind to other processes you can check this flag and only
|
||
|
* redraw when it returns true. The flag is cleared when you call paint().
|
||
|
*
|
||
|
* @return true if the window has been damaged by external changes
|
||
|
* and needs to repaint itself
|
||
|
*/
|
||
|
public final boolean isDirty() {
|
||
|
return dirty;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Paint the window. This clears the dirty flag and swaps the buffers.
|
||
|
*/
|
||
|
public final void paint() {
|
||
|
dirty = false;
|
||
|
swapBuffers();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Swap the buffers.
|
||
|
*/
|
||
|
private native void swapBuffers();
|
||
|
|
||
|
/**
|
||
|
* Destroy the window.
|
||
|
*/
|
||
|
public final native void destroy();
|
||
|
|
||
|
/**
|
||
|
* @return the native window handle
|
||
|
*/
|
||
|
public final int getHandle() {
|
||
|
return handle;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 'Tick' the window. This must be called at least once per video frame
|
||
|
* to handle window close requests, moves, paints, etc.
|
||
|
*/
|
||
|
public final native void tick();
|
||
|
|
||
|
}
|