diff options
author | Sven Gothel <[email protected]> | 2010-09-23 16:21:39 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2010-09-23 16:21:39 +0200 |
commit | 0feca163be47db2ea94f7546e696136d6f9496e9 (patch) | |
tree | acb22106e716b7a4670a280c53466cf30aad233c /src/nativewindow/classes/javax | |
parent | 46971a3b9d58bcd1e2305d0f428b31ce30273293 (diff) |
NEWT: Fix Display/Window/Screen OO Identity, Reparenting and requestFocus
NativeWindow: Interface NativeWindow changes:
- Remove 'throws' qualifier in lockSurface(), since it is not
- Adding convenient 'one call' isSurfaceLockedByOtherThread()
- Adding getSurfaceLockOwner()
NEWT Window/GLWindow:
- Unclutter Window/GLWindow relationship - save Window's indentity
GLWindow's role is a GLAutoDrawable implementation aggregating
(maybe even compositioning) a Window.
The previous implementation just derived from the Window implementation,
overwriting methods and fields - impossible to ensure sanity / completness.
It was also not ensured that the added functionality of GLWindow
(setVisible, destroy, ..) has been issued in case of handling the
aggregated Window alone (window callbacks, ..).
To solve this issue in a 1st attempt without changing the GLWindow API,
Window is just an interface, being implemented by their specializations,
hence sanity is intrinsic.
GLWindow's added functionality is ensured by a Window.LifecycleHook
interfaced implementation, registered at the aggregated Window.
- Screen and Window are interfaces now (new files)
- Display is an abstract class.
- Their (abstract) implementations resides in impl/<BaseName>Impl
- GLWindow implements Window as well
- Remove Screen reference handled by setScreen(Screen) method.
- Lock native parentWindow if used (createNative/reparenting)
- Move lockSurface/unlockSurface from unchecked override pattern
to an callback style using abstract methods lockSurfaceImpl/...
- Sorting all methods to semantic sections, abstract, superinterface, ..
- Reparenting: Handling different reparenting situations:
- Unchanged - No change
- Native Reparenting - Compatible Display/Screen, try native reparenting
- Native (Re)Creation - Use destroy/create pattern
- Native Creation Pending - Create later
- setUndecorated() calls reconfigure Window now, ie tries to change the window actually
- Don't issue 'requestFocus()' directly from the native implementation anymore,
call it from the Java code.
- Window/GLWindow/NewtFactory: Constructor simplification
Avoid explosion of constructor overloading, ie removing the 'undecorated' variant,
since this is redundant due to the 'setUndecorated(boolean)' method.
- Fixed/added API documentation
Diffstat (limited to 'src/nativewindow/classes/javax')
-rw-r--r-- | src/nativewindow/classes/javax/media/nativewindow/NativeWindow.java | 40 |
1 files changed, 26 insertions, 14 deletions
diff --git a/src/nativewindow/classes/javax/media/nativewindow/NativeWindow.java b/src/nativewindow/classes/javax/media/nativewindow/NativeWindow.java index 7d0c52e3b..2187f6054 100644 --- a/src/nativewindow/classes/javax/media/nativewindow/NativeWindow.java +++ b/src/nativewindow/classes/javax/media/nativewindow/NativeWindow.java @@ -69,48 +69,60 @@ public interface NativeWindow extends SurfaceUpdatedListener { * Lock the surface of this native window<P> * * The surface handle, see {@link #lockSurface()}, <br> - * shall be set and valid after a successfull call, - * ie a return value other than {@link #LOCK_SURFACE_NOT_READY}.<P> + * shall be valid after a successfull call, + * ie return a value other than {@link #LOCK_SURFACE_NOT_READY}.<P> * - * The semantics of the underlying native locked resource - * may be related to the {@link ToolkitLock} one. Hence it is - * important that implementation of both harmonize well.<br> - * The implementation may want to aquire the {@link ToolkitLock} - * first to become it's owner before proceeding with it's - * actual surface lock. <P> + * This call is blocking until the surface has been locked + * or a timeout is reached. The latter will throw a runtime exception. <P> + * + * This call allows recursion from the same thread.<P> + * + * The implementation may want to aquire the + * application level {@link com.jogamp.nativewindow.impl.RecursiveToolkitLock} + * first before proceeding with a native surface lock. <P> * * @return {@link #LOCK_SUCCESS}, {@link #LOCK_SURFACE_CHANGED} or {@link #LOCK_SURFACE_NOT_READY}. * - * @throws NativeWindowException if surface is already locked + * @throws RuntimeException after timeout when waiting for the surface lock * - * @see ToolkitLock + * @see com.jogamp.nativewindow.impl.RecursiveToolkitLock */ - public int lockSurface() throws NativeWindowException ; + public int lockSurface(); /** * Unlock the surface of this native window * * Shall not modify the surface handle, see {@link #lockSurface()} <P> * - * @throws NativeWindowException if surface is not locked + * @throws RuntimeException if surface is not locked * * @see #lockSurface - * @see ToolkitLock + * @see com.jogamp.nativewindow.impl.RecursiveToolkitLock */ public void unlockSurface() throws NativeWindowException ; /** + * Return if surface is locked by another thread, ie not the current one + */ + public boolean isSurfaceLockedByOtherThread(); + + /** * Return if surface is locked */ public boolean isSurfaceLocked(); /** + * Return the locking owner's Thread, or null if not locked. + */ + public Thread getSurfaceLockOwner(); + + /** * Return the lock-exception, or null if not locked. * * The lock-exception is created at {@link #lockSurface()} * and hence holds the locker's call stack. */ - public Exception getLockedStack(); + public Exception getSurfaceLockStack(); /** * Provide a mechanism to utilize custom (pre-) swap surface |