< prev index next >
modules/javafx.swing/src/main/java/javafx/embed/swing/JFXPanel.java
Print this page
@@ -36,10 +36,11 @@
import java.awt.Point;
import java.awt.Window;
import java.awt.Insets;
import java.awt.EventQueue;
import java.awt.SecondaryLoop;
+import java.awt.GraphicsEnvironment;
import java.awt.event.AWTEventListener;
import java.awt.event.ComponentEvent;
import java.awt.event.FocusEvent;
import java.awt.event.HierarchyEvent;
import java.awt.event.InputEvent;
@@ -75,17 +76,20 @@
import com.sun.javafx.PlatformUtil;
import java.awt.event.InvocationEvent;
import java.lang.reflect.Method;
import java.util.concurrent.atomic.AtomicInteger;
-import sun.awt.AppContext;
-import sun.awt.SunToolkit;
-import sun.java2d.SunGraphics2D;
-import sun.java2d.SurfaceData;
+
import com.sun.javafx.logging.PlatformLogger;
import com.sun.javafx.logging.PlatformLogger.Level;
+import com.sun.javafx.embed.swing.InteropFactory;
+import com.sun.javafx.embed.swing.SwingDnD;
+import com.sun.javafx.embed.swing.SwingEvents;
+import com.sun.javafx.embed.swing.SwingCursors;
+import com.sun.javafx.embed.swing.JFXPanelInterop;
+
/**
* {@code JFXPanel} is a component to embed JavaFX content into
* Swing applications. The content to be displayed is specified
* with the {@link #setScene} method that accepts an instance of
* JavaFX {@code Scene}. After the scene is assigned, it gets
@@ -183,10 +187,22 @@
private boolean isCapturingMouse = false;
private static boolean fxInitialized;
+ private static JFXPanelInterop jfxPaneliop;
+
+ static {
+ InteropFactory instance = null;
+ try {
+ instance = InteropFactory.getInstance();
+ } catch (Exception e) {
+ throw new ExceptionInInitializerError(e);
+ }
+ jfxPaneliop = instance.createJFXPanelImpl();
+ }
+
private synchronized void registerFinishListener() {
if (instanceCount.getAndIncrement() > 0) {
// Already registered
return;
}
@@ -448,14 +464,11 @@
// asynchronously handled so MOUSE_PRESSED event will not be
// honoured by FX immediately due to lack of focus in fx
// component. Fire the same MOUSE_PRESSED event after
// requestFocus() so that 2nd mouse press will be honoured
// since now fx have focus
- AppContext context = SunToolkit.targetToAppContext(this);
- if (context != null) {
- SunToolkit.postEvent(context, e);
- }
+ jfxPaneliop.postEvent(this, e);
}
}
sendMouseEventToFX(e);
super.processMouseEvent(e);
@@ -568,15 +581,16 @@
pHeight -= (i.top + i.bottom);
}
double newScaleFactorX = scaleFactorX;
double newScaleFactorY = scaleFactorY;
Graphics g = getGraphics();
- if (g instanceof SunGraphics2D) {
- SurfaceData sd = ((SunGraphics2D) g).surfaceData;
- newScaleFactorX = sd.getDefaultScaleX();
- newScaleFactorY = sd.getDefaultScaleY();
- }
+ newScaleFactorX = GraphicsEnvironment.getLocalGraphicsEnvironment().
+ getDefaultScreenDevice().getDefaultConfiguration().
+ getDefaultTransform().getScaleX();
+ newScaleFactorY = GraphicsEnvironment.getLocalGraphicsEnvironment().
+ getDefaultScreenDevice().getDefaultConfiguration().
+ getDefaultTransform().getScaleY();
if (oldWidth != pWidth || oldHeight != pHeight ||
newScaleFactorX != scaleFactorX || newScaleFactorY != scaleFactorY)
{
createResizePixelBuffer(newScaleFactorX, newScaleFactorY);
if (scenePeer != null) {
@@ -763,15 +777,16 @@
}
gg.drawImage(pixelsIm, 0, 0, pWidth, pHeight, null);
double newScaleFactorX = scaleFactorX;
double newScaleFactorY = scaleFactorY;
- if (g instanceof SunGraphics2D) {
- SurfaceData sd = ((SunGraphics2D)g).surfaceData;
- newScaleFactorX = sd.getDefaultScaleX();
- newScaleFactorY = sd.getDefaultScaleY();
- }
+ newScaleFactorX = GraphicsEnvironment.getLocalGraphicsEnvironment().
+ getDefaultScreenDevice().getDefaultConfiguration().
+ getDefaultTransform().getScaleX();
+ newScaleFactorY = GraphicsEnvironment.getLocalGraphicsEnvironment().
+ getDefaultScreenDevice().getDefaultConfiguration().
+ getDefaultTransform().getScaleY();
if (scaleFactorX != newScaleFactorX || scaleFactorY != newScaleFactorY) {
createResizePixelBuffer(newScaleFactorX, newScaleFactorY);
// The scene will request repaint.
scenePeer.setPixelScaleFactors((float) newScaleFactorX,
(float) newScaleFactorY);
@@ -826,11 +841,11 @@
}
}
}
private transient AWTEventListener ungrabListener = event -> {
- if (event instanceof sun.awt.UngrabEvent) {
+ if (jfxPaneliop.isUngrabEvent(event)) {
SwingFXUtils.runOnFxThread(() -> {
if (JFXPanel.this.stagePeer != null &&
getScene() != null &&
getScene().getFocusOwner() != null &&
getScene().getFocusOwner().isFocused()) {
@@ -875,11 +890,11 @@
registerFinishListener();
AccessController.doPrivileged((PrivilegedAction<Void>) () -> {
JFXPanel.this.getToolkit().addAWTEventListener(ungrabListener,
- SunToolkit.GRAB_EVENT_MASK | AWTEvent.MOUSE_EVENT_MASK);
+ jfxPaneliop.setMask());
return null;
});
updateComponentSize(); // see RT-23603
SwingFXUtils.runOnFxThread(() -> {
if ((stage != null) && !stage.isShowing()) {
@@ -926,16 +941,11 @@
deregisterFinishListener();
}
private void invokeOnClientEDT(Runnable r) {
- AppContext context = SunToolkit.targetToAppContext(this);
- if (context == null) {
- if (log.isLoggable(Level.FINE)) log.fine("null AppContext encountered!");
- return;
- }
- SunToolkit.postEvent(context, new InvocationEvent(this, r));
+ jfxPaneliop.postEvent(this, new InvocationEvent(this, r));
}
private class HostContainer implements HostInterface {
@Override
@@ -1052,13 +1062,11 @@
if (PlatformUtil.isLinux()) return true;
invokeOnClientEDT(() -> {
Window window = SwingUtilities.getWindowAncestor(JFXPanel.this);
if (window != null) {
- if (JFXPanel.this.getToolkit() instanceof SunToolkit) {
- ((SunToolkit)JFXPanel.this.getToolkit()).grab(window);
- }
+ jfxPaneliop.grab(JFXPanel.this.getToolkit(), window);
}
});
return true; // Oh, well...
}
@@ -1070,13 +1078,11 @@
if (PlatformUtil.isLinux()) return;
invokeOnClientEDT(() -> {
Window window = SwingUtilities.getWindowAncestor(JFXPanel.this);
if (window != null) {
- if (JFXPanel.this.getToolkit() instanceof SunToolkit) {
- ((SunToolkit)JFXPanel.this.getToolkit()).ungrab(window);
- }
+ jfxPaneliop.ungrab(JFXPanel.this.getToolkit(), window);
}
});
}
}
}
< prev index next >