summaryrefslogtreecommitdiffstats
path: root/src/newt/classes
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2009-09-12 15:16:59 -0700
committerSven Gothel <[email protected]>2009-09-12 15:16:59 -0700
commit4fe426caf55889d17b387efa06551c1af8f0dabe (patch)
treeccd41a542053de870339485b902d180d4029ebb0 /src/newt/classes
parent3cc7335e94df9daaab5250487b9f03e19aaa292a (diff)
NEWT: Native window parenting (X11: OK); AWTWindow external Frame OK
Diffstat (limited to 'src/newt/classes')
-rwxr-xr-xsrc/newt/classes/com/sun/javafx/newt/NewtFactory.java29
-rwxr-xr-xsrc/newt/classes/com/sun/javafx/newt/Window.java21
-rw-r--r--src/newt/classes/com/sun/javafx/newt/awt/AWTWindow.java29
-rwxr-xr-xsrc/newt/classes/com/sun/javafx/newt/x11/X11Window.java10
4 files changed, 73 insertions, 16 deletions
diff --git a/src/newt/classes/com/sun/javafx/newt/NewtFactory.java b/src/newt/classes/com/sun/javafx/newt/NewtFactory.java
index 8665aff6f..2f719110d 100755
--- a/src/newt/classes/com/sun/javafx/newt/NewtFactory.java
+++ b/src/newt/classes/com/sun/javafx/newt/NewtFactory.java
@@ -80,26 +80,43 @@ public abstract class NewtFactory {
* Create a Window entity, incl native creation
*/
public static Window createWindow(Screen screen, Capabilities caps) {
- return Window.create(0, NativeWindowFactory.getNativeWindowType(true), screen, caps, false);
+ return Window.create(NativeWindowFactory.getNativeWindowType(true), 0, screen, caps, false);
}
public static Window createWindow(Screen screen, Capabilities caps, boolean undecorated) {
- return Window.create(0, NativeWindowFactory.getNativeWindowType(true), screen, caps, undecorated);
+ return Window.create(NativeWindowFactory.getNativeWindowType(true), 0, screen, caps, undecorated);
}
public static Window createWindow(long parentWindowHandle, Screen screen, Capabilities caps, boolean undecorated) {
- return Window.create(parentWindowHandle, NativeWindowFactory.getNativeWindowType(true), screen, caps, undecorated);
+ return Window.create(NativeWindowFactory.getNativeWindowType(true), parentWindowHandle, screen, caps, undecorated);
+ }
+
+ /**
+ * Ability to try a Window type with a construnctor argument, if supported ..<p>
+ * Currently only valid is <code> AWTWindow(Frame frame) </code>,
+ * to support an external created AWT Frame, ie the browsers embedded frame.
+ */
+ public static Window createWindow(Object[] cstrArguments, Screen screen, Capabilities caps, boolean undecorated) {
+ return Window.create(NativeWindowFactory.getNativeWindowType(true), cstrArguments, screen, caps, undecorated);
}
/**
* Create a Window entity using the given implementation type, incl native creation
*/
public static Window createWindow(String type, Screen screen, Capabilities caps) {
- return Window.create(0, type, screen, caps, false);
+ return Window.create(type, 0, screen, caps, false);
+ }
+
+ public static Window createWindow(String type, Screen screen, Capabilities caps, boolean undecorated) {
+ return Window.create(type, 0, screen, caps, undecorated);
+ }
+
+ public static Window createWindow(String type, long parentWindowHandle, Screen screen, Capabilities caps, boolean undecorated) {
+ return Window.create(type, parentWindowHandle, screen, caps, undecorated);
}
- public static Window createWindow(long parentWindowHandle, String type, Screen screen, Capabilities caps, boolean undecorated) {
- return Window.create(parentWindowHandle, type, screen, caps, undecorated);
+ public static Window createWindow(String type, Object[] cstrArguments, Screen screen, Capabilities caps, boolean undecorated) {
+ return Window.create(type, cstrArguments, screen, caps, undecorated);
}
/**
diff --git a/src/newt/classes/com/sun/javafx/newt/Window.java b/src/newt/classes/com/sun/javafx/newt/Window.java
index 3321715c3..918e54e1f 100755
--- a/src/newt/classes/com/sun/javafx/newt/Window.java
+++ b/src/newt/classes/com/sun/javafx/newt/Window.java
@@ -34,7 +34,9 @@
package com.sun.javafx.newt;
import com.sun.javafx.newt.impl.Debug;
+
import javax.media.nativewindow.*;
+import com.sun.nativewindow.impl.NWReflection;
import java.util.ArrayList;
import java.util.Iterator;
@@ -82,7 +84,7 @@ public abstract class Window implements NativeWindow
return windowClass;
}
- protected static Window create(long parentWindowHandle, String type, Screen screen, Capabilities caps, boolean undecorated) {
+ protected static Window create(String type, long parentWindowHandle, Screen screen, Capabilities caps, boolean undecorated) {
try {
Class windowClass = getWindowClass(type);
Window window = (Window) windowClass.newInstance();
@@ -97,6 +99,21 @@ public abstract class Window implements NativeWindow
}
}
+ protected static Window create(String type, Object[] cstrArguments, Screen screen, Capabilities caps, boolean undecorated) {
+ try {
+ Class windowClass = getWindowClass(type);
+ Window window = (Window) NWReflection.createInstance( windowClass, cstrArguments ) ;
+ window.invalidate();
+ window.screen = screen;
+ window.setUndecorated(undecorated);
+ window.createNative(0, caps);
+ return window;
+ } catch (Throwable t) {
+ t.printStackTrace();
+ throw new NativeWindowException(t);
+ }
+ }
+
protected static Window wrapHandle(String type, Screen screen, AbstractGraphicsConfiguration config,
long windowHandle, boolean fullscreen, boolean visible,
int x, int y, int width, int height)
@@ -146,6 +163,8 @@ public abstract class Window implements NativeWindow
", surfaceHandle 0x"+Long.toHexString(getSurfaceHandle())+
", pos "+getX()+"/"+getY()+", size "+getWidth()+"x"+getHeight()+
", visible "+isVisible()+
+ ", undecorated "+undecorated+
+ ", fullscreen "+fullscreen+
", "+screen+
", wrappedWindow "+getWrappedWindow());
diff --git a/src/newt/classes/com/sun/javafx/newt/awt/AWTWindow.java b/src/newt/classes/com/sun/javafx/newt/awt/AWTWindow.java
index 1682181f5..c7f4d5e5d 100644
--- a/src/newt/classes/com/sun/javafx/newt/awt/AWTWindow.java
+++ b/src/newt/classes/com/sun/javafx/newt/awt/AWTWindow.java
@@ -58,11 +58,17 @@ import javax.media.nativewindow.awt.*;
public class AWTWindow extends Window {
public AWTWindow() {
+ this(null);
+ }
+
+ public AWTWindow(Frame frame) {
super();
title = "AWT NewtWindow";
+ this.frame = frame;
}
- private Frame frame;
+ private boolean owningFrame;
+ private Frame frame = null;
private AWTCanvas canvas;
// non fullscreen dimensions ..
private int nfs_width, nfs_height, nfs_x, nfs_y;
@@ -80,12 +86,21 @@ public class AWTWindow extends Window {
protected void createNative(long parentWindowHandle, final Capabilities caps) {
+ if(0!=parentWindowHandle) {
+ throw new RuntimeException("Window parenting not supported in AWT, use AWTWindow(Frame) cstr for wrapping instead");
+ }
+
final AWTWindow awtWindow = this;
runOnEDT(true, new Runnable() {
public void run() {
- frame = new Frame(getTitle());
- frame.setUndecorated(isUndecorated());
+ if(null==frame) {
+ frame = new Frame();
+ owningFrame=true;
+ } else {
+ owningFrame=false;
+ }
+ frame.setTitle(getTitle());
frame.setLayout(new BorderLayout());
canvas = new AWTCanvas(caps);
Listener listener = new Listener(awtWindow);
@@ -96,6 +111,7 @@ public class AWTWindow extends Window {
frame.add(canvas, BorderLayout.CENTER);
frame.setSize(width, height);
frame.setLocation(x, y);
+ frame.setUndecorated(undecorated||fullscreen);
frame.addComponentListener(new MoveListener(awtWindow));
frame.addWindowListener(new WindowEventListener(awtWindow));
}
@@ -105,7 +121,10 @@ public class AWTWindow extends Window {
protected void closeNative() {
runOnEDT(true, new Runnable() {
public void run() {
- frame.dispose();
+ if(owningFrame) {
+ frame.dispose();
+ owningFrame=false;
+ }
frame = null;
}
});
@@ -217,7 +236,7 @@ public class AWTWindow extends Window {
runOnEDT(false, new Runnable() {
public void run() {
if(!frame.isDisplayable()) {
- frame.setUndecorated(fullscreen);
+ frame.setUndecorated(undecorated||fullscreen);
} else {
if(DEBUG_IMPLEMENTATION || DEBUG_WINDOW_EVENT) {
System.err.println("AWTWindow can't undecorate already created frame");
diff --git a/src/newt/classes/com/sun/javafx/newt/x11/X11Window.java b/src/newt/classes/com/sun/javafx/newt/x11/X11Window.java
index 3d6104789..aaea78589 100755
--- a/src/newt/classes/com/sun/javafx/newt/x11/X11Window.java
+++ b/src/newt/classes/com/sun/javafx/newt/x11/X11Window.java
@@ -65,6 +65,7 @@ public class X11Window extends Window {
if (w == 0 || w!=windowHandle) {
throw new NativeWindowException("Error creating window: "+w);
}
+ this.parentWindowHandle = parentWindowHandle;
windowHandleClose = windowHandle;
displayHandleClose = display.getHandle();
}
@@ -102,7 +103,7 @@ public class X11Window extends Window {
nfs_width=width;
nfs_height=height;
}
- setSize0(getDisplayHandle(), getScreenIndex(), windowHandle, x, y, width, height, 0, visible);
+ setSize0(parentWindowHandle, getDisplayHandle(), getScreenIndex(), windowHandle, x, y, width, height, (undecorated||fullscreen)?-1:1, false);
}
public void setPosition(int x, int y) {
@@ -131,7 +132,7 @@ public class X11Window extends Window {
if(DEBUG_IMPLEMENTATION || DEBUG_WINDOW_EVENT) {
System.err.println("X11Window fs: "+fullscreen+" "+x+"/"+y+" "+w+"x"+h);
}
- setSize0(getDisplayHandle(), getScreenIndex(), windowHandle, x, y, w, h, fullscreen?-1:1, visible);
+ setSize0(parentWindowHandle, getDisplayHandle(), getScreenIndex(), windowHandle, x, y, w, h, (undecorated||fullscreen)?-1:1, false);
}
return fullscreen;
}
@@ -145,8 +146,8 @@ public class X11Window extends Window {
long visualID, long javaObjectAtom, long windowDeleteAtom, int x, int y, int width, int height);
private native void CloseWindow(long display, long windowHandle, long javaObjectAtom);
private native void setVisible0(long display, long windowHandle, boolean visible);
- private native void setSize0(long display, int screen_index, long windowHandle,
- int x, int y, int width, int height, int decorationToggle, boolean isVisible);
+ private native void setSize0(long parentWindowHandle, long display, int screen_index, long windowHandle,
+ int x, int y, int width, int height, int decorationToggle, boolean setVisible);
private native void setPosition0(long display, long windowHandle, int x, int y);
private void sizeChanged(int newWidth, int newHeight) {
@@ -175,4 +176,5 @@ public class X11Window extends Window {
private long windowHandleClose;
private long displayHandleClose;
+ private long parentWindowHandle;
}