From ac49f30cde53f75d74a9e605dbc255df5852bdc2 Mon Sep 17 00:00:00 2001 From: Sven Gothel Date: Tue, 27 Sep 2011 14:57:20 +0200 Subject: NEWT/OSX: 'Better' child window positioning, still, after reparenting into parent, a white window rectangle remains. .. we also need to understand the absolute screen position better, ie. when required and when not (at window creation currently). --- src/newt/classes/com/jogamp/newt/awt/NewtCanvasAWT.java | 1 + src/newt/classes/jogamp/newt/driver/macosx/MacWindow.java | 10 ++++++++-- src/newt/native/MacWindow.m | 12 ++++++------ 3 files changed, 15 insertions(+), 8 deletions(-) (limited to 'src/newt') diff --git a/src/newt/classes/com/jogamp/newt/awt/NewtCanvasAWT.java b/src/newt/classes/com/jogamp/newt/awt/NewtCanvasAWT.java index 5a924149c..929980d52 100644 --- a/src/newt/classes/com/jogamp/newt/awt/NewtCanvasAWT.java +++ b/src/newt/classes/com/jogamp/newt/awt/NewtCanvasAWT.java @@ -55,6 +55,7 @@ import jogamp.newt.awt.event.NewtFactoryAWT; import javax.swing.MenuSelectionManager; +@SuppressWarnings("serial") public class NewtCanvasAWT extends java.awt.Canvas implements WindowClosingProtocol { public static final boolean DEBUG = Debug.debug("Window"); diff --git a/src/newt/classes/jogamp/newt/driver/macosx/MacWindow.java b/src/newt/classes/jogamp/newt/driver/macosx/MacWindow.java index 8fe32029c..b34f9a26c 100644 --- a/src/newt/classes/jogamp/newt/driver/macosx/MacWindow.java +++ b/src/newt/classes/jogamp/newt/driver/macosx/MacWindow.java @@ -200,8 +200,10 @@ public class MacWindow extends WindowImpl { } } { + // On MacOSX the absolute position is required to position + // a window - even for a child window! final NativeWindow parent = getParent(); - if(null != parent) { + if( null != parent && 0 != parent.getWindowHandle() ) { final Point p = parent.getLocationOnScreen(null); _x += p.getX(); _y += p.getY(); @@ -218,7 +220,9 @@ public class MacWindow extends WindowImpl { if( getWindowHandle() == 0 ) { if( 0 != ( FLAG_IS_VISIBLE & flags) ) { - createWindow(false, _x, _y, width, height, 0 != ( FLAG_IS_FULLSCREEN & flags)); + // FIXME: for some reason we do not need (or can use) + // the absolute position at creation time .. need to determine the reason/mechanics. + createWindow(false, x, y, width, height, 0 != ( FLAG_IS_FULLSCREEN & flags)); this.x = x; this.y = y; visibleChanged(false, true); // no native event .. @@ -237,6 +241,8 @@ public class MacWindow extends WindowImpl { } else if( 0 != ( FLAG_CHANGE_DECORATION & flags) || 0 != ( FLAG_CHANGE_PARENTING & flags) || 0 != ( FLAG_CHANGE_FULLSCREEN & flags) ) { + // FIXME: for some reason we do not need (or can use) + // the absolute position at creation time .. need to determine the reason/mechanics. createWindow(true, x, y, width, height, 0 != ( FLAG_IS_FULLSCREEN & flags)); } if(x>=0 && y>=0) { diff --git a/src/newt/native/MacWindow.m b/src/newt/native/MacWindow.m index a149c74af..335a1fd65 100644 --- a/src/newt/native/MacWindow.m +++ b/src/newt/native/MacWindow.m @@ -350,8 +350,8 @@ JNIEXPORT void JNICALL Java_jogamp_newt_driver_macosx_MacWindow_makeKeyAndOrderF DBG_PRINT( "makeKeyAndOrderFront0 - window: %p (START)\n", win); - [win performSelectorOnMainThread:@selector(makeKeyAndOrderFront:) withObject:win waitUntilDone:NO]; - // [win makeKeyAndOrderFront: win]; + // [win performSelectorOnMainThread:@selector(makeKeyAndOrderFront:) withObject:win waitUntilDone:NO]; + [win makeKeyAndOrderFront: win]; DBG_PRINT( "makeKeyAndOrderFront0 - window: %p (END)\n", win); @@ -371,8 +371,8 @@ JNIEXPORT void JNICALL Java_jogamp_newt_driver_macosx_MacWindow_makeKey0 DBG_PRINT( "makeKey0 - window: %p (START)\n", win); - [win performSelectorOnMainThread:@selector(makeKeyWindow:) withObject:nil waitUntilDone:NO]; - // [win makeKeyWindow]; + // [win performSelectorOnMainThread:@selector(makeKeyWindow:) withObject:nil waitUntilDone:NO]; + [win makeKeyWindow]; DBG_PRINT( "makeKey0 - window: %p (END)\n", win); @@ -392,8 +392,8 @@ JNIEXPORT void JNICALL Java_jogamp_newt_driver_macosx_MacWindow_orderOut0 DBG_PRINT( "orderOut0 - window: %p (START)\n", win); - [win performSelectorOnMainThread:@selector(orderOut:) withObject:win waitUntilDone:NO]; - // [win orderOut: win]; + // [win performSelectorOnMainThread:@selector(orderOut:) withObject:win waitUntilDone:NO]; + [win orderOut: win]; DBG_PRINT( "orderOut0 - window: %p (END)\n", win); -- cgit v1.2.3