diff options
author | Sven Gothel <[email protected]> | 2012-03-06 07:27:29 +0100 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2012-03-06 07:27:29 +0100 |
commit | 28ca3652c7c3c73cc3c41ad84b3f1efdad98add5 (patch) | |
tree | 20c687ec4b4ef1be7ff3548c96e1913889e3be8b /src/nativewindow/classes/jogamp | |
parent | 9124f3fade3f923b581c6e7b871d049b431bbd78 (diff) |
NativeWindow public-spec to public-impl reorg (javax.media.nativewindow.<impl> -> com.jogamp.nativewindow.<impl>) 1/2
Diffstat (limited to 'src/nativewindow/classes/jogamp')
6 files changed, 0 insertions, 1009 deletions
diff --git a/src/nativewindow/classes/jogamp/nativewindow/MutableGraphicsConfiguration.java b/src/nativewindow/classes/jogamp/nativewindow/MutableGraphicsConfiguration.java deleted file mode 100644 index ee3ab73ba..000000000 --- a/src/nativewindow/classes/jogamp/nativewindow/MutableGraphicsConfiguration.java +++ /dev/null @@ -1,43 +0,0 @@ -/** - * Copyright 2011 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package jogamp.nativewindow; - -import javax.media.nativewindow.AbstractGraphicsScreen; -import javax.media.nativewindow.CapabilitiesImmutable; -import javax.media.nativewindow.DefaultGraphicsConfiguration; - -public class MutableGraphicsConfiguration extends DefaultGraphicsConfiguration { - public MutableGraphicsConfiguration(AbstractGraphicsScreen screen, - CapabilitiesImmutable capsChosen, CapabilitiesImmutable capsRequested) { - super(screen, capsChosen, capsRequested); - } - - public void setChosenCapabilities(CapabilitiesImmutable caps) { - super.setChosenCapabilities(caps); - } -} diff --git a/src/nativewindow/classes/jogamp/nativewindow/NativeVisualID.java b/src/nativewindow/classes/jogamp/nativewindow/NativeVisualID.java deleted file mode 100644 index 20d3ad6dc..000000000 --- a/src/nativewindow/classes/jogamp/nativewindow/NativeVisualID.java +++ /dev/null @@ -1,84 +0,0 @@ -/** - * Copyright 2012 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ - -package jogamp.nativewindow; - -/** - * Specifies query to the native capabilities identification. - * Semantics may differ depending on the native windowing system, - * see {@link #getVisualID(int)}. - */ -public interface NativeVisualID { - - public enum NVIDType { - GEN_ID(0), NATIVE_ID(1), - EGL_ConfigID(2), EGL_NativeVisualID(3), X11_XVisualID(4), X11_FBConfigID(5), WIN32_PFDID(6); - - public final int id; - - NVIDType(int id){ - this.id = id; - } - } - - /** - * Returns the native identification of the given <code>type</code>. - * <p> - * Depending on the native windowing system, this might be - * <ul> - * <li>X11 - * <ul> - * <li>GEN_ID: X11_XVisualID</li> - * <li>NATIVE_ID: X11_XVisualID</li> - * <li>X11_XVisualID</li> - * </ul></li> - * <li>X11/GL - * <ul> - * <li>GEN_ID: X11_XVisualID</li> - * <li>NATIVE_ID: X11_XVisualID</li> - * <li>X11_XVisualID</li> - * <li>X11FBConfigID</li> - * </ul></li> - * <li>Windows/GL - * <ul> - * <li>GEN_ID: WIN32_PFDID</li> - * <li>NATIVE_ID: WIN32_PFDID</li> - * <li>WIN32_PFDID</li> - * </ul></li> - * <li>EGL/GL - * <ul> - * <li>GEN_ID: EGL_ConfigID</li> - * <li>NATIVE_ID: EGL_NativeVisualID (X11_XVisualID, WIN32_PFDID, ..)</li> - * <li>EGL_ConfigID</li> - * <li>EGL_NativeVisualID</li> - * </ul></li> - * </ul> - * </p> - */ - int getVisualID(NVIDType type); -} diff --git a/src/nativewindow/classes/jogamp/nativewindow/WrappedSurface.java b/src/nativewindow/classes/jogamp/nativewindow/WrappedSurface.java deleted file mode 100644 index 074fab563..000000000 --- a/src/nativewindow/classes/jogamp/nativewindow/WrappedSurface.java +++ /dev/null @@ -1,74 +0,0 @@ -/** - * Copyright 2010 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ - -package jogamp.nativewindow; - -import javax.media.nativewindow.AbstractGraphicsConfiguration; -import javax.media.nativewindow.ProxySurface; -import javax.media.nativewindow.SurfaceChangeable; - - -public class WrappedSurface extends ProxySurface implements SurfaceChangeable { - protected long surfaceHandle; - - public WrappedSurface(AbstractGraphicsConfiguration cfg) { - this(cfg, 0); - } - - public WrappedSurface(AbstractGraphicsConfiguration cfg, long handle) { - super(cfg); - surfaceHandle=handle; - } - - protected final void invalidateImpl() { - surfaceHandle = 0; - } - - public long getSurfaceHandle() { - return surfaceHandle; - } - - public void setSurfaceHandle(long surfaceHandle) { - this.surfaceHandle=surfaceHandle; - } - - protected int lockSurfaceImpl() { - return LOCK_SUCCESS; - } - - protected void unlockSurfaceImpl() { - } - - public String toString() { - return "WrappedSurface[config " + getPrivateGraphicsConfiguration()+ - ", displayHandle 0x" + Long.toHexString(getDisplayHandle()) + - ", surfaceHandle 0x" + Long.toHexString(getSurfaceHandle()) + - ", size " + getWidth() + "x" + getHeight() + - ", surfaceLock "+surfaceLock+"]"; - } -} diff --git a/src/nativewindow/classes/jogamp/nativewindow/jawt/JAWTToolkitLock.java b/src/nativewindow/classes/jogamp/nativewindow/jawt/JAWTToolkitLock.java deleted file mode 100644 index 37e34c01c..000000000 --- a/src/nativewindow/classes/jogamp/nativewindow/jawt/JAWTToolkitLock.java +++ /dev/null @@ -1,54 +0,0 @@ -/** - * Copyright 2010 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package jogamp.nativewindow.jawt; - -import javax.media.nativewindow.ToolkitLock; - -/** - * Implementing a singleton global recursive {@link javax.media.nativewindow.ToolkitLock} - * utilizing JAWT's AWT lock via {@link JAWTUtil#lockToolkit()}. - * <br> - * This strategy should only be used if AWT is using the underlying native windowing toolkit - * in a not intrinsic thread safe manner, e.g. under X11 where no XInitThreads() call - * is issued before any other X11 usage. This is the current situation for e.g. Webstart or Applets. - */ -public class JAWTToolkitLock implements ToolkitLock { - - /** Singleton via {@link JAWTUtil#getJAWTToolkitLock()} */ - protected JAWTToolkitLock() {} - - public final void lock() { - if(TRACE_LOCK) { System.err.println("JAWTToolkitLock.lock()"); } - JAWTUtil.lockToolkit(); - } - - public final void unlock() { - if(TRACE_LOCK) { System.err.println("JAWTToolkitLock.unlock()"); } - JAWTUtil.unlockToolkit(); - } -} diff --git a/src/nativewindow/classes/jogamp/nativewindow/jawt/JAWTWindow.java b/src/nativewindow/classes/jogamp/nativewindow/jawt/JAWTWindow.java deleted file mode 100644 index 863b336fc..000000000 --- a/src/nativewindow/classes/jogamp/nativewindow/jawt/JAWTWindow.java +++ /dev/null @@ -1,489 +0,0 @@ -/* - * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved. - * Copyright (c) 2010 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * - Redistribution of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistribution in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * Neither the name of Sun Microsystems, Inc. or the names of - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * This software is provided "AS IS," without a warranty of any kind. ALL - * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, - * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A - * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN - * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR - * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR - * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR - * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR - * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE - * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, - * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF - * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - * - * You acknowledge that this software is not designed or intended for use - * in the design, construction, operation or maintenance of any nuclear - * facility. - */ - -package jogamp.nativewindow.jawt; - -import com.jogamp.common.util.locks.LockFactory; -import com.jogamp.common.util.locks.RecursiveLock; - -import java.awt.Component; -import java.awt.Container; -import java.applet.Applet; -import javax.media.nativewindow.AbstractGraphicsConfiguration; -import javax.media.nativewindow.AbstractGraphicsDevice; -import javax.media.nativewindow.NativeSurface; -import javax.media.nativewindow.NativeWindow; -import javax.media.nativewindow.NativeWindowException; -import javax.media.nativewindow.OffscreenLayerOption; -import javax.media.nativewindow.OffscreenLayerSurface; -import javax.media.nativewindow.SurfaceUpdatedListener; -import javax.media.nativewindow.awt.AWTGraphicsConfiguration; -import javax.media.nativewindow.util.Insets; -import javax.media.nativewindow.util.InsetsImmutable; -import javax.media.nativewindow.util.Point; -import javax.media.nativewindow.util.Rectangle; -import javax.media.nativewindow.util.RectangleImmutable; - -import jogamp.nativewindow.SurfaceUpdatedHelper; - -public abstract class JAWTWindow implements NativeWindow, OffscreenLayerSurface, OffscreenLayerOption { - protected static final boolean DEBUG = JAWTUtil.DEBUG; - - // user properties - protected boolean shallUseOffscreenLayer = false; - - // lifetime: forever - protected Component component; - private AWTGraphicsConfiguration config; // control access due to delegation - private SurfaceUpdatedHelper surfaceUpdatedHelper = new SurfaceUpdatedHelper(); - private RecursiveLock surfaceLock = LockFactory.createRecursiveLock(); - - // lifetime: valid after lock but may change with each 1st lock, purges after invalidate - private boolean isApplet; - private JAWT jawt; - private boolean isOffscreenLayerSurface; - protected long drawable; - protected Rectangle bounds; - protected Insets insets; - - private long drawable_old; - - /** - * Constructed by {@link jogamp.nativewindow.NativeWindowFactoryImpl#getNativeWindow(Object, AbstractGraphicsConfiguration)} - * via this platform's specialization (X11, OSX, Windows, ..). - * - * @param comp - * @param config - */ - protected JAWTWindow(Object comp, AbstractGraphicsConfiguration config) { - if (config == null) { - throw new NativeWindowException("Error: AbstractGraphicsConfiguration is null"); - } - if(! ( config instanceof AWTGraphicsConfiguration ) ) { - throw new NativeWindowException("Error: AbstractGraphicsConfiguration is not an AWTGraphicsConfiguration: "+config); - } - this.config = (AWTGraphicsConfiguration) config; - init((Component)comp); - } - - private void init(Component windowObject) throws NativeWindowException { - invalidate(); - this.component = windowObject; - this.isApplet = false; - } - - public void setShallUseOffscreenLayer(boolean v) { - shallUseOffscreenLayer = v; - } - - public final boolean getShallUseOffscreenLayer() { - return shallUseOffscreenLayer; - } - - public final boolean isOffscreenLayerSurfaceEnabled() { - return isOffscreenLayerSurface; - } - - protected synchronized void invalidate() { - invalidateNative(); - jawt = null; - isOffscreenLayerSurface = false; - drawable= 0; - drawable_old = 0; - bounds = new Rectangle(); - insets = new Insets(); - } - protected abstract void invalidateNative(); - - protected final void updateBounds(JAWT_Rectangle jawtBounds) { - bounds.setX(jawtBounds.getX()); - bounds.setY(jawtBounds.getY()); - bounds.setWidth(jawtBounds.getWidth()); - bounds.setHeight(jawtBounds.getHeight()); - - if(component instanceof Container) { - java.awt.Insets contInsets = ((Container)component).getInsets(); - insets.setLeftWidth(contInsets.left); - insets.setRightWidth(contInsets.right); - insets.setTopHeight(contInsets.top); - insets.setBottomHeight(contInsets.bottom); - } - } - - /** @return the JAWT_DrawingSurfaceInfo's (JAWT_Rectangle) bounds, updated with lock */ - public final RectangleImmutable getBounds() { return bounds; } - - public final InsetsImmutable getInsets() { return insets; } - - public final Component getAWTComponent() { - return component; - } - - /** - * Returns true if the AWT component is parented to an {@link java.applet.Applet}, - * otherwise false. This information is valid only after {@link #lockSurface()}. - */ - public final boolean isApplet() { - return isApplet; - } - - /** Returns the underlying JAWT instance created @ {@link #lockSurface()}. */ - public final JAWT getJAWT() { - return jawt; - } - - /** - * {@inheritDoc} - */ - public final void attachSurfaceLayer(final long layerHandle) throws NativeWindowException { - if( !isOffscreenLayerSurfaceEnabled() ) { - throw new NativeWindowException("Not an offscreen layer surface"); - } - int lockRes = lockSurface(); - if (NativeSurface.LOCK_SURFACE_NOT_READY >= lockRes) { - throw new NativeWindowException("Could not lock (offscreen layer): "+this); - } - try { - if(DEBUG) { - System.err.println("JAWTWindow.attachSurfaceHandle(): 0x"+Long.toHexString(layerHandle)); - } - attachSurfaceLayerImpl(layerHandle); - } finally { - unlockSurface(); - } - } - protected abstract void attachSurfaceLayerImpl(final long layerHandle); - - /** - * {@inheritDoc} - */ - public final void detachSurfaceLayer(final long layerHandle) throws NativeWindowException { - if( !isOffscreenLayerSurfaceEnabled() ) { - throw new java.lang.UnsupportedOperationException("Not an offscreen layer surface"); - } - int lockRes = lockSurface(); - if (NativeSurface.LOCK_SURFACE_NOT_READY >= lockRes) { - throw new NativeWindowException("Could not lock (offscreen layer): "+this); - } - try { - if(DEBUG) { - System.err.println("JAWTWindow.detachSurfaceHandle(): 0x"+Long.toHexString(layerHandle)); - } - detachSurfaceLayerImpl(layerHandle); - } finally { - unlockSurface(); - } - } - protected abstract void detachSurfaceLayerImpl(final long layerHandle); - - // - // SurfaceUpdateListener - // - - public void addSurfaceUpdatedListener(SurfaceUpdatedListener l) { - surfaceUpdatedHelper.addSurfaceUpdatedListener(l); - } - - public void addSurfaceUpdatedListener(int index, SurfaceUpdatedListener l) throws IndexOutOfBoundsException { - surfaceUpdatedHelper.addSurfaceUpdatedListener(index, l); - } - - public void removeSurfaceUpdatedListener(SurfaceUpdatedListener l) { - surfaceUpdatedHelper.removeSurfaceUpdatedListener(l); - } - - public void surfaceUpdated(Object updater, NativeSurface ns, long when) { - surfaceUpdatedHelper.surfaceUpdated(updater, ns, when); - } - - // - // NativeSurface - // - - private void determineIfApplet() { - Component c = component; - while(!isApplet && null != c) { - isApplet = c instanceof Applet; - c = c.getParent(); - } - } - - /** - * If JAWT offscreen layer is supported, - * implementation shall respect {@link #getShallUseOffscreenLayer()} - * and may respect {@link #isApplet()}. - * - * @return The JAWT instance reflecting offscreen layer support, etc. - * - * @throws NativeWindowException - */ - protected abstract JAWT fetchJAWTImpl() throws NativeWindowException; - protected abstract int lockSurfaceImpl() throws NativeWindowException; - - protected void dumpJAWTInfo() { - if(null != jawt) { - System.err.println("JAWT version: 0x"+Integer.toHexString(jawt.getCachedVersion())+ - ", CA_LAYER: "+ JAWTUtil.isJAWTUsingOffscreenLayer(jawt)+ - ", isLayeredSurface "+isOffscreenLayerSurfaceEnabled()+", bounds "+bounds+", insets "+insets); - } else { - System.err.println("JAWT n/a, bounds "+bounds+", insets "+insets); - } - // Thread.dumpStack(); - } - - public final int lockSurface() throws NativeWindowException { - surfaceLock.lock(); - int res = surfaceLock.getHoldCount() == 1 ? LOCK_SURFACE_NOT_READY : LOCK_SUCCESS; // new lock ? - - if ( LOCK_SURFACE_NOT_READY == res ) { - determineIfApplet(); - try { - final AbstractGraphicsDevice adevice = getGraphicsConfiguration().getScreen().getDevice(); - adevice.lock(); - try { - jawt = fetchJAWTImpl(); - isOffscreenLayerSurface = JAWTUtil.isJAWTUsingOffscreenLayer(jawt); - res = lockSurfaceImpl(); - if(LOCK_SUCCESS == res && drawable_old != drawable) { - res = LOCK_SURFACE_CHANGED; - if(DEBUG) { - System.err.println("JAWTWindow: surface change 0x"+Long.toHexString(drawable_old)+" -> 0x"+Long.toHexString(drawable)); - // Thread.dumpStack(); - } - } - } finally { - if (LOCK_SURFACE_NOT_READY >= res) { - adevice.unlock(); - } - } - } finally { - if (LOCK_SURFACE_NOT_READY >= res) { - surfaceLock.unlock(); - } - } - } - return res; - } - - protected abstract void unlockSurfaceImpl() throws NativeWindowException; - - public final void unlockSurface() { - surfaceLock.validateLocked(); - drawable_old = drawable; - - if (surfaceLock.getHoldCount() == 1) { - final AbstractGraphicsDevice adevice = getGraphicsConfiguration().getScreen().getDevice(); - try { - unlockSurfaceImpl(); - } finally { - adevice.unlock(); - } - } - surfaceLock.unlock(); - } - - public final boolean isSurfaceLockedByOtherThread() { - return surfaceLock.isLockedByOtherThread(); - } - - public final boolean isSurfaceLocked() { - return surfaceLock.isLocked(); - } - - public final Thread getSurfaceLockOwner() { - return surfaceLock.getOwner(); - } - - public boolean surfaceSwap() { - return false; - } - - public long getSurfaceHandle() { - return drawable; - } - - public final AWTGraphicsConfiguration getPrivateGraphicsConfiguration() { - return config; - } - - public final AbstractGraphicsConfiguration getGraphicsConfiguration() { - return config.getNativeGraphicsConfiguration(); - } - - public final long getDisplayHandle() { - return getGraphicsConfiguration().getScreen().getDevice().getHandle(); - } - - public final int getScreenIndex() { - return getGraphicsConfiguration().getScreen().getIndex(); - } - - public int getWidth() { - return component.getWidth(); - } - - public int getHeight() { - return component.getHeight(); - } - - // - // NativeWindow - // - - public synchronized void destroy() { - invalidate(); - component = null; // don't dispose the AWT component, since we are merely an immutable uplink - } - - public final NativeWindow getParent() { - return null; - } - - public long getWindowHandle() { - return drawable; - } - - public final int getX() { - return component.getX(); - } - - public final int getY() { - return component.getY(); - } - - /** - * {@inheritDoc} - * - * <p> - * This JAWT default implementation is currently still using - * a blocking implementation. It first attempts to retrieve the location - * via a native implementation. If this fails, it tries the blocking AWT implementation. - * If the latter fails due to an external AWT tree-lock, the non block - * implementation {@link #getLocationOnScreenNonBlocking(Point, Component)} is being used. - * The latter simply traverse up to the AWT component tree and sums the rel. position. - * We have to determine whether the latter is good enough for all cases, - * currently only OS X utilizes the non blocking method per default. - * </p> - */ - public Point getLocationOnScreen(Point storage) { - Point los = getLocationOnScreenNative(storage); - if(null == los) { - if(!Thread.holdsLock(component.getTreeLock())) { - // avoid deadlock .. - if(DEBUG) { - System.err.println("Warning: JAWT Lock hold, but not the AWT tree lock: "+this); - Thread.dumpStack(); - } - return getLocationOnScreenNonBlocking(storage, component); - } - java.awt.Point awtLOS = component.getLocationOnScreen(); - if(null!=storage) { - los = storage.translate(awtLOS.x, awtLOS.y); - } else { - los = new Point(awtLOS.x, awtLOS.y); - } - } - return los; - } - - protected Point getLocationOnScreenNative(Point storage) { - int lockRes = lockSurface(); - if(LOCK_SURFACE_NOT_READY == lockRes) { - if(DEBUG) { - System.err.println("Warning: JAWT Lock couldn't be acquired: "+this); - Thread.dumpStack(); - } - return null; - } - try { - Point d = getLocationOnScreenNativeImpl(0, 0); - if(null!=d) { - if(null!=storage) { - storage.translate(d.getX(),d.getY()); - return storage; - } - } - return d; - } finally { - unlockSurface(); - } - } - protected abstract Point getLocationOnScreenNativeImpl(int x, int y); - - protected static Point getLocationOnScreenNonBlocking(Point storage, Component comp) { - int x = 0; - int y = 0; - while(null != comp) { - x += comp.getX(); - y += comp.getY(); - comp = comp.getParent(); - } - if(null!=storage) { - storage.translate(x, y); - return storage; - } - return new Point(x, y); - } - - public boolean hasFocus() { - return component.hasFocus(); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - - sb.append("JAWT-Window["+ - "windowHandle 0x"+Long.toHexString(getWindowHandle())+ - ", surfaceHandle 0x"+Long.toHexString(getSurfaceHandle())+ - ", bounds "+bounds+", insets "+insets+ - ", shallUseOffscreenLayer "+shallUseOffscreenLayer+", isOffscreenLayerSurface "+isOffscreenLayerSurface); - if(null!=component) { - sb.append(", pos "+getX()+"/"+getY()+", size "+getWidth()+"x"+getHeight()+ - ", visible "+component.isVisible()); - } else { - sb.append(", component NULL"); - } - sb.append(", lockedExt "+isSurfaceLockedByOtherThread()+ - ",\n\tconfig "+getPrivateGraphicsConfiguration()+ - ",\n\tawtComponent "+getAWTComponent()+ - ",\n\tsurfaceLock "+surfaceLock+"]"); - - return sb.toString(); - } - -} diff --git a/src/nativewindow/classes/jogamp/nativewindow/swt/SWTAccessor.java b/src/nativewindow/classes/jogamp/nativewindow/swt/SWTAccessor.java deleted file mode 100644 index aab1556da..000000000 --- a/src/nativewindow/classes/jogamp/nativewindow/swt/SWTAccessor.java +++ /dev/null @@ -1,265 +0,0 @@ -/** - * Copyright 2010 JogAmp Community. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of JogAmp Community. - */ -package jogamp.nativewindow.swt; - -import com.jogamp.common.os.Platform; -import java.lang.reflect.Field; -import java.lang.reflect.Method; - -import org.eclipse.swt.graphics.GCData; -import org.eclipse.swt.widgets.Control; - -import javax.media.nativewindow.NativeWindowException; -import javax.media.nativewindow.AbstractGraphicsDevice; -import javax.media.nativewindow.NativeWindowFactory; -import javax.media.nativewindow.windows.WindowsGraphicsDevice; -import javax.media.nativewindow.x11.X11GraphicsDevice; -import com.jogamp.common.util.ReflectionUtil; -import javax.media.nativewindow.macosx.MacOSXGraphicsDevice; - -import jogamp.nativewindow.macosx.OSXUtil; - -public class SWTAccessor { - static final Field swt_control_handle; - static final boolean swt_uses_long_handles; - - // X11/GTK, Windows/GDI, .. - static final String str_handle = "handle"; - - // OSX/Cocoa - static final String str_view = "view"; // OSX - static final String str_id = "id"; // OSX - // static final String str_NSView = "org.eclipse.swt.internal.cocoa.NSView"; - - static final Method swt_control_internal_new_GC; - static final Method swt_control_internal_dispose_GC; - static final String str_internal_new_GC = "internal_new_GC"; - static final String str_internal_dispose_GC = "internal_dispose_GC"; - - static final String str_OS_gtk_class = "org.eclipse.swt.internal.gtk.OS"; - static final Class<?> OS_gtk_class; - static final Method OS_gtk_widget_realize; - static final Method OS_gtk_widget_unrealize; - static final Method OS_GTK_WIDGET_WINDOW; - static final Method OS_gdk_x11_drawable_get_xdisplay; - static final Method OS_gdk_x11_drawable_get_xid; - static final String str_gtk_widget_realize = "gtk_widget_realize"; - static final String str_gtk_widget_unrealize = "gtk_widget_unrealize"; - static final String str_GTK_WIDGET_WINDOW = "GTK_WIDGET_WINDOW"; - static final String str_gdk_x11_drawable_get_xdisplay = "gdk_x11_drawable_get_xdisplay"; - static final String str_gdk_x11_drawable_get_xid = "gdk_x11_drawable_get_xid"; - - static { - Field f = null; - - if(NativeWindowFactory.TYPE_MACOSX != NativeWindowFactory.getNativeWindowType(false) ) { - try { - f = Control.class.getField(str_handle); - } catch (Exception ex) { - throw new NativeWindowException(ex); - } - } - swt_control_handle = f; // maybe null ! - - boolean ulh; - if (null != swt_control_handle) { - ulh = swt_control_handle.getGenericType().toString().equals(long.class.toString()); - } else { - ulh = Platform.is64Bit(); - } - swt_uses_long_handles = ulh; - // System.err.println("SWT long handles: " + swt_uses_long_handles); - // System.err.println("Platform 64bit: "+Platform.is64Bit()); - - Method m=null; - try { - m = ReflectionUtil.getMethod(Control.class, str_internal_new_GC, new Class[] { GCData.class }); - } catch (Exception ex) { - throw new NativeWindowException(ex); - } - swt_control_internal_new_GC = m; - - try { - if(swt_uses_long_handles) { - m = Control.class.getDeclaredMethod(str_internal_dispose_GC, new Class[] { long.class, GCData.class }); - } else { - m = Control.class.getDeclaredMethod(str_internal_dispose_GC, new Class[] { int.class, GCData.class }); - } - } catch (NoSuchMethodException ex) { - throw new NativeWindowException(ex); - } - swt_control_internal_dispose_GC = m; - - Class<?> c=null; - Method m1=null, m2=null, m3=null, m4=null, m5=null; - Class<?> handleType = swt_uses_long_handles ? long.class : int.class ; - if( NativeWindowFactory.TYPE_X11 == NativeWindowFactory.getNativeWindowType(false) ) { - try { - c = ReflectionUtil.getClass(str_OS_gtk_class, false, SWTAccessor.class.getClassLoader()); - m1 = c.getDeclaredMethod(str_gtk_widget_realize, handleType); - m2 = c.getDeclaredMethod(str_gtk_widget_unrealize, handleType); - m3 = c.getDeclaredMethod(str_GTK_WIDGET_WINDOW, handleType); - m4 = c.getDeclaredMethod(str_gdk_x11_drawable_get_xdisplay, handleType); - m5 = c.getDeclaredMethod(str_gdk_x11_drawable_get_xid, handleType); - } catch (Exception ex) { throw new NativeWindowException(ex); } - } - OS_gtk_class = c; - OS_gtk_widget_realize = m1; - OS_gtk_widget_unrealize = m2; - OS_GTK_WIDGET_WINDOW = m3; - OS_gdk_x11_drawable_get_xdisplay = m4; - OS_gdk_x11_drawable_get_xid = m5; - } - - static Object getIntOrLong(long arg) { - if(swt_uses_long_handles) { - return new Long(arg); - } - return new Integer((int) arg); - } - - static void callStaticMethodL2V(Method m, long arg) { - ReflectionUtil.callMethod(null, m, new Object[] { getIntOrLong(arg) }); - } - - static long callStaticMethodL2L(Method m, long arg) { - Object o = ReflectionUtil.callMethod(null, m, new Object[] { getIntOrLong(arg) }); - if(o instanceof Number) { - return ((Number)o).longValue(); - } else { - throw new InternalError("SWT method "+m.getName()+" didn't return int or long but "+o.getClass()); - } - } - - public static boolean isUsingLongHandles() { - return swt_uses_long_handles; - } - - public static long getHandle(Control swtControl) { - long h = 0; - if(NativeWindowFactory.TYPE_MACOSX == NativeWindowFactory.getNativeWindowType(false) ) { - try { - Field fView = Control.class.getField(str_view); - Object view = fView.get(swtControl); - Field fId = view.getClass().getField(str_id); - return fId.getLong(view); - } catch (Exception ex) { - throw new NativeWindowException(ex); - } - } - - try { - h = swt_control_handle.getLong(swtControl); - } catch (Exception ex) { - throw new NativeWindowException(ex); - } - return h; - } - - public static void setRealized(final Control swtControl, final boolean realize) { - final long handle = getHandle(swtControl); - - if(null != OS_gtk_class) { - invoke(true, new Runnable() { - public void run() { - if(realize) { - callStaticMethodL2V(OS_gtk_widget_realize, handle); - } else { - callStaticMethodL2V(OS_gtk_widget_unrealize, handle); - } - } - }); - } - } - - public static AbstractGraphicsDevice getDevice(Control swtControl) { - long handle = getHandle(swtControl); - if( null != OS_gtk_class ) { - long widgedHandle = callStaticMethodL2L(OS_GTK_WIDGET_WINDOW, handle); - long displayHandle = callStaticMethodL2L(OS_gdk_x11_drawable_get_xdisplay, widgedHandle); - // FIXME: May think about creating a private non-shared X11 Display handle, like we use to for AWT - // to avoid locking problems ! - return new X11GraphicsDevice(displayHandle, AbstractGraphicsDevice.DEFAULT_UNIT, false); - } - if( NativeWindowFactory.TYPE_WINDOWS == NativeWindowFactory.getNativeWindowType(false) ) { - return new WindowsGraphicsDevice(AbstractGraphicsDevice.DEFAULT_CONNECTION, AbstractGraphicsDevice.DEFAULT_UNIT); - } - if( NativeWindowFactory.TYPE_MACOSX == NativeWindowFactory.getNativeWindowType(false) ) { - return new MacOSXGraphicsDevice(AbstractGraphicsDevice.DEFAULT_UNIT); - } - throw new UnsupportedOperationException("n/a for this windowing system: "+NativeWindowFactory.getNativeWindowType(false)); - } - - public static long getWindowHandle(Control swtControl) { - long handle = getHandle(swtControl); - if( null != OS_gtk_class ) { - long widgedHandle = callStaticMethodL2L(OS_GTK_WIDGET_WINDOW, handle); - return callStaticMethodL2L(OS_gdk_x11_drawable_get_xid, widgedHandle); - } - if( NativeWindowFactory.TYPE_WINDOWS == NativeWindowFactory.getNativeWindowType(false) || - NativeWindowFactory.TYPE_MACOSX == NativeWindowFactory.getNativeWindowType(false) ) { - return handle; - } - throw new UnsupportedOperationException("n/a for this windowing system: "+NativeWindowFactory.getNativeWindowType(false)); - } - - public static long newGC(final Control swtControl, final GCData gcData) { - final Object[] o = new Object[1]; - invoke(true, new Runnable() { - public void run() { - o[0] = ReflectionUtil.callMethod(swtControl, swt_control_internal_new_GC, new Object[] { gcData }); - } - }); - if(o[0] instanceof Number) { - return ((Number)o[0]).longValue(); - } else { - throw new InternalError("SWT internal_new_GC did not return int or long but "+o[0].getClass()); - } - } - - public static void disposeGC(final Control swtControl, final long gc, final GCData gcData) { - invoke(true, new Runnable() { - public void run() { - if(swt_uses_long_handles) { - ReflectionUtil.callMethod(swtControl, swt_control_internal_dispose_GC, new Object[] { new Long(gc), gcData }); - } else { - ReflectionUtil.callMethod(swtControl, swt_control_internal_dispose_GC, new Object[] { new Integer((int)gc), gcData }); - } - } - }); - } - - public static void invoke(boolean wait, Runnable runnable) { - if(Platform.OS_TYPE == Platform.OSType.MACOS) { - OSXUtil.RunOnMainThread(wait, runnable); - } else { - runnable.run(); - } - } - -} |