< prev index next >

modules/javafx.swing/src/main/java/javafx/embed/swing/JFXPanel.java

Print this page

        

*** 36,45 **** --- 36,46 ---- 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,91 **** 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; /** * {@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 --- 76,96 ---- import com.sun.javafx.PlatformUtil; import java.awt.event.InvocationEvent; import java.lang.reflect.Method; import java.util.concurrent.atomic.AtomicInteger; ! 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.SwingNodeHelper; + 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,192 **** --- 188,209 ---- 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,461 **** // 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); ! } } } sendMouseEventToFX(e); super.processMouseEvent(e); --- 465,475 ---- // 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 ! jfxPaneliop.postEvent(this, e); } } sendMouseEventToFX(e); super.processMouseEvent(e);
*** 568,582 **** 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(); ! } if (oldWidth != pWidth || oldHeight != pHeight || newScaleFactorX != scaleFactorX || newScaleFactorY != scaleFactorY) { createResizePixelBuffer(newScaleFactorX, newScaleFactorY); if (scenePeer != null) { --- 582,597 ---- pHeight -= (i.top + i.bottom); } double newScaleFactorX = scaleFactorX; double newScaleFactorY = scaleFactorY; Graphics g = getGraphics(); ! 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,777 **** } 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(); ! } if (scaleFactorX != newScaleFactorX || scaleFactorY != newScaleFactorY) { createResizePixelBuffer(newScaleFactorX, newScaleFactorY); // The scene will request repaint. scenePeer.setPixelScaleFactors((float) newScaleFactorX, (float) newScaleFactorY); --- 778,793 ---- } gg.drawImage(pixelsIm, 0, 0, pWidth, pHeight, null); double newScaleFactorX = scaleFactorX; double newScaleFactorY = scaleFactorY; ! 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,837 **** } } } private transient AWTEventListener ungrabListener = event -> { ! if (event instanceof sun.awt.UngrabEvent) { ! SwingFXUtils.runOnFxThread(() -> { if (JFXPanel.this.stagePeer != null && getScene() != null && getScene().getFocusOwner() != null && getScene().getFocusOwner().isFocused()) { JFXPanel.this.stagePeer.focusUngrab(); --- 842,853 ---- } } } private transient AWTEventListener ungrabListener = event -> { ! if (jfxPaneliop.isUngrabEvent(event)) { ! SwingNodeHelper.runOnFxThread(() -> { if (JFXPanel.this.stagePeer != null && getScene() != null && getScene().getFocusOwner() != null && getScene().getFocusOwner().isFocused()) { JFXPanel.this.stagePeer.focusUngrab();
*** 845,855 **** final Window jfxPanelWindow = SwingUtilities.getWindowAncestor(JFXPanel.this); final Component source = (Component)event.getSource(); final Window eventWindow = source instanceof Window ? (Window)source : SwingUtilities.getWindowAncestor(source); if (jfxPanelWindow == eventWindow) { ! SwingFXUtils.runOnFxThread(() -> { if (JFXPanel.this.stagePeer != null) { // No need to check if grab is active or not. // NoAutoHide popups don't request the grab and // ignore the Ungrab event anyway. // AutoHide popups actually should be hidden when --- 861,871 ---- final Window jfxPanelWindow = SwingUtilities.getWindowAncestor(JFXPanel.this); final Component source = (Component)event.getSource(); final Window eventWindow = source instanceof Window ? (Window)source : SwingUtilities.getWindowAncestor(source); if (jfxPanelWindow == eventWindow) { ! SwingNodeHelper.runOnFxThread(() -> { if (JFXPanel.this.stagePeer != null) { // No need to check if grab is active or not. // NoAutoHide popups don't request the grab and // ignore the Ungrab event anyway. // AutoHide popups actually should be hidden when
*** 875,889 **** registerFinishListener(); AccessController.doPrivileged((PrivilegedAction<Void>) () -> { JFXPanel.this.getToolkit().addAWTEventListener(ungrabListener, ! SunToolkit.GRAB_EVENT_MASK | AWTEvent.MOUSE_EVENT_MASK); return null; }); updateComponentSize(); // see RT-23603 ! SwingFXUtils.runOnFxThread(() -> { if ((stage != null) && !stage.isShowing()) { stage.show(); sendMoveEventToFX(); } }); --- 891,905 ---- registerFinishListener(); AccessController.doPrivileged((PrivilegedAction<Void>) () -> { JFXPanel.this.getToolkit().addAWTEventListener(ungrabListener, ! jfxPaneliop.setMask()); return null; }); updateComponentSize(); // see RT-23603 ! SwingNodeHelper.runOnFxThread(() -> { if ((stage != null) && !stage.isShowing()) { stage.show(); sendMoveEventToFX(); } });
*** 902,912 **** * Notifies this component that it no longer has a parent component. * When this method is invoked, any KeyboardActions set up in the the * chain of parent components are removed. */ @Override public void removeNotify() { ! SwingFXUtils.runOnFxThread(() -> { if ((stage != null) && stage.isShowing()) { stage.hide(); } }); --- 918,928 ---- * Notifies this component that it no longer has a parent component. * When this method is invoked, any KeyboardActions set up in the the * chain of parent components are removed. */ @Override public void removeNotify() { ! SwingNodeHelper.runOnFxThread(() -> { if ((stage != null) && stage.isShowing()) { stage.hide(); } });
*** 926,941 **** 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)); } private class HostContainer implements HostInterface { @Override --- 942,952 ---- deregisterFinishListener(); } private void invokeOnClientEDT(Runnable r) { ! jfxPaneliop.postEvent(this, new InvocationEvent(this, r)); } private class HostContainer implements HostInterface { @Override
*** 1052,1064 **** 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); ! } } }); return true; // Oh, well... } --- 1063,1073 ---- if (PlatformUtil.isLinux()) return true; invokeOnClientEDT(() -> { Window window = SwingUtilities.getWindowAncestor(JFXPanel.this); if (window != null) { ! jfxPaneliop.grab(JFXPanel.this.getToolkit(), window); } }); return true; // Oh, well... }
*** 1070,1082 **** 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); ! } } }); } } } --- 1079,1089 ---- if (PlatformUtil.isLinux()) return; invokeOnClientEDT(() -> { Window window = SwingUtilities.getWindowAncestor(JFXPanel.this); if (window != null) { ! jfxPaneliop.ungrab(JFXPanel.this.getToolkit(), window); } }); } } }
< prev index next >