diff options
Diffstat (limited to 'src/nativewindow/classes/com/jogamp')
6 files changed, 93 insertions, 36 deletions
diff --git a/src/nativewindow/classes/com/jogamp/nativewindow/impl/NWJNILibLoader.java b/src/nativewindow/classes/com/jogamp/nativewindow/impl/NWJNILibLoader.java index b1cd71386..3b2a728e5 100644 --- a/src/nativewindow/classes/com/jogamp/nativewindow/impl/NWJNILibLoader.java +++ b/src/nativewindow/classes/com/jogamp/nativewindow/impl/NWJNILibLoader.java @@ -29,13 +29,8 @@ package com.jogamp.nativewindow.impl; -// FIXME: refactor Java SE dependencies -//import java.awt.Toolkit; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import java.security.AccessController; import java.security.PrivilegedAction; -import java.util.HashSet; import com.jogamp.common.jvm.JNILibLoaderBase; public class NWJNILibLoader extends JNILibLoaderBase { diff --git a/src/nativewindow/classes/com/jogamp/nativewindow/impl/jawt/JAWTWindow.java b/src/nativewindow/classes/com/jogamp/nativewindow/impl/jawt/JAWTWindow.java index 8ef2ba227..de6360212 100644 --- a/src/nativewindow/classes/com/jogamp/nativewindow/impl/jawt/JAWTWindow.java +++ b/src/nativewindow/classes/com/jogamp/nativewindow/impl/jawt/JAWTWindow.java @@ -41,7 +41,10 @@ import com.jogamp.common.util.locks.RecursiveLock; import java.awt.Component; import java.awt.Window; -import javax.media.nativewindow.*; +import javax.media.nativewindow.AbstractGraphicsConfiguration; +import javax.media.nativewindow.NativeSurface; +import javax.media.nativewindow.NativeWindow; +import javax.media.nativewindow.NativeWindowException; import javax.media.nativewindow.util.Point; import javax.media.nativewindow.util.Rectangle; @@ -64,12 +67,11 @@ public abstract class JAWTWindow implements NativeWindow { init((Component)comp); } - protected void init(Component windowObject) throws NativeWindowException { + private final void init(Component windowObject) throws NativeWindowException { invalidate(); this.component = windowObject; validateNative(); } - protected abstract void validateNative() throws NativeWindowException; protected synchronized void invalidate() { @@ -78,7 +80,7 @@ public abstract class JAWTWindow implements NativeWindow { bounds = new Rectangle(); } - protected void updateBounds(JAWT_Rectangle jawtBounds) { + protected final void updateBounds(JAWT_Rectangle jawtBounds) { bounds.setX(jawtBounds.getX()); bounds.setY(jawtBounds.getY()); bounds.setWidth(jawtBounds.getWidth()); @@ -86,9 +88,9 @@ public abstract class JAWTWindow implements NativeWindow { } /** @return the JAWT_DrawingSurfaceInfo's (JAWT_Rectangle) bounds, updated with lock */ - public Rectangle getBounds() { return bounds; } + public final Rectangle getBounds() { return bounds; } - public Component getAWTComponent() { + public final Component getAWTComponent() { return component; } @@ -96,7 +98,7 @@ public abstract class JAWTWindow implements NativeWindow { // SurfaceUpdateListener // - public void surfaceUpdated(Object updater, NativeSurface ns, long when) { + public final void surfaceUpdated(Object updater, NativeSurface ns, long when) { // nop } @@ -158,36 +160,36 @@ public abstract class JAWTWindow implements NativeWindow { return recurLock.getOwner(); } - public boolean surfaceSwap() { + public final boolean surfaceSwap() { return false; } - public void surfaceUpdated(Object updater, NativeWindow window, long when) { } + public final void surfaceUpdated(Object updater, NativeWindow window, long when) { } - public long getSurfaceHandle() { + public final long getSurfaceHandle() { return drawable; } - public AbstractGraphicsConfiguration getGraphicsConfiguration() { + public final AbstractGraphicsConfiguration getGraphicsConfiguration() { return config; } - public long getDisplayHandle() { + public final long getDisplayHandle() { return config.getScreen().getDevice().getHandle(); } - public int getScreenIndex() { + public final int getScreenIndex() { return config.getScreen().getIndex(); } - public void setSize(int width, int height) { + public final void setSize(int width, int height) { component.setSize(width, height); } - public int getWidth() { + public final int getWidth() { return component.getWidth(); } - public int getHeight() { + public final int getHeight() { return component.getHeight(); } @@ -204,7 +206,7 @@ public abstract class JAWTWindow implements NativeWindow { invalidate(); } - public NativeWindow getParent() { + public final NativeWindow getParent() { return null; } @@ -212,23 +214,45 @@ public abstract class JAWTWindow implements NativeWindow { return drawable; } - public int getX() { + public final int getX() { return component.getX(); } - public int getY() { + public final int getY() { return component.getY(); } - public Point getLocationOnScreen(Point point) { + public Point getLocationOnScreen(Point storage) { + if( 0 != getWindowHandle() ) { + Point d; + // windowLock.lock(); + try { + d = getLocationOnScreenImpl(0, 0); + } finally { + // windowLock.unlock(); + } + if(null!=d) { + if(null!=storage) { + storage.translate(d.getX(),d.getY()); + return storage; + } + return d; + } + // fall through intended .. + } + + if(!Thread.holdsLock(component.getTreeLock())) { + return null; // avoid deadlock .. + } java.awt.Point awtLOS = component.getLocationOnScreen(); int dx = (int) ( awtLOS.getX() + .5 ) ; int dy = (int) ( awtLOS.getY() + .5 ) ; - if(null!=point) { - return point.translate(dx, dy); + if(null!=storage) { + return storage.translate(dx, dy); } return new Point(dx, dy); } + protected abstract Point getLocationOnScreenImpl(int x, int y); public String toString() { StringBuffer sb = new StringBuffer(); diff --git a/src/nativewindow/classes/com/jogamp/nativewindow/impl/jawt/macosx/MacOSXJAWTWindow.java b/src/nativewindow/classes/com/jogamp/nativewindow/impl/jawt/macosx/MacOSXJAWTWindow.java index bcaa66847..f511c7082 100644 --- a/src/nativewindow/classes/com/jogamp/nativewindow/impl/jawt/macosx/MacOSXJAWTWindow.java +++ b/src/nativewindow/classes/com/jogamp/nativewindow/impl/jawt/macosx/MacOSXJAWTWindow.java @@ -47,6 +47,7 @@ import java.awt.GraphicsEnvironment; import javax.media.nativewindow.*; import java.security.*; +import javax.media.nativewindow.util.Point; public class MacOSXJAWTWindow extends JAWTWindow { @@ -125,6 +126,10 @@ public class MacOSXJAWTWindow extends JAWTWindow { macosxdsi = null; } + protected Point getLocationOnScreenImpl(int x, int y) { + return null; // FIXME + } + // Variables for lockSurface/unlockSurface private JAWT_DrawingSurface ds; private boolean dsLocked; diff --git a/src/nativewindow/classes/com/jogamp/nativewindow/impl/jawt/windows/WindowsJAWTWindow.java b/src/nativewindow/classes/com/jogamp/nativewindow/impl/jawt/windows/WindowsJAWTWindow.java index d19a11f66..14d6eebcd 100644 --- a/src/nativewindow/classes/com/jogamp/nativewindow/impl/jawt/windows/WindowsJAWTWindow.java +++ b/src/nativewindow/classes/com/jogamp/nativewindow/impl/jawt/windows/WindowsJAWTWindow.java @@ -40,10 +40,17 @@ package com.jogamp.nativewindow.impl.jawt.windows; -import com.jogamp.nativewindow.impl.*; -import com.jogamp.nativewindow.impl.jawt.*; +import com.jogamp.nativewindow.impl.jawt.JAWT; +import com.jogamp.nativewindow.impl.jawt.JAWTFactory; +import com.jogamp.nativewindow.impl.jawt.JAWTWindow; +import com.jogamp.nativewindow.impl.jawt.JAWT_DrawingSurface; +import com.jogamp.nativewindow.impl.jawt.JAWT_DrawingSurfaceInfo; +import com.jogamp.nativewindow.impl.windows.GDI; -import javax.media.nativewindow.*; +import javax.media.nativewindow.AbstractGraphicsConfiguration; +import javax.media.nativewindow.NativeWindow; +import javax.media.nativewindow.NativeWindowException; +import javax.media.nativewindow.util.Point; public class WindowsJAWTWindow extends JAWTWindow { @@ -152,6 +159,10 @@ public class WindowsJAWTWindow extends JAWTWindow { return windowHandle; } + protected Point getLocationOnScreenImpl(int x, int y) { + return GDI.GetRelativeLocation( getWindowHandle(), 0 /*root win*/, x, y); + } + // Variables for lockSurface/unlockSurface private JAWT_DrawingSurface ds; private boolean dsLocked; diff --git a/src/nativewindow/classes/com/jogamp/nativewindow/impl/jawt/x11/X11JAWTWindow.java b/src/nativewindow/classes/com/jogamp/nativewindow/impl/jawt/x11/X11JAWTWindow.java index a5d36b6dd..1324bd199 100644 --- a/src/nativewindow/classes/com/jogamp/nativewindow/impl/jawt/x11/X11JAWTWindow.java +++ b/src/nativewindow/classes/com/jogamp/nativewindow/impl/jawt/x11/X11JAWTWindow.java @@ -37,12 +37,20 @@ package com.jogamp.nativewindow.impl.jawt.x11; -import javax.media.nativewindow.*; -import javax.media.nativewindow.awt.*; - -import com.jogamp.nativewindow.impl.x11.*; -import com.jogamp.nativewindow.impl.jawt.*; - +import com.jogamp.nativewindow.impl.jawt.JAWT; +import com.jogamp.nativewindow.impl.jawt.JAWTFactory; +import com.jogamp.nativewindow.impl.jawt.JAWTWindow; +import com.jogamp.nativewindow.impl.jawt.JAWT_DrawingSurface; +import com.jogamp.nativewindow.impl.jawt.JAWT_DrawingSurfaceInfo; +import com.jogamp.nativewindow.impl.x11.X11Util; +import javax.media.nativewindow.AbstractGraphicsConfiguration; +import javax.media.nativewindow.AbstractGraphicsDevice; +import javax.media.nativewindow.AbstractGraphicsScreen; +import javax.media.nativewindow.NativeWindow; +import javax.media.nativewindow.NativeWindowException; +import javax.media.nativewindow.NativeWindowFactory; +import javax.media.nativewindow.awt.AWTGraphicsDevice; +import javax.media.nativewindow.util.Point; public class X11JAWTWindow extends JAWTWindow { @@ -134,6 +142,10 @@ public class X11JAWTWindow extends JAWTWindow { x11dsi = null; } + protected Point getLocationOnScreenImpl(int x, int y) { + return X11Util.GetRelativeLocation( getDisplayHandle(), getScreenIndex(), getWindowHandle(), 0 /*root win*/, x, y); + } + // Variables for lockSurface/unlockSurface private JAWT_DrawingSurface ds; private boolean dsLocked; diff --git a/src/nativewindow/classes/com/jogamp/nativewindow/impl/x11/X11Util.java b/src/nativewindow/classes/com/jogamp/nativewindow/impl/x11/X11Util.java index f7f4828ca..bd76908a1 100644 --- a/src/nativewindow/classes/com/jogamp/nativewindow/impl/x11/X11Util.java +++ b/src/nativewindow/classes/com/jogamp/nativewindow/impl/x11/X11Util.java @@ -44,6 +44,7 @@ import java.nio.ShortBuffer; import java.security.AccessController; import java.util.ArrayList; import java.util.List; +import javax.media.nativewindow.util.Point; /** * Contains a thread safe X11 utility to retrieve display connections. @@ -517,6 +518,15 @@ public class X11Util { } } + public static Point GetRelativeLocation(long display, int screen_index, long src_win, long dest_win, int src_x, int src_y) { + lockDefaultToolkit(display); + try { + return X11Lib.GetRelativeLocation(display, screen_index, src_win, dest_win, src_x, src_y); + } finally { + unlockDefaultToolkit(display); + } + } + public static XVisualInfo[] XGetVisualInfo(long display, long arg1, XVisualInfo arg2, int[] arg3, int arg3_offset) { lockDefaultToolkit(display); try { |