< prev index next >
modules/javafx.swing/src/main/java/javafx/embed/swing/SwingNode.java
Print this page
@@ -51,11 +51,10 @@
import java.awt.dnd.DragGestureListener;
import java.awt.dnd.DragGestureRecognizer;
import java.awt.dnd.DragSource;
import java.awt.dnd.DropTarget;
import java.awt.dnd.InvalidDnDOperationException;
-import java.awt.dnd.peer.DragSourceContextPeer;
import java.awt.event.InputEvent;
import java.awt.event.MouseWheelEvent;
import java.awt.event.WindowEvent;
import java.awt.event.WindowFocusListener;
import java.lang.reflect.Method;
@@ -78,13 +77,14 @@
import com.sun.javafx.stage.WindowHelper;
import com.sun.javafx.tk.TKStage;
import com.sun.javafx.PlatformUtil;
import com.sun.javafx.embed.swing.SwingNodeHelper;
import com.sun.javafx.scene.NodeHelper;
-import sun.awt.UngrabEvent;
-import sun.swing.JLightweightFrame;
-import sun.swing.LightweightContent;
+
+import jdk.swing.interop.LightweightFrameWrapper;
+import jdk.swing.interop.LightweightContentWrapper;
+import jdk.swing.interop.DragSourceContextWrapper;
import static javafx.stage.WindowEvent.WINDOW_HIDDEN;
/**
* This class is used to embed a Swing content into a JavaFX application.
@@ -174,12 +174,12 @@
private int swingMaxHeight;
private int swingMinWidth;
private int swingMinHeight;
private volatile JComponent content;
- private volatile JLightweightFrame lwFrame;
- final JLightweightFrame getLightweightFrame() { return lwFrame; }
+ private volatile LightweightFrameWrapper lwFrame;
+ final LightweightFrameWrapper getLightweightFrame() { return lwFrame; }
private NGExternalNode peer;
private final ReentrantLock paintLock = new ReentrantLock();
@@ -329,25 +329,25 @@
}
}
}
/**
- * Calls JLightweightFrame.notifyDisplayChanged.
+ * Calls LightweightFrameWrapper.notifyDisplayChanged.
* Must be called on EDT only.
*/
- private static OptionalMethod<JLightweightFrame> jlfNotifyDisplayChanged;
- private static OptionalMethod<JLightweightFrame> jlfOverrideNativeWindowHandle;
+ private static OptionalMethod<LightweightFrameWrapper> jlfNotifyDisplayChanged;
+ private static OptionalMethod<LightweightFrameWrapper> jlfOverrideNativeWindowHandle;
static {
- jlfNotifyDisplayChanged = new OptionalMethod<>(JLightweightFrame.class,
+ jlfNotifyDisplayChanged = new OptionalMethod<>(LightweightFrameWrapper.class,
"notifyDisplayChanged", Double.TYPE, Double.TYPE);
if (!jlfNotifyDisplayChanged.isSupported()) {
jlfNotifyDisplayChanged = new OptionalMethod<>(
- JLightweightFrame.class,"notifyDisplayChanged", Integer.TYPE);
+ LightweightFrameWrapper.class,"notifyDisplayChanged", Integer.TYPE);
}
- jlfOverrideNativeWindowHandle = new OptionalMethod<>(JLightweightFrame.class,
+ jlfOverrideNativeWindowHandle = new OptionalMethod<>(LightweightFrameWrapper.class,
"overrideNativeWindowHandle", Long.TYPE, Runnable.class);
}
/*
@@ -357,11 +357,11 @@
if (lwFrame != null) {
lwFrame.dispose();
lwFrame = null;
}
if (content != null) {
- lwFrame = new JLightweightFrame();
+ lwFrame = new LightweightFrameWrapper();
SwingNodeWindowFocusListener snfListener =
new SwingNodeWindowFocusListener(this);
lwFrame.addWindowFocusListener(snfListener);
@@ -557,11 +557,12 @@
};
private final EventHandler<FocusUngrabEvent> ungrabHandler = event -> {
if (!skipBackwardUnrgabNotification) {
if (lwFrame != null) {
- AccessController.doPrivileged(new PostEventAction(new UngrabEvent(lwFrame)));
+ AccessController.doPrivileged(new PostEventAction(
+ lwFrame.createUngrabEvent(lwFrame)));
}
}
};
private final ChangeListener<Boolean> windowVisibleListener = (observable, oldValue, newValue) -> {
@@ -671,15 +672,15 @@
peer.markContentDirty();
}
}
/**
- * Calls JLightweightFrame.setHostBounds.
+ * Calls LightweightFrameWrapper.setHostBounds.
* Must be called on EDT only.
*/
- private static final OptionalMethod<JLightweightFrame> jlfSetHostBounds =
- new OptionalMethod<>(JLightweightFrame.class, "setHostBounds",
+ private static final OptionalMethod<LightweightFrameWrapper> jlfSetHostBounds =
+ new OptionalMethod<>(LightweightFrameWrapper.class, "setHostBounds",
Integer.TYPE, Integer.TYPE, Integer.TYPE, Integer.TYPE);
private void locateLwFrame() {
if (getScene() == null
|| lwFrame == null
@@ -795,13 +796,13 @@
tx.transform(bounds, bounds);
return bounds;
}
private static class SwingNodeDisposer implements DisposerRecord {
- JLightweightFrame lwFrame;
+ LightweightFrameWrapper lwFrame;
- SwingNodeDisposer(JLightweightFrame ref) {
+ SwingNodeDisposer(LightweightFrameWrapper ref) {
this.lwFrame = ref;
}
public void dispose() {
if (lwFrame != null) {
lwFrame.dispose();
@@ -836,11 +837,11 @@
}
});
}
}
- private static class SwingNodeContent implements LightweightContent {
+ private static class SwingNodeContent extends LightweightContentWrapper {
private JComponent comp;
private volatile FXDnD dnd;
private WeakReference<SwingNode> swingNodeRef;
SwingNodeContent(JComponent comp, SwingNode swingNode) {
@@ -864,24 +865,22 @@
if (swingNode != null) {
swingNode.paintLock.unlock();
}
}
- // Note: we skip @Override annotation and implement both pre-hiDPI and post-hiDPI versions
- // of the method for compatibility.
- //@Override
+ @Override
public void imageBufferReset(int[] data, int x, int y, int width, int height, int linestride) {
imageBufferReset(data, x, y, width, height, linestride, 1);
}
//@Override
public void imageBufferReset(int[] data, int x, int y, int width, int height, int linestride, int scale) {
SwingNode swingNode = swingNodeRef.get();
if (swingNode != null) {
swingNode.setImageBuffer(data, x, y, width, height, linestride, scale, scale);
}
}
- //@Override
+ @Override
public void imageBufferReset(int[] data, int x, int y, int width, int height, int linestride, double scaleX, double scaleY) {
SwingNode swingNode = swingNodeRef.get();
if (swingNode != null) {
swingNode.setImageBuffer(data, x, y, width, height, linestride, scaleX, scaleY);
}
@@ -982,34 +981,34 @@
}
}
}
}
- //@Override
+ @Override
public synchronized <T extends DragGestureRecognizer> T createDragGestureRecognizer(
Class<T> abstractRecognizerClass,
DragSource ds, Component c, int srcActions,
DragGestureListener dgl)
{
initDnD();
return dnd.createDragGestureRecognizer(abstractRecognizerClass, ds, c, srcActions, dgl);
}
- //@Override
- public DragSourceContextPeer createDragSourceContextPeer(DragGestureEvent dge) throws InvalidDnDOperationException
+ @Override
+ public DragSourceContextWrapper createDragSourceContextPeer(DragGestureEvent dge) throws InvalidDnDOperationException
{
initDnD();
return dnd.createDragSourceContextPeer(dge);
}
- //@Override
+ @Override
public void addDropTarget(DropTarget dt) {
initDnD();
dnd.addDropTarget(dt);
}
- //@Override
+ @Override
public void removeDropTarget(DropTarget dt) {
initDnD();
dnd.removeDropTarget(dt);
}
}
@@ -1047,11 +1046,11 @@
private class SwingMouseEventHandler implements EventHandler<MouseEvent> {
private final Set<MouseButton> mouseClickedAllowed = new HashSet<>();
@Override
public void handle(MouseEvent event) {
- JLightweightFrame frame = lwFrame;
+ LightweightFrameWrapper frame = lwFrame;
if (frame == null) {
return;
}
int swingID = SwingEvents.fxMouseEventTypeToMouseID(event);
if (swingID < 0) {
@@ -1085,22 +1084,22 @@
int relX = (int) Math.round(event.getX());
int relY = (int) Math.round(event.getY());
int absX = (int) Math.round(event.getScreenX());
int absY = (int) Math.round(event.getScreenY());
java.awt.event.MouseEvent mouseEvent =
- new java.awt.event.MouseEvent(
+ frame.createMouseEvent(
frame, swingID, swingWhen, swingModifiers,
relX, relY, absX, absY,
event.getClickCount(), swingPopupTrigger, swingButton);
AccessController.doPrivileged(new PostEventAction(mouseEvent));
}
}
private class SwingScrollEventHandler implements EventHandler<ScrollEvent> {
@Override
public void handle(ScrollEvent event) {
- JLightweightFrame frame = lwFrame;
+ LightweightFrameWrapper frame = lwFrame;
if (frame == null) {
return;
}
int swingModifiers = SwingEvents.fxScrollModsToMouseWheelMods(event);
@@ -1120,30 +1119,28 @@
sendMouseWheelEvent(frame, event.getX(), event.getY(),
swingModifiers, delta);
}
}
- private void sendMouseWheelEvent(Component source, double fxX, double fxY, int swingModifiers, double delta) {
+ private void sendMouseWheelEvent(LightweightFrameWrapper source, double fxX, double fxY, int swingModifiers, double delta) {
int wheelRotation = (int) delta;
int signum = (int) Math.signum(delta);
if (signum * delta < 1) {
wheelRotation = signum;
}
int x = (int) Math.round(fxX);
int y = (int) Math.round(fxY);
MouseWheelEvent mouseWheelEvent =
- new MouseWheelEvent(source, java.awt.event.MouseEvent.MOUSE_WHEEL,
- System.currentTimeMillis(), swingModifiers, x, y, 0, 0,
- 0, false, MouseWheelEvent.WHEEL_UNIT_SCROLL, 1 , -wheelRotation);
+ lwFrame.createMouseWheelEvent(source, swingModifiers, x, y, -wheelRotation);
AccessController.doPrivileged(new PostEventAction(mouseWheelEvent));
}
}
private class SwingKeyEventHandler implements EventHandler<KeyEvent> {
@Override
public void handle(KeyEvent event) {
- JLightweightFrame frame = lwFrame;
+ LightweightFrameWrapper frame = lwFrame;
if (frame == null) {
return;
}
if (event.getCharacter().isEmpty()) {
// TODO: should we post an "empty" character?
@@ -1174,12 +1171,12 @@
if (text.length() == 1) {
swingChar = text.charAt(0);
}
}
long swingWhen = System.currentTimeMillis();
- java.awt.event.KeyEvent keyEvent = new java.awt.event.KeyEvent(
- frame, swingID, swingWhen, swingModifiers,
- swingKeyCode, swingChar);
+ java.awt.event.KeyEvent keyEvent = frame.createKeyEvent(frame,
+ swingID, swingWhen, swingModifiers, swingKeyCode,
+ swingChar);
AccessController.doPrivileged(new PostEventAction(keyEvent));
}
}
}
< prev index next >