From b950b5a71a7faeb392c64ed791733d303539fbb0 Mon Sep 17 00:00:00 2001 From: javasabr Date: Fri, 22 Jul 2016 21:07:37 +0300 Subject: [PATCH 01/24] =?UTF-8?q?=D1=80=D0=B5=D1=84=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=B8=D0=BD=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/misc.xml | 2 +- .../com/jme3x/jfx/FxPlatformExecutor.java | 19 ---- .../java/com/jme3x/jfx/JavaFXPicture.java | 7 +- .../com/jme3x/jfx/JmeFXHostInterfaceImpl.java | 8 +- .../com/jme3x/jfx/JmeFXInputListener.java | 74 ++++------------ .../java/com/jme3x/jfx/JmeFxContainer.java | 86 ++++++------------- .../jfx/cursor/CursorDisplayProvider.java | 10 ++- .../cursor/proton/ProtonCursorProvider.java | 66 +++++++------- .../injfx/SceneProcessorCopyToImageView.java | 1 - .../java/com/jme3x/jfx/util/JFXUtils.java | 35 ++++---- 10 files changed, 102 insertions(+), 206 deletions(-) delete mode 100755 src/main/java/com/jme3x/jfx/FxPlatformExecutor.java diff --git a/.idea/misc.xml b/.idea/misc.xml index 3a99fa2..1344a47 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -13,7 +13,7 @@ - + \ No newline at end of file diff --git a/src/main/java/com/jme3x/jfx/FxPlatformExecutor.java b/src/main/java/com/jme3x/jfx/FxPlatformExecutor.java deleted file mode 100755 index a69b123..0000000 --- a/src/main/java/com/jme3x/jfx/FxPlatformExecutor.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.jme3x.jfx; - -import javafx.application.Platform; - -/** - * TODO This Class should be replaced by some Workmanager implemntation in the future - * - * @author Heist - */ -public class FxPlatformExecutor { - - public static void runOnFxApplication(Runnable task) { - if (Platform.isFxApplicationThread()) { - task.run(); - } else { - Platform.runLater(task); - } - } -} diff --git a/src/main/java/com/jme3x/jfx/JavaFXPicture.java b/src/main/java/com/jme3x/jfx/JavaFXPicture.java index 374fb1f..a9d1109 100755 --- a/src/main/java/com/jme3x/jfx/JavaFXPicture.java +++ b/src/main/java/com/jme3x/jfx/JavaFXPicture.java @@ -41,13 +41,10 @@ public void updateLogicalState(float tpf) { final JmeFxContainer container = getContainer(); final JmeContext jmeContext = container.getJmeContext(); - final EmbeddedStageInterface currentStage = container.getStagePeer(); - try { - if (currentStage == null) { - return; - } + final EmbeddedStageInterface currentStage = container.getStagePeer(); + if (currentStage == null) return; final int currentWidth = JFXUtils.getWidth(jmeContext); final int currentHeight = JFXUtils.getHeight(jmeContext); diff --git a/src/main/java/com/jme3x/jfx/JmeFXHostInterfaceImpl.java b/src/main/java/com/jme3x/jfx/JmeFXHostInterfaceImpl.java index 88b735e..0ced8d4 100755 --- a/src/main/java/com/jme3x/jfx/JmeFXHostInterfaceImpl.java +++ b/src/main/java/com/jme3x/jfx/JmeFXHostInterfaceImpl.java @@ -70,9 +70,7 @@ public void setEmbeddedScene(final EmbeddedSceneInterface embeddedScene) { final JmeFxContainer jmeFxContainer = getJmeFxContainer(); jmeFxContainer.setScenePeer(embeddedScene); - if (embeddedScene == null) { - return; - } + if (embeddedScene == null) return; embeddedScene.setPixelScaleFactor(1); @@ -92,9 +90,7 @@ public void setEmbeddedStage(final EmbeddedStageInterface embeddedStage) { final JmeFxContainer jmeFxContainer = getJmeFxContainer(); jmeFxContainer.setStagePeer(embeddedStage); - if (embeddedStage == null) { - return; - } + if (embeddedStage == null) return; final int width = jmeFxContainer.getPictureWidth(); final int height = jmeFxContainer.getPictureHeight(); diff --git a/src/main/java/com/jme3x/jfx/JmeFXInputListener.java b/src/main/java/com/jme3x/jfx/JmeFXInputListener.java index 5716df5..d495a21 100755 --- a/src/main/java/com/jme3x/jfx/JmeFXInputListener.java +++ b/src/main/java/com/jme3x/jfx/JmeFXInputListener.java @@ -80,22 +80,14 @@ private JmeFxDNDHandler getJfxdndHandler() { @Override public void beginInput() { - final RawInputListener adapter = getEverListeningInputListenerAdapter(); - - if (adapter != null) { - adapter.beginInput(); - } + if (adapter != null) adapter.beginInput(); } @Override public void endInput() { - final RawInputListener adapter = getEverListeningInputListenerAdapter(); - - if (adapter != null) { - adapter.endInput(); - } + if (adapter != null) adapter.endInput(); } /** @@ -142,39 +134,25 @@ private boolean[] getMouseButtonState() { @Override public void onJoyAxisEvent(final JoyAxisEvent event) { - final RawInputListener adapter = getEverListeningInputListenerAdapter(); - - if (adapter != null) { - adapter.onJoyAxisEvent(event); - } + if (adapter != null) adapter.onJoyAxisEvent(event); } @Override public void onJoyButtonEvent(final JoyButtonEvent event) { - final RawInputListener adapter = getEverListeningInputListenerAdapter(); - - if (adapter != null) { - adapter.onJoyButtonEvent(event); - } + if (adapter != null) adapter.onJoyButtonEvent(event); } @Override public void onKeyEvent(final KeyInputEvent event) { final RawInputListener adapter = getEverListeningInputListenerAdapter(); - - if (adapter != null) { - adapter.onKeyEvent(event); - } + if (adapter != null) adapter.onKeyEvent(event); final JmeFxContainer jmeFxContainer = getJmeFxContainer(); final EmbeddedSceneInterface scenePeer = jmeFxContainer.getScenePeer(); - - if (scenePeer == null) { - return; - } + if (scenePeer == null) return; final BitSet keyStateSet = getKeyStateSet(); @@ -200,9 +178,7 @@ public void onKeyEvent(final KeyInputEvent event) { } } - if (jmeFxContainer.isFocus()) { - event.setConsumed(); - } + if (jmeFxContainer.isFocus()) event.setConsumed(); if (event.isRepeating()) { @@ -238,18 +214,13 @@ public void onKeyEvent(final KeyInputEvent event) { public void onMouseButtonEvent(final MouseButtonEvent event) { final RawInputListener adapter = getEverListeningInputListenerAdapter(); - - if (adapter != null) { - adapter.onMouseButtonEvent(event); - } + if (adapter != null) adapter.onMouseButtonEvent(event); final JmeFxContainer jmeFxContainer = getJmeFxContainer(); final Application application = jmeFxContainer.getApplication(); final InputManager inputManager = application.getInputManager(); - if (jmeFxContainer.getScenePeer() == null) { - return; - } + if (jmeFxContainer.getScenePeer() == null) return; final Scene scene = jmeFxContainer.getScene(); @@ -340,18 +311,13 @@ private void onMouseButtonEventImpl(int x, int y, int button, int type) { public void onMouseMotionEvent(final MouseMotionEvent event) { final RawInputListener adapter = getEverListeningInputListenerAdapter(); - - if (adapter != null) { - adapter.onMouseMotionEvent(event); - } + if (adapter != null) adapter.onMouseMotionEvent(event); final JmeFxContainer jmeFxContainer = getJmeFxContainer(); final Application application = jmeFxContainer.getApplication(); final InputManager inputManager = application.getInputManager(); - if (jmeFxContainer.getScenePeer() == null) { - return; - } + if (jmeFxContainer.getScenePeer() == null) return; final Scene scene = jmeFxContainer.getScene(); @@ -360,9 +326,7 @@ public void onMouseMotionEvent(final MouseMotionEvent event) { final boolean covered = jmeFxContainer.isCovered(x, y); - if (covered) { - event.setConsumed(); - } + if (covered) event.setConsumed(); final boolean[] mouseButtonState = getMouseButtonState(); // not sure if should be grabbing focus on mouse motion event @@ -401,9 +365,7 @@ private void onMouseMotionEventImpl(int x, int y, int wheelRotation, int ftype, final Application application = fxContainer.getApplication(); final InputManager inputManager = application.getInputManager(); - if (!inputManager.isCursorVisible()) { - return; - } + if (!inputManager.isCursorVisible()) return; final JmeFxDNDHandler dndHandler = getJfxdndHandler(); final boolean[] mouseButtonState = getMouseButtonState(); @@ -412,9 +374,7 @@ private void onMouseMotionEventImpl(int x, int y, int wheelRotation, int ftype, final boolean middleBtnDown = mouseButtonState[1]; final boolean secondaryBtnDown = mouseButtonState[2]; - if (dndHandler != null) { - dndHandler.mouseUpdate(x, y, primaryBtnDown); - } + if (dndHandler != null) dndHandler.mouseUpdate(x, y, primaryBtnDown); final EmbeddedSceneInterface scenePeer = fxContainer.getScenePeer(); @@ -433,12 +393,8 @@ private void onMouseMotionEventImpl(int x, int y, int wheelRotation, int ftype, @Override public void onTouchEvent(final TouchEvent event) { - final RawInputListener adapter = getEverListeningInputListenerAdapter(); - - if (adapter != null) { - adapter.onTouchEvent(event); - } + if (adapter != null) adapter.onTouchEvent(event); } public int retrieveKeyState() { diff --git a/src/main/java/com/jme3x/jfx/JmeFxContainer.java b/src/main/java/com/jme3x/jfx/JmeFxContainer.java index 67b896f..4f478c1 100755 --- a/src/main/java/com/jme3x/jfx/JmeFxContainer.java +++ b/src/main/java/com/jme3x/jfx/JmeFxContainer.java @@ -55,6 +55,7 @@ public class JmeFxContainer { private static final Logger LOGGER = LoggerManager.getLogger(JmeFxContainer.class); + public static final int PROP_MIN_RESIZE_INTERVAL = 300; /** * Актитвировал ли дебаг. @@ -363,13 +364,6 @@ public void addPaintListener(final PaintListener paintListener) { setPaintListeners(temp.toArray(new PaintListener[temp.size()])); } - /** - * Создание задачи по записи FX UI на JME. - */ - protected void addWriteTask() { - application.enqueue(this::writeToJME); - } - /** * @return провайдер по отображению нужных курсоров. */ @@ -635,10 +629,7 @@ public int getWindowY() { public void grabFocus() { final EmbeddedStageInterface stagePeer = getStagePeer(); - - if(isFocus() || stagePeer == null) { - return; - } + if(isFocus() || stagePeer == null) return; stagePeer.setFocused(true, AbstractEvents.FOCUSEVENT_ACTIVATED); setFocus(true); @@ -654,10 +645,7 @@ public void grabFocus() { public void handleResize() { final long time = System.currentTimeMillis(); - - if(time - getLastResized() < 300) { - return; - } + if(time - getLastResized() < PROP_MIN_RESIZE_INTERVAL) return; final JmeContext jmeContext = getJmeContext(); @@ -680,21 +668,10 @@ public void handleResize() { picture.setWidth(pictureWidth); picture.setHeight(pictureHeight); - if (fxData != null) { - BufferUtils.destroyDirectBuffer(fxData); - } - - if (tempData != null) { - BufferUtils.destroyDirectBuffer(tempData); - } - - if (jmeData != null) { - BufferUtils.destroyDirectBuffer(jmeData); - } - - if (jmeImage != null) { - jmeImage.dispose(); - } + if (fxData != null) BufferUtils.destroyDirectBuffer(fxData); + if (tempData != null) BufferUtils.destroyDirectBuffer(tempData); + if (jmeData != null) BufferUtils.destroyDirectBuffer(jmeData); + if (jmeImage != null) jmeImage.dispose(); fxData = BufferUtils.createByteBuffer(pictureWidth * pictureHeight * 4); tempData = BufferUtils.createByteBuffer(pictureWidth * pictureHeight * 4); @@ -702,10 +679,7 @@ public void handleResize() { jmeImage = new Image(nativeFormat.get(), pictureWidth, pictureHeight, jmeData, ColorSpace.sRGB); final Texture2D texture = getTexture(); - - if (texture != null) { - texture.setImage(jmeImage); - } + if (texture != null) texture.setImage(jmeImage); setPictureHeight(pictureHeight); setPictureWidth(pictureWidth); @@ -843,10 +817,7 @@ public void setVisibleCursor(final boolean visibleCursor) { public void loseFocus() { final EmbeddedStageInterface stagePeer = getStagePeer(); - - if(!isFocus() || stagePeer == null) { - return; - } + if(!isFocus() || stagePeer == null) return; stagePeer.setFocused(false, AbstractEvents.FOCUSEVENT_DEACTIVATED); @@ -870,10 +841,7 @@ public void paintComponent() { } final EmbeddedSceneInterface scenePeer = getScenePeer(); - - if (scenePeer == null) { - return; - } + if (scenePeer == null) return; final PaintListener[] paintListeners = getPaintListeners(); @@ -891,9 +859,7 @@ public void paintComponent() { final int pictureWidth = getPictureWidth(); final int pictureHeight = getPictureHeight(); - if (!scenePeer.getPixels(intBuffer, pictureWidth, pictureHeight)) { - return; - } + if (!scenePeer.getPixels(intBuffer, pictureWidth, pictureHeight)) return; tempData.flip(); tempData.limit(pictureWidth * pictureHeight * 4); @@ -981,33 +947,33 @@ void setFxEnabled(final boolean enabled) { public void setScene(final Scene newScene, final Group highLevelGroup) { this.rootNode = highLevelGroup; - FxPlatformExecutor.runOnFxApplication(() -> JmeFxContainer.this.setSceneImpl(newScene)); + JFXUtils.runOnFxApplication(() -> setSceneImpl(newScene)); } /* * Called on JavaFX application thread. */ private void setSceneImpl(final Scene newScene) { - if (this.stage != null && newScene == null) { - this.stage.hide(); - this.stage = null; + + if (stage != null && newScene == null) { + stage.hide(); + stage = null; } - this.application.enqueue(() -> { - JmeFxContainer.this.picture.setCullHint(newScene == null ? CullHint.Always : CullHint.Never); + application.enqueue(() -> { + picture.setCullHint(newScene == null ? CullHint.Always : CullHint.Never); return null; }); - this.scene = newScene; - if (this.stage == null && newScene != null) { - this.stage = new EmbeddedWindow(this.hostContainer); - } - if (this.stage != null) { - this.stage.setScene(newScene); - if (!this.stage.isShowing()) { - this.stage.show(); - } + scene = newScene; + + if (stage == null && newScene != null) { + stage = new EmbeddedWindow(hostContainer); } + + if (stage == null) return; + stage.setScene(newScene); + if (!stage.isShowing()) stage.show(); } /** diff --git a/src/main/java/com/jme3x/jfx/cursor/CursorDisplayProvider.java b/src/main/java/com/jme3x/jfx/cursor/CursorDisplayProvider.java index 9cd7833..2e03a8e 100644 --- a/src/main/java/com/jme3x/jfx/cursor/CursorDisplayProvider.java +++ b/src/main/java/com/jme3x/jfx/cursor/CursorDisplayProvider.java @@ -3,12 +3,18 @@ import com.sun.javafx.cursor.CursorFrame; import com.sun.javafx.cursor.CursorType; +/** + * The interface for implementing the provider of cursors. + */ public interface CursorDisplayProvider { /** - * called by the GuiManager during startup, should be used to create the necessary cursors + * Setups the type of cursor. */ - void setup(CursorType normal); + void setupCursor(CursorType normal); + /** + * Shows ths cursor. + */ void showCursor(CursorFrame cursorFrame); } diff --git a/src/main/java/com/jme3x/jfx/cursor/proton/ProtonCursorProvider.java b/src/main/java/com/jme3x/jfx/cursor/proton/ProtonCursorProvider.java index 1e87e6f..29336ce 100755 --- a/src/main/java/com/jme3x/jfx/cursor/proton/ProtonCursorProvider.java +++ b/src/main/java/com/jme3x/jfx/cursor/proton/ProtonCursorProvider.java @@ -9,7 +9,6 @@ import com.sun.javafx.cursor.CursorFrame; import com.sun.javafx.cursor.CursorType; -import java.util.concurrent.Callable; import java.util.concurrent.ConcurrentHashMap; import rlib.logging.Logger; @@ -25,7 +24,7 @@ public class ProtonCursorProvider implements CursorDisplayProvider { private static final Logger LOGGER = LoggerManager.getLogger(ProtonCursorProvider.class); - private ConcurrentHashMap cache = new ConcurrentHashMap(); + private ConcurrentHashMap cache = new ConcurrentHashMap<>(); private AssetManager assetManager; private InputManager inputManager; @@ -39,91 +38,90 @@ public ProtonCursorProvider(final Application app, final AssetManager assetManag } @Override - public void setup(final CursorType ctyp) { + public void setupCursor(final CursorType cursorType) { + JmeCursor loaded = null; - switch (ctyp) { + + switch (cursorType) { case CLOSED_HAND: break; case CROSSHAIR: - loaded = (JmeCursor) this.assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_cross.cur"); + loaded = (JmeCursor) assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_cross.cur"); break; case DEFAULT: - loaded = (JmeCursor) this.assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_arrow.cur"); + loaded = (JmeCursor) assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_arrow.cur"); break; case DISAPPEAR: break; case E_RESIZE: - loaded = (JmeCursor) this.assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_ew.cur"); + loaded = (JmeCursor) assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_ew.cur"); break; case HAND: - loaded = (JmeCursor) this.assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_link.cur"); + loaded = (JmeCursor) assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_link.cur"); break; case H_RESIZE: - loaded = (JmeCursor) this.assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_ew.cur"); + loaded = (JmeCursor) assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_ew.cur"); break; case IMAGE: break; case MOVE: - loaded = (JmeCursor) this.assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_move.cur"); + loaded = (JmeCursor) assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_move.cur"); break; case NE_RESIZE: - loaded = (JmeCursor) this.assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_nesw.cur"); + loaded = (JmeCursor) assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_nesw.cur"); break; case NONE: break; case NW_RESIZE: - loaded = (JmeCursor) this.assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_nwse.cur"); + loaded = (JmeCursor) assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_nwse.cur"); break; case N_RESIZE: - loaded = (JmeCursor) this.assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_ns.cur"); + loaded = (JmeCursor) assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_ns.cur"); break; case OPEN_HAND: break; case SE_RESIZE: - loaded = (JmeCursor) this.assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_nwse.cur"); + loaded = (JmeCursor) assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_nwse.cur"); break; case SW_RESIZE: - loaded = (JmeCursor) this.assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_nesw.cur"); + loaded = (JmeCursor) assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_nesw.cur"); break; case S_RESIZE: - loaded = (JmeCursor) this.assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_ns.cur"); + loaded = (JmeCursor) assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_ns.cur"); break; case TEXT: - loaded = (JmeCursor) this.assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_text.cur"); + loaded = (JmeCursor) assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_text.cur"); break; case V_RESIZE: - loaded = (JmeCursor) this.assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_ns.cur"); + loaded = (JmeCursor) assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_ns.cur"); break; case WAIT: - loaded = (JmeCursor) this.assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_busy.ani"); + loaded = (JmeCursor) assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_busy.ani"); break; case W_RESIZE: - loaded = (JmeCursor) this.assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_ew.cur"); + loaded = (JmeCursor) assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_ew.cur"); break; } - if (loaded != null) { - this.cache.put(ctyp, loaded); - } + + if (loaded != null) cache.put(cursorType, loaded); } @Override public void showCursor(final CursorFrame cursorFrame) { + CursorType cursorType = cursorFrame.getCursorType(); - if (this.cache.get(cursorType) == null) { + + if (cache.get(cursorType) == null) { LOGGER.debug("Unkown Cursor! " + cursorType); cursorType = CursorType.DEFAULT; } - final JmeCursor toDisplay = this.cache.get(cursorType); + final JmeCursor toDisplay = cache.get(cursorType); + if (toDisplay == null) return; - if (toDisplay != null) { - this.app.enqueue(new Callable() { - @Override - public Void call() throws Exception { - ProtonCursorProvider.this.inputManager.setMouseCursor(toDisplay); - return null; - } - }); - } + app.enqueue(() -> { + inputManager.setMouseCursor(toDisplay); + return null; + }); } } diff --git a/src/main/java/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java b/src/main/java/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java index 5c134bb..c9a71b5 100644 --- a/src/main/java/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java +++ b/src/main/java/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java @@ -8,7 +8,6 @@ import com.jme3.texture.FrameBuffer; import com.jme3.texture.Image.Format; import com.jme3.util.BufferUtils; -import com.jme3x.jfx.FxPlatformExecutor; import java.nio.ByteBuffer; import java.util.List; diff --git a/src/main/java/com/jme3x/jfx/util/JFXUtils.java b/src/main/java/com/jme3x/jfx/util/JFXUtils.java index dbaabe6..d509c05 100755 --- a/src/main/java/com/jme3x/jfx/util/JFXUtils.java +++ b/src/main/java/com/jme3x/jfx/util/JFXUtils.java @@ -6,7 +6,6 @@ import com.jme3.system.lwjgl.LwjglWindow; import com.jme3x.jfx.util.os.OperatingSystem; -import org.lwjgl.BufferUtils; import org.lwjgl.glfw.GLFW; import java.awt.*; @@ -14,6 +13,11 @@ import java.util.HashMap; import java.util.Map; +import javafx.application.Platform; + +import static java.lang.ThreadLocal.withInitial; +import static org.lwjgl.BufferUtils.createIntBuffer; + /** * Set of methods for scrap work JFX. * @@ -27,26 +31,13 @@ public class JFXUtils { OFFSET_MAPPING.put("Ubuntu", new Point(0, 0)); } - private static final ThreadLocal LOCAL_FIRST_INT_BUFFER = new ThreadLocal() { - - @Override - protected IntBuffer initialValue() { - return BufferUtils.createIntBuffer(1); - } - }; - - private static final ThreadLocal LOCAL_SECOND_INT_BUFFER = new ThreadLocal() { - - @Override - protected IntBuffer initialValue() { - return BufferUtils.createIntBuffer(1); - } - }; + private static final ThreadLocal LOCAL_FIRST_INT_BUFFER = withInitial(() -> createIntBuffer(1)); + private static final ThreadLocal LOCAL_SECOND_INT_BUFFER = withInitial(() -> createIntBuffer(1)); /** * Getting the size of the window decorations in the system. */ - public static final Point getWindowDecorationSize() { + public static Point getWindowDecorationSize() { final OperatingSystem system = new OperatingSystem(); final String distribution = system.getDistribution(); @@ -56,9 +47,7 @@ public static final Point getWindowDecorationSize() { } for (final Map.Entry entry : OFFSET_MAPPING.entrySet()) { - final String key = entry.getKey(); - if (distribution.startsWith(key)) { return entry.getValue(); } @@ -136,4 +125,12 @@ public static void requestFocus(final Application application) { final LwjglWindow lwjglContext = (LwjglWindow) application.getContext(); GLFW.glfwShowWindow(lwjglContext.getWindowHandle()); } + + public static void runOnFxApplication(final Runnable task) { + if (Platform.isFxApplicationThread()) { + task.run(); + } else { + Platform.runLater(task); + } + } } From 57d28f890bb8f1e0cc51c89e77580536d4d1e7bb Mon Sep 17 00:00:00 2001 From: javasabr Date: Tue, 26 Jul 2016 10:43:02 +0300 Subject: [PATCH 02/24] started migration to jdk9 --- .idea/codeStyleSettings.xml | 13 + .idea/compiler.xml | 1 + .idea/libraries/rlib.xml | 11 - .../com/jme3x/jfx/JavaFXPicture.java | 22 +- .../com/jme3x/jfx/JmeFXInputListener.java | 860 +++++++++--------- .../com/jme3x/jfx/JmeFxContainer.java | 331 +------ src/com/jme3x/jfx/JmeJFXPanel.java | 120 +++ .../java => }/com/jme3x/jfx/PixelUtils.java | 136 +-- .../jfx/cursor/CursorDisplayProvider.java | 8 +- .../cursor/proton/ProtonCursorProvider.java | 83 ++ .../com/jme3x/jfx/cursor/proton/readme.txt | 32 +- src/com/jme3x/jfx/util/JFXEmbeddedUtils.java | 213 +++++ src/com/jme3x/jfx/util/JFXPixels.java | 63 ++ src/com/jme3x/jfx/util/JFXPlatform.java | 61 ++ .../jme3x/jfx/util/JFXWindowsUtils.java} | 34 +- .../jme3x/jfx/util/os/OperatingSystem.java | 0 .../jfx/util/os/OperatingSystemResolver.java | 0 .../com/jme3x/jfx/JmeFXHostInterfaceImpl.java | 128 --- .../java/com/jme3x/jfx/JmeFxDNDHandler.java | 213 ----- .../cursor/proton/ProtonCursorProvider.java | 127 --- .../jme3x/jfx/cursor/proton/aero_arrow.cur | Bin 4286 -> 0 bytes .../com/jme3x/jfx/cursor/proton/aero_busy.ani | Bin 77360 -> 0 bytes .../jme3x/jfx/cursor/proton/aero_cross.cur | Bin 4286 -> 0 bytes .../com/jme3x/jfx/cursor/proton/aero_ew.cur | Bin 4286 -> 0 bytes .../jme3x/jfx/cursor/proton/aero_helpsel.cur | Bin 4286 -> 0 bytes .../com/jme3x/jfx/cursor/proton/aero_link.cur | Bin 4286 -> 0 bytes .../com/jme3x/jfx/cursor/proton/aero_move.cur | Bin 4286 -> 0 bytes .../com/jme3x/jfx/cursor/proton/aero_nesw.cur | Bin 4286 -> 0 bytes .../com/jme3x/jfx/cursor/proton/aero_ns.cur | Bin 4286 -> 0 bytes .../com/jme3x/jfx/cursor/proton/aero_nwse.cur | Bin 4286 -> 0 bytes .../com/jme3x/jfx/cursor/proton/aero_pen.cur | Bin 4286 -> 0 bytes .../com/jme3x/jfx/cursor/proton/aero_text.cur | Bin 4286 -> 0 bytes .../jme3x/jfx/cursor/proton/aero_unavail.cur | Bin 4286 -> 0 bytes .../com/jme3x/jfx/cursor/proton/aero_up.cur | Bin 4286 -> 0 bytes .../jme3x/jfx/cursor/proton/aero_working.ani | Bin 77360 -> 0 bytes .../jfx/injfx/JmeContextOffscreenSurface.java | 121 --- .../com/jme3x/jfx/injfx/JmeForImageView.java | 105 --- .../injfx/SceneProcessorCopyToImageView.java | 204 ----- .../com/jme3x/jfx/listener/PaintListener.java | 19 - .../com/jme3x/jfx/media/TextureMovie.java | 239 ----- .../java/com/jme3x/jfx/FalseColorGui.frag | 25 - .../java/com/jme3x/jfx/FalseColorGui.j3md | 23 - .../java/com/jme3x/jfx/FalseColorGui.vert | 15 - .../com/jme3x/jfx/TestDisplayInImageView.fxml | 49 - .../com/jme3x/jfx/TestDisplayInImageView.java | 193 ---- src/test/java/com/jme3x/jfx/TestMovie.java | 68 -- .../java/com/jme3x/jfx/Testcontroller.java | 18 - .../java/com/jme3x/jfx/loading_screen.fxml | 96 -- src/test/java/com/jme3x/jfx/test.jpg | Bin 15571 -> 0 bytes test-src/com/jme3x/jfx/TestContext.java | 54 ++ test-src/com/jme3x/jfx/TestJFXPanel.java | 69 ++ 51 files changed, 1256 insertions(+), 2498 deletions(-) create mode 100644 .idea/codeStyleSettings.xml delete mode 100644 .idea/libraries/rlib.xml rename src/{main/java => }/com/jme3x/jfx/JavaFXPicture.java (68%) mode change 100755 => 100644 rename src/{main/java => }/com/jme3x/jfx/JmeFXInputListener.java (55%) mode change 100755 => 100644 rename src/{main/java => }/com/jme3x/jfx/JmeFxContainer.java (67%) mode change 100755 => 100644 create mode 100644 src/com/jme3x/jfx/JmeJFXPanel.java rename src/{main/java => }/com/jme3x/jfx/PixelUtils.java (96%) mode change 100755 => 100644 rename src/{main/java => }/com/jme3x/jfx/cursor/CursorDisplayProvider.java (58%) create mode 100644 src/com/jme3x/jfx/cursor/proton/ProtonCursorProvider.java rename src/{main/java => }/com/jme3x/jfx/cursor/proton/readme.txt (93%) mode change 100755 => 100644 create mode 100644 src/com/jme3x/jfx/util/JFXEmbeddedUtils.java create mode 100644 src/com/jme3x/jfx/util/JFXPixels.java create mode 100644 src/com/jme3x/jfx/util/JFXPlatform.java rename src/{main/java/com/jme3x/jfx/util/JFXUtils.java => com/jme3x/jfx/util/JFXWindowsUtils.java} (84%) mode change 100755 => 100644 rename src/{main/java => }/com/jme3x/jfx/util/os/OperatingSystem.java (100%) mode change 100755 => 100644 rename src/{main/java => }/com/jme3x/jfx/util/os/OperatingSystemResolver.java (100%) mode change 100755 => 100644 delete mode 100755 src/main/java/com/jme3x/jfx/JmeFXHostInterfaceImpl.java delete mode 100644 src/main/java/com/jme3x/jfx/JmeFxDNDHandler.java delete mode 100755 src/main/java/com/jme3x/jfx/cursor/proton/ProtonCursorProvider.java delete mode 100755 src/main/java/com/jme3x/jfx/cursor/proton/aero_arrow.cur delete mode 100755 src/main/java/com/jme3x/jfx/cursor/proton/aero_busy.ani delete mode 100755 src/main/java/com/jme3x/jfx/cursor/proton/aero_cross.cur delete mode 100755 src/main/java/com/jme3x/jfx/cursor/proton/aero_ew.cur delete mode 100755 src/main/java/com/jme3x/jfx/cursor/proton/aero_helpsel.cur delete mode 100755 src/main/java/com/jme3x/jfx/cursor/proton/aero_link.cur delete mode 100755 src/main/java/com/jme3x/jfx/cursor/proton/aero_move.cur delete mode 100755 src/main/java/com/jme3x/jfx/cursor/proton/aero_nesw.cur delete mode 100755 src/main/java/com/jme3x/jfx/cursor/proton/aero_ns.cur delete mode 100755 src/main/java/com/jme3x/jfx/cursor/proton/aero_nwse.cur delete mode 100755 src/main/java/com/jme3x/jfx/cursor/proton/aero_pen.cur delete mode 100755 src/main/java/com/jme3x/jfx/cursor/proton/aero_text.cur delete mode 100755 src/main/java/com/jme3x/jfx/cursor/proton/aero_unavail.cur delete mode 100755 src/main/java/com/jme3x/jfx/cursor/proton/aero_up.cur delete mode 100755 src/main/java/com/jme3x/jfx/cursor/proton/aero_working.ani delete mode 100644 src/main/java/com/jme3x/jfx/injfx/JmeContextOffscreenSurface.java delete mode 100644 src/main/java/com/jme3x/jfx/injfx/JmeForImageView.java delete mode 100644 src/main/java/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java delete mode 100755 src/main/java/com/jme3x/jfx/listener/PaintListener.java delete mode 100644 src/main/java/com/jme3x/jfx/media/TextureMovie.java delete mode 100755 src/test/java/com/jme3x/jfx/FalseColorGui.frag delete mode 100755 src/test/java/com/jme3x/jfx/FalseColorGui.j3md delete mode 100755 src/test/java/com/jme3x/jfx/FalseColorGui.vert delete mode 100644 src/test/java/com/jme3x/jfx/TestDisplayInImageView.fxml delete mode 100644 src/test/java/com/jme3x/jfx/TestDisplayInImageView.java delete mode 100644 src/test/java/com/jme3x/jfx/TestMovie.java delete mode 100755 src/test/java/com/jme3x/jfx/Testcontroller.java delete mode 100755 src/test/java/com/jme3x/jfx/loading_screen.fxml delete mode 100644 src/test/java/com/jme3x/jfx/test.jpg create mode 100644 test-src/com/jme3x/jfx/TestContext.java create mode 100644 test-src/com/jme3x/jfx/TestJFXPanel.java diff --git a/.idea/codeStyleSettings.xml b/.idea/codeStyleSettings.xml new file mode 100644 index 0000000..879e1e4 --- /dev/null +++ b/.idea/codeStyleSettings.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 96cc43e..c355a4b 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -18,5 +18,6 @@ + \ No newline at end of file diff --git a/.idea/libraries/rlib.xml b/.idea/libraries/rlib.xml deleted file mode 100644 index f882bbc..0000000 --- a/.idea/libraries/rlib.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/java/com/jme3x/jfx/JavaFXPicture.java b/src/com/jme3x/jfx/JavaFXPicture.java old mode 100755 new mode 100644 similarity index 68% rename from src/main/java/com/jme3x/jfx/JavaFXPicture.java rename to src/com/jme3x/jfx/JavaFXPicture.java index a9d1109..af6a5df --- a/src/main/java/com/jme3x/jfx/JavaFXPicture.java +++ b/src/com/jme3x/jfx/JavaFXPicture.java @@ -2,10 +2,8 @@ import com.jme3.system.JmeContext; import com.jme3.ui.Picture; -import com.jme3x.jfx.util.JFXUtils; -import com.sun.javafx.embed.EmbeddedStageInterface; +import com.jme3x.jfx.util.JFXWindowsUtils; -import javafx.application.Platform; import rlib.logging.Logger; import rlib.logging.LoggerManager; @@ -43,21 +41,21 @@ public void updateLogicalState(float tpf) { try { - final EmbeddedStageInterface currentStage = container.getStagePeer(); - if (currentStage == null) return; + final JmeJFXPanel panel = container.getHostContainer(); + if (panel == null) return; - final int currentWidth = JFXUtils.getWidth(jmeContext); - final int currentHeight = JFXUtils.getHeight(jmeContext); + final int currentWidth = JFXWindowsUtils.getWidth(jmeContext); + final int currentHeight = JFXWindowsUtils.getHeight(jmeContext); if (currentWidth != container.getPictureWidth() || currentHeight != container.getPictureHeight()) { container.handleResize(); } - final int originalX = JFXUtils.getX(jmeContext); - final int originalY = JFXUtils.getY(jmeContext); + final int originalX = JFXWindowsUtils.getX(jmeContext); + final int originalY = JFXWindowsUtils.getY(jmeContext); - final int offsetX = JFXUtils.isFullscreen(jmeContext) ? 0 : container.getWindowOffsetX(); - final int offsetY = JFXUtils.isFullscreen(jmeContext) ? 0 : container.getWindowOffsetY(); + final int offsetX = JFXWindowsUtils.isFullscreen(jmeContext) ? 0 : container.getWindowOffsetX(); + final int offsetY = JFXWindowsUtils.isFullscreen(jmeContext) ? 0 : container.getWindowOffsetY(); final int x = originalX + offsetX; final int y = originalY + offsetY; @@ -71,7 +69,7 @@ public void updateLogicalState(float tpf) { container.setOldX(x); container.setOldY(y); - Platform.runLater(() -> currentStage.setLocation(x, y)); + panel.handleMove(x, y); } } finally { diff --git a/src/main/java/com/jme3x/jfx/JmeFXInputListener.java b/src/com/jme3x/jfx/JmeFXInputListener.java old mode 100755 new mode 100644 similarity index 55% rename from src/main/java/com/jme3x/jfx/JmeFXInputListener.java rename to src/com/jme3x/jfx/JmeFXInputListener.java index d495a21..a749307 --- a/src/main/java/com/jme3x/jfx/JmeFXInputListener.java +++ b/src/com/jme3x/jfx/JmeFXInputListener.java @@ -1,437 +1,423 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package com.jme3x.jfx; - -import com.jme3.app.Application; -import com.jme3.input.InputManager; -import com.jme3.input.KeyInput; -import com.jme3.input.RawInputListener; -import com.jme3.input.awt.AwtKeyInput; -import com.jme3.input.event.JoyAxisEvent; -import com.jme3.input.event.JoyButtonEvent; -import com.jme3.input.event.KeyInputEvent; -import com.jme3.input.event.MouseButtonEvent; -import com.jme3.input.event.MouseMotionEvent; -import com.jme3.input.event.TouchEvent; -import com.sun.javafx.embed.AbstractEvents; -import com.sun.javafx.embed.EmbeddedSceneInterface; - -import java.awt.event.KeyEvent; -import java.util.BitSet; - -import javafx.application.Platform; -import javafx.scene.Scene; - -/** - * Converts JMEEvents to JFXEvents - * - * @author Heist - */ -public class JmeFXInputListener implements RawInputListener { - - /** - * Контейнер Java FX. - */ - private final JmeFxContainer jmeFxContainer; - - private final BitSet keyStateSet = new BitSet(0xFF); - - /** - * Набор массивов для каждого символа. - */ - private final char[][] keyCharArray = new char[Character.MAX_CODE_POINT][]; - - /** - * Таблица символов. - */ - private final char[] keyCharSet = new char[Character.MAX_CODE_POINT]; - - /** - * Состояние кнопок мыши. - */ - private final boolean[] mouseButtonState = new boolean[3]; - - /** - * Слушатель ввода пользователя. - */ - private volatile RawInputListener everListeningInputListenerAdapter; - - /** - * Обработчик DnD Java FX. - */ - private volatile JmeFxDNDHandler jfxdndHandler; - - public JmeFXInputListener(final JmeFxContainer listensOnContainer) { - this.jmeFxContainer = listensOnContainer; - - for (int i = 0, length = keyCharArray.length; i < length; i++) { - keyCharArray[i] = new char[]{(char) i}; - } - } - - /** - * @return обработчик DnD Java FX. - */ - private JmeFxDNDHandler getJfxdndHandler() { - return jfxdndHandler; - } - - @Override - public void beginInput() { - final RawInputListener adapter = getEverListeningInputListenerAdapter(); - if (adapter != null) adapter.beginInput(); - } - - @Override - public void endInput() { - final RawInputListener adapter = getEverListeningInputListenerAdapter(); - if (adapter != null) adapter.endInput(); - } - - /** - * @return слушатель ввода пользователя. - */ - private RawInputListener getEverListeningInputListenerAdapter() { - return everListeningInputListenerAdapter; - } - - /** - * @return контейнер Java FX. - */ - private JmeFxContainer getJmeFxContainer() { - return jmeFxContainer; - } - - /** - * @return набор массивов для каждого символа. - */ - private char[][] getKeyCharArray() { - return keyCharArray; - } - - /** - * @return таблица символов. - */ - private char[] getKeyCharSet() { - return keyCharSet; - } - - /** - * @return - */ - private BitSet getKeyStateSet() { - return keyStateSet; - } - - /** - * @return состояние кнопок мыши. - */ - private boolean[] getMouseButtonState() { - return mouseButtonState; - } - - @Override - public void onJoyAxisEvent(final JoyAxisEvent event) { - final RawInputListener adapter = getEverListeningInputListenerAdapter(); - if (adapter != null) adapter.onJoyAxisEvent(event); - } - - @Override - public void onJoyButtonEvent(final JoyButtonEvent event) { - final RawInputListener adapter = getEverListeningInputListenerAdapter(); - if (adapter != null) adapter.onJoyButtonEvent(event); - } - - @Override - public void onKeyEvent(final KeyInputEvent event) { - - final RawInputListener adapter = getEverListeningInputListenerAdapter(); - if (adapter != null) adapter.onKeyEvent(event); - - final JmeFxContainer jmeFxContainer = getJmeFxContainer(); - final EmbeddedSceneInterface scenePeer = jmeFxContainer.getScenePeer(); - if (scenePeer == null) return; - - final BitSet keyStateSet = getKeyStateSet(); - - final char[][] keyCharArray = getKeyCharArray(); - final char[] keyCharSet = getKeyCharSet(); - final char keyChar = event.getKeyChar(); - - final int keyCode = event.getKeyCode(); - - int fxKeyCode = keyCode == KeyInput.KEY_UNKNOWN ? KeyEvent.VK_UNDEFINED : AwtKeyInput.convertJmeCode(keyCode); - - final int keyState = retrieveKeyState(); - - if (fxKeyCode > keyCharSet.length) { - switch (keyChar) { - case '\\': { - fxKeyCode = java.awt.event.KeyEvent.VK_BACK_SLASH; - break; - } - default: { - return; - } - } - } - - if (jmeFxContainer.isFocus()) event.setConsumed(); - - if (event.isRepeating()) { - - final char x = keyCharSet[fxKeyCode]; - - if (jmeFxContainer.isFocus()) { - scenePeer.keyEvent(AbstractEvents.KEYEVENT_TYPED, fxKeyCode, keyCharArray[x], keyState); - } - - } else if (event.isPressed()) { - - keyCharSet[fxKeyCode] = keyChar; - keyStateSet.set(fxKeyCode); - - if (jmeFxContainer.isFocus()) { - scenePeer.keyEvent(AbstractEvents.KEYEVENT_PRESSED, fxKeyCode, keyCharArray[keyChar], keyState); - scenePeer.keyEvent(AbstractEvents.KEYEVENT_TYPED, fxKeyCode, keyCharArray[keyChar], keyState); - } - - } else { - - final char x = keyCharSet[fxKeyCode]; - - keyStateSet.clear(fxKeyCode); - - if (jmeFxContainer.isFocus()) { - scenePeer.keyEvent(AbstractEvents.KEYEVENT_RELEASED, fxKeyCode, keyCharArray[x], keyState); - } - } - } - - @Override - public void onMouseButtonEvent(final MouseButtonEvent event) { - - final RawInputListener adapter = getEverListeningInputListenerAdapter(); - if (adapter != null) adapter.onMouseButtonEvent(event); - - final JmeFxContainer jmeFxContainer = getJmeFxContainer(); - final Application application = jmeFxContainer.getApplication(); - final InputManager inputManager = application.getInputManager(); - - if (jmeFxContainer.getScenePeer() == null) return; - - final Scene scene = jmeFxContainer.getScene(); - - final int x = event.getX(); - final int y = (int) Math.round(scene.getHeight()) - event.getY(); - - int button; - - switch (event.getButtonIndex()) { - case 0: { - button = AbstractEvents.MOUSEEVENT_PRIMARY_BUTTON; - break; - } - case 1: { - button = AbstractEvents.MOUSEEVENT_SECONDARY_BUTTON; - break; - } - case 2: { - button = AbstractEvents.MOUSEEVENT_MIDDLE_BUTTON; - break; - } - default: { - return; - } - } - - mouseButtonState[event.getButtonIndex()] = event.isPressed(); - - // seems that generating mouse release without corresponding mouse - // pressed is causing problems in Scene.ClickGenerator - - final boolean covered = jmeFxContainer.isCovered(x, y); - - if (!covered) { - jmeFxContainer.loseFocus(); - } else if (inputManager.isCursorVisible()) { - event.setConsumed(); - jmeFxContainer.grabFocus(); - } - - int type; - - if (event.isPressed()) { - type = AbstractEvents.MOUSEEVENT_PRESSED; - } else if (event.isReleased()) { - type = AbstractEvents.MOUSEEVENT_RELEASED; - // and clicked ?? - } else { - return; - } - - if (inputManager.isCursorVisible() || event.isReleased()) { - Platform.runLater(() -> onMouseButtonEventImpl(x, y, button, type)); - } - } - - private void onMouseButtonEventImpl(int x, int y, int button, int type) { - - final boolean[] mouseButtonState = getMouseButtonState(); - final JmeFxDNDHandler jfxdndHandler = getJfxdndHandler(); - - final boolean primaryBtnDown = mouseButtonState[0]; - final boolean middleBtnDown = mouseButtonState[1]; - final boolean secondaryBtnDown = mouseButtonState[2]; - - if (jfxdndHandler != null) { - jfxdndHandler.mouseUpdate(x, y, primaryBtnDown); - } - - final JmeFxContainer fxContainer = getJmeFxContainer(); - final EmbeddedSceneInterface scenePeer = fxContainer.getScenePeer(); - - final int screenX = fxContainer.getOldX() + x; - final int screenY = fxContainer.getOldY() + y; - - final BitSet keyStateSet = getKeyStateSet(); - - final boolean shift = keyStateSet.get(KeyEvent.VK_SHIFT); - final boolean ctrl = keyStateSet.get(KeyEvent.VK_CONTROL); - final boolean alt = keyStateSet.get(KeyEvent.VK_ALT); - final boolean meta = keyStateSet.get(KeyEvent.VK_META); - final boolean popupTrigger = button == AbstractEvents.MOUSEEVENT_SECONDARY_BUTTON; - - scenePeer.mouseEvent(type, button, primaryBtnDown, middleBtnDown, secondaryBtnDown, x, y, screenX, screenY, shift, ctrl, alt, meta, 0, popupTrigger); - } - - @Override - public void onMouseMotionEvent(final MouseMotionEvent event) { - - final RawInputListener adapter = getEverListeningInputListenerAdapter(); - if (adapter != null) adapter.onMouseMotionEvent(event); - - final JmeFxContainer jmeFxContainer = getJmeFxContainer(); - final Application application = jmeFxContainer.getApplication(); - final InputManager inputManager = application.getInputManager(); - - if (jmeFxContainer.getScenePeer() == null) return; - - final Scene scene = jmeFxContainer.getScene(); - - final int x = event.getX(); - final int y = (int) Math.round(scene.getHeight()) - event.getY(); - - final boolean covered = jmeFxContainer.isCovered(x, y); - - if (covered) event.setConsumed(); - - final boolean[] mouseButtonState = getMouseButtonState(); - // not sure if should be grabbing focus on mouse motion event - // grabFocus(); - - int type = AbstractEvents.MOUSEEVENT_MOVED; - int button = AbstractEvents.MOUSEEVENT_NONE_BUTTON; - - final int wheelRotation = (int) Math.round(event.getDeltaWheel() / -120.0); - - if (wheelRotation != 0) { - type = AbstractEvents.MOUSEEVENT_WHEEL; - button = AbstractEvents.MOUSEEVENT_NONE_BUTTON; - } else if (mouseButtonState[0]) { - type = AbstractEvents.MOUSEEVENT_DRAGGED; - button = AbstractEvents.MOUSEEVENT_PRIMARY_BUTTON; - } else if (mouseButtonState[1]) { - type = AbstractEvents.MOUSEEVENT_DRAGGED; - button = AbstractEvents.MOUSEEVENT_SECONDARY_BUTTON; - } else if (mouseButtonState[2]) { - type = AbstractEvents.MOUSEEVENT_DRAGGED; - button = AbstractEvents.MOUSEEVENT_MIDDLE_BUTTON; - } - - final int ftype = type; - final int fbutton = button; - - if (inputManager.isCursorVisible()) { - Platform.runLater(() -> onMouseMotionEventImpl(x, y, wheelRotation, ftype, fbutton)); - } - } - - private void onMouseMotionEventImpl(int x, int y, int wheelRotation, int ftype, int fbutton) { - - final JmeFxContainer fxContainer = getJmeFxContainer(); - final Application application = fxContainer.getApplication(); - final InputManager inputManager = application.getInputManager(); - - if (!inputManager.isCursorVisible()) return; - - final JmeFxDNDHandler dndHandler = getJfxdndHandler(); - final boolean[] mouseButtonState = getMouseButtonState(); - - final boolean primaryBtnDown = mouseButtonState[0]; - final boolean middleBtnDown = mouseButtonState[1]; - final boolean secondaryBtnDown = mouseButtonState[2]; - - if (dndHandler != null) dndHandler.mouseUpdate(x, y, primaryBtnDown); - - final EmbeddedSceneInterface scenePeer = fxContainer.getScenePeer(); - - final int screenX = fxContainer.getOldX() + x; - final int screenY = fxContainer.getOldY() + y; - - final BitSet keyStateSet = getKeyStateSet(); - - final boolean shift = keyStateSet.get(KeyEvent.VK_SHIFT); - final boolean ctrl = keyStateSet.get(KeyEvent.VK_CONTROL); - final boolean alt = keyStateSet.get(KeyEvent.VK_ALT); - final boolean meta = keyStateSet.get(KeyEvent.VK_META); - - scenePeer.mouseEvent(ftype, fbutton, primaryBtnDown, middleBtnDown, secondaryBtnDown, x, y, screenX, screenY, shift, ctrl, alt, meta, wheelRotation, false); - } - - @Override - public void onTouchEvent(final TouchEvent event) { - final RawInputListener adapter = getEverListeningInputListenerAdapter(); - if (adapter != null) adapter.onTouchEvent(event); - } - - public int retrieveKeyState() { - - int embedModifiers = 0; - - final BitSet keyStateSet = getKeyStateSet(); - - if (keyStateSet.get(KeyEvent.VK_SHIFT)) { - embedModifiers |= AbstractEvents.MODIFIER_SHIFT; - } - - if (keyStateSet.get(KeyEvent.VK_CONTROL)) { - embedModifiers |= AbstractEvents.MODIFIER_CONTROL; - } - - if (keyStateSet.get(KeyEvent.VK_ALT)) { - embedModifiers |= AbstractEvents.MODIFIER_ALT; - } - - if (keyStateSet.get(KeyEvent.VK_META)) { - embedModifiers |= AbstractEvents.MODIFIER_META; - } - - return embedModifiers; - } - - public void setEverListeningRawInputListener(final RawInputListener rawInputListenerAdapter) { - this.everListeningInputListenerAdapter = rawInputListenerAdapter; - } - - /** - * set on drag start /nulled on end
necessary so that the drag events can be generated - * appropiatly - */ - public void setMouseDNDListener(final JmeFxDNDHandler jfxdndHandler) { - assert this.jfxdndHandler == null || jfxdndHandler == null : "duplicate jfxdndn handler register? "; - this.jfxdndHandler = jfxdndHandler; - } -} +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package com.jme3x.jfx; + +import com.jme3.app.Application; +import com.jme3.input.InputManager; +import com.jme3.input.KeyInput; +import com.jme3.input.RawInputListener; +import com.jme3.input.awt.AwtKeyInput; +import com.jme3.input.event.JoyAxisEvent; +import com.jme3.input.event.JoyButtonEvent; +import com.jme3.input.event.KeyInputEvent; +import com.jme3.input.event.MouseButtonEvent; +import com.jme3.input.event.MouseMotionEvent; +import com.jme3.input.event.TouchEvent; + +import java.awt.event.KeyEvent; +import java.awt.event.MouseEvent; +import java.awt.event.MouseWheelEvent; +import java.util.BitSet; + +import javafx.scene.Scene; + +/** + * Converts JMEEvents to JFXEvents + * + * @author Heist + */ +public class JmeFXInputListener implements RawInputListener { + + /** + * Контейнер Java FX. + */ + private final JmeFxContainer jmeFxContainer; + + private final BitSet keyStateSet = new BitSet(0xFF); + + /** + * Таблица символов. + */ + private final char[] keyCharSet = new char[Character.MAX_CODE_POINT]; + + /** + * Состояние кнопок мыши. + */ + private final boolean[] mouseButtonState = new boolean[3]; + + /** + * Слушатель ввода пользователя. + */ + private volatile RawInputListener everListeningInputListenerAdapter; + + /** + * Обработчик DnD Java FX. + */ + //private volatile JmeFxDNDHandler jfxdndHandler; + + public JmeFXInputListener(final JmeFxContainer listensOnContainer) { + this.jmeFxContainer = listensOnContainer; + } + + /** + * @return обработчик DnD Java FX. + */ + /* private JmeFxDNDHandler getJfxdndHandler() { + return jfxdndHandler; + }*/ + + @Override + public void beginInput() { + final RawInputListener adapter = getEverListeningInputListenerAdapter(); + if (adapter != null) adapter.beginInput(); + } + + @Override + public void endInput() { + final RawInputListener adapter = getEverListeningInputListenerAdapter(); + if (adapter != null) adapter.endInput(); + } + + /** + * @return слушатель ввода пользователя. + */ + private RawInputListener getEverListeningInputListenerAdapter() { + return everListeningInputListenerAdapter; + } + + /** + * @return контейнер Java FX. + */ + private JmeFxContainer getJmeFxContainer() { + return jmeFxContainer; + } + + /** + * @return таблица символов. + */ + private char[] getKeyCharSet() { + return keyCharSet; + } + + /** + * @return + */ + private BitSet getKeyStateSet() { + return keyStateSet; + } + + /** + * @return состояние кнопок мыши. + */ + private boolean[] getMouseButtonState() { + return mouseButtonState; + } + + @Override + public void onJoyAxisEvent(final JoyAxisEvent event) { + final RawInputListener adapter = getEverListeningInputListenerAdapter(); + if (adapter != null) adapter.onJoyAxisEvent(event); + } + + @Override + public void onJoyButtonEvent(final JoyButtonEvent event) { + final RawInputListener adapter = getEverListeningInputListenerAdapter(); + if (adapter != null) adapter.onJoyButtonEvent(event); + } + + @Override + public void onKeyEvent(final KeyInputEvent event) { + + final RawInputListener adapter = getEverListeningInputListenerAdapter(); + if (adapter != null) adapter.onKeyEvent(event); + + final JmeFxContainer jmeFxContainer = getJmeFxContainer(); + final JmeJFXPanel container = jmeFxContainer.getHostContainer(); + if (container == null) return; + + final BitSet keyStateSet = getKeyStateSet(); + final char[] keyCharSet = getKeyCharSet(); + final char keyChar = event.getKeyChar(); + + final int keyCode = event.getKeyCode(); + + int awtKeyCode = keyCode == KeyInput.KEY_UNKNOWN ? KeyEvent.VK_UNDEFINED : AwtKeyInput.convertJmeCode(keyCode); + + final int keyState = getKeyMask(); + + if (awtKeyCode > keyCharSet.length) { + switch (keyChar) { + case '\\': { + awtKeyCode = KeyEvent.VK_BACK_SLASH; + break; + } + default: { + return; + } + } + } + + if (jmeFxContainer.isFocus()) event.setConsumed(); + + final long when = System.currentTimeMillis(); + + if (event.isRepeating()) { + + final char x = keyCharSet[awtKeyCode]; + + if (jmeFxContainer.isFocus()) { + container.handleEvent(new KeyEvent(container, KeyEvent.KEY_TYPED, when, keyState, KeyEvent.VK_UNDEFINED, x)); + } + + } else if (event.isPressed()) { + + keyCharSet[awtKeyCode] = keyChar; + keyStateSet.set(awtKeyCode); + + if (jmeFxContainer.isFocus()) { + container.handleEvent(new KeyEvent(container, KeyEvent.KEY_PRESSED, when, keyState, awtKeyCode, keyChar)); + container.handleEvent(new KeyEvent(container, KeyEvent.KEY_TYPED, when, keyState, KeyEvent.VK_UNDEFINED, keyChar)); + } + + } else { + + final char x = keyCharSet[awtKeyCode]; + + keyStateSet.clear(awtKeyCode); + + if (jmeFxContainer.isFocus()) { + container.handleEvent(new KeyEvent(container, KeyEvent.KEY_RELEASED, when, keyState, awtKeyCode, x)); + } + } + } + + @Override + public void onMouseButtonEvent(final MouseButtonEvent event) { + + final RawInputListener adapter = getEverListeningInputListenerAdapter(); + if (adapter != null) adapter.onMouseButtonEvent(event); + + final JmeFxContainer jmeFxContainer = getJmeFxContainer(); + final Application application = jmeFxContainer.getApplication(); + + final InputManager inputManager = application.getInputManager(); + if (!inputManager.isCursorVisible()) return; + + final JmeJFXPanel container = jmeFxContainer.getHostContainer(); + if (container == null) return; + + final Scene scene = jmeFxContainer.getScene(); + + final int x = event.getX(); + final int y = (int) Math.round(scene.getHeight()) - event.getY(); + + int button; + + switch (event.getButtonIndex()) { + case 0: { + button = MouseEvent.BUTTON1; + break; + } + case 1: { + button = MouseEvent.BUTTON2; + break; + } + case 2: { + button = MouseEvent.BUTTON3; + break; + } + default: { + return; + } + } + + mouseButtonState[event.getButtonIndex()] = event.isPressed(); + + final boolean covered = jmeFxContainer.isCovered(x, y); + + if (!covered) { + jmeFxContainer.loseFocus(); + } else if (inputManager.isCursorVisible()) { + event.setConsumed(); + jmeFxContainer.grabFocus(); + } + + int eventId; + + if (event.isPressed()) { + eventId = MouseEvent.MOUSE_PRESSED; + } else if (event.isReleased()) { + eventId = MouseEvent.MOUSE_RELEASED; + } else { + return; + } + + onMouseButtonEventImpl(x, y, button, eventId); + } + + private void onMouseButtonEventImpl(final int x, final int y, final int button, final int eventId) { + + //final JmeFxDNDHandler jfxdndHandler = getJfxdndHandler(); + + //if (jfxdndHandler != null) { + // jfxdndHandler.mouseUpdate(x, y, primaryBtnDown); + //} + + final JmeFxContainer fxContainer = getJmeFxContainer(); + final JmeJFXPanel container = fxContainer.getHostContainer(); + + final long when = System.currentTimeMillis(); + final int mask = getMouseMask(); + final boolean popupTrigger = button == MouseEvent.BUTTON2; + + container.handleEvent(new MouseEvent(container, eventId, when, mask, x, y, 1, popupTrigger, button)); + } + + private int getMouseMask() { + + final BitSet keyStateSet = getKeyStateSet(); + final boolean[] mouseButtonState = getMouseButtonState(); + + int mask = 0; + + if(mouseButtonState[0]) { + mask |= MouseEvent.BUTTON1_DOWN_MASK; + } + + if(mouseButtonState[1]) { + mask |= MouseEvent.BUTTON2_DOWN_MASK; + } + + if(mouseButtonState[2]) { + mask |= MouseEvent.BUTTON3_DOWN_MASK; + } + + if(keyStateSet.get(KeyEvent.VK_SHIFT)) { + mask |= MouseEvent.SHIFT_DOWN_MASK; + } + + if(keyStateSet.get(KeyEvent.VK_CONTROL)) { + mask |= MouseEvent.CTRL_DOWN_MASK; + } + + if(keyStateSet.get(KeyEvent.VK_ALT)) { + mask |= MouseEvent.ALT_DOWN_MASK; + } + + if(keyStateSet.get(KeyEvent.VK_META)) { + mask |= MouseEvent.META_DOWN_MASK; + } + + return mask; + } + + @Override + public void onMouseMotionEvent(final MouseMotionEvent event) { + + final RawInputListener adapter = getEverListeningInputListenerAdapter(); + if (adapter != null) adapter.onMouseMotionEvent(event); + + final JmeFxContainer jmeFxContainer = getJmeFxContainer(); + final Application application = jmeFxContainer.getApplication(); + + final InputManager inputManager = application.getInputManager(); + if (!inputManager.isCursorVisible()) return; + + final JmeJFXPanel container = jmeFxContainer.getHostContainer(); + if (container == null) return; + + final Scene scene = jmeFxContainer.getScene(); + + final int x = event.getX(); + final int y = (int) Math.round(scene.getHeight()) - event.getY(); + + final boolean covered = jmeFxContainer.isCovered(x, y); + if (covered) event.setConsumed(); + + final boolean[] mouseButtonState = getMouseButtonState(); + + int eventId = MouseEvent.MOUSE_DRAGGED; + int button = MouseEvent.NOBUTTON; + + final int wheelRotation = (int) Math.round(event.getDeltaWheel() / -120.0); + + if (wheelRotation != 0) { + eventId = MouseEvent.MOUSE_WHEEL; + } else if (mouseButtonState[0]) { + button = MouseEvent.BUTTON1; + } else if (mouseButtonState[1]) { + button = MouseEvent.BUTTON2; + } else if (mouseButtonState[2]) { + button = MouseEvent.BUTTON3; + } + + onMouseMotionEventImpl(x, y, button, eventId, wheelRotation); + } + + private void onMouseMotionEventImpl(final int x, final int y, final int button, final int eventId, final int wheelRotation) { + + final JmeFxContainer fxContainer = getJmeFxContainer(); + final JmeJFXPanel container = fxContainer.getHostContainer(); + + /* + final JmeFxDNDHandler dndHandler = getJfxdndHandler(); + + if (dndHandler != null) dndHandler.mouseUpdate(x, y, primaryBtnDown); + */ + + final long when = System.currentTimeMillis(); + final int mask = getMouseMask(); + + if(eventId == MouseEvent.MOUSE_WHEEL) { + container.handleEvent(new MouseWheelEvent(container, eventId, when, mask, x, y, 1, false, button, MouseWheelEvent.WHEEL_UNIT_SCROLL, wheelRotation)); + } else { + container.handleEvent(new MouseEvent(container, eventId, when, mask, x, y, 1, false, button)); + } + } + + @Override + public void onTouchEvent(final TouchEvent event) { + final RawInputListener adapter = getEverListeningInputListenerAdapter(); + if (adapter != null) adapter.onTouchEvent(event); + } + + private int getKeyMask() { + + int embedModifiers = 0; + + final BitSet keyStateSet = getKeyStateSet(); + + if (keyStateSet.get(KeyEvent.VK_SHIFT)) { + embedModifiers |= KeyEvent.SHIFT_DOWN_MASK; + } + + if (keyStateSet.get(KeyEvent.VK_CONTROL)) { + embedModifiers |= KeyEvent.CTRL_DOWN_MASK; + } + + if (keyStateSet.get(KeyEvent.VK_ALT)) { + embedModifiers |= KeyEvent.ALT_DOWN_MASK; + } + + if (keyStateSet.get(KeyEvent.VK_META)) { + embedModifiers |= KeyEvent.META_DOWN_MASK; + } + + return embedModifiers; + } + + public void setEverListeningRawInputListener(final RawInputListener rawInputListenerAdapter) { + this.everListeningInputListenerAdapter = rawInputListenerAdapter; + } + + /** + * set on drag start /nulled on end
necessary so that the drag events can be generated + * appropiatly + */ + /* public void setMouseDNDListener(final JmeFxDNDHandler jfxdndHandler) { + assert this.jfxdndHandler == null || jfxdndHandler == null : "duplicate jfxdndn handler register? "; + this.jfxdndHandler = jfxdndHandler; + }*/ +} diff --git a/src/main/java/com/jme3x/jfx/JmeFxContainer.java b/src/com/jme3x/jfx/JmeFxContainer.java old mode 100755 new mode 100644 similarity index 67% rename from src/main/java/com/jme3x/jfx/JmeFxContainer.java rename to src/com/jme3x/jfx/JmeFxContainer.java index 4f478c1..0700e77 --- a/src/main/java/com/jme3x/jfx/JmeFxContainer.java +++ b/src/com/jme3x/jfx/JmeFxContainer.java @@ -8,7 +8,7 @@ import com.jme3.input.InputManager; import com.jme3.input.RawInputListener; import com.jme3.scene.Node; -import com.jme3.scene.Spatial.CullHint; +import com.jme3.scene.Spatial; import com.jme3.system.JmeContext; import com.jme3.texture.Image; import com.jme3.texture.Image.Format; @@ -17,29 +17,16 @@ import com.jme3.ui.Picture; import com.jme3.util.BufferUtils; import com.jme3x.jfx.cursor.CursorDisplayProvider; -import com.jme3x.jfx.listener.PaintListener; -import com.jme3x.jfx.util.JFXUtils; -import com.sun.glass.ui.Pixels; -import com.sun.javafx.application.PlatformImpl; -import com.sun.javafx.embed.AbstractEvents; -import com.sun.javafx.embed.EmbeddedSceneInterface; -import com.sun.javafx.embed.EmbeddedStageInterface; -import com.sun.javafx.embed.HostInterface; -import com.sun.javafx.stage.EmbeddedWindow; +import com.jme3x.jfx.util.JFXEmbeddedUtils; +import com.jme3x.jfx.util.JFXWindowsUtils; import java.awt.*; -import java.awt.event.KeyEvent; +import java.awt.event.FocusEvent; import java.nio.ByteBuffer; import java.nio.IntBuffer; -import java.util.ArrayList; import java.util.BitSet; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.CompletableFuture; -import java.util.function.Function; import javafx.application.Platform; -import javafx.scene.Group; import javafx.scene.Scene; import rlib.concurrent.atomic.AtomicInteger; import rlib.concurrent.lock.AsyncReadSyncWriteLock; @@ -55,6 +42,7 @@ public class JmeFxContainer { private static final Logger LOGGER = LoggerManager.getLogger(JmeFxContainer.class); + public static final int PROP_MIN_RESIZE_INTERVAL = 300; /** @@ -91,43 +79,6 @@ public static JmeFxContainer install(final Application app, final Node guiNode, return container; } - // TODO benchmark - private static Void reorder_ARGB82ABGR8(final ByteBuffer data) { - - final int limit = data.limit() - 3; - - byte v; - - for (int i = 0; i < limit; i += 4) { - v = data.get(i + 1); - data.put(i + 1, data.get(i + 3)); - data.put(i + 3, v); - } - - return null; - } - - // TODO benchmark - private static Void reorder_BGRA82ABGR8(final ByteBuffer data) { - - final int limit = data.limit() - 3; - - byte v0, v1, v2, v3; - - for (int i = 0; i < limit; i += 4) { - v0 = data.get(i); - v1 = data.get(i + 1); - v2 = data.get(i + 2); - v3 = data.get(i + 3); - data.put(i, v3); - data.put(i + 1, v0); - data.put(i + 2, v1); - data.put(i + 3, v2); - } - - return null; - } - /** * Игровая стадия FX UI. */ @@ -140,8 +91,6 @@ public void cleanup() { } }; - protected volatile CompletableFuture nativeFormat = new CompletableFuture<>(); - /** * Кол-во незаписанных в JME кадров. */ @@ -163,25 +112,9 @@ public void cleanup() { protected final Texture2D texture; /** - * Набор слушателей отрисовки. - */ - protected volatile PaintListener[] paintListeners; - - /** - * Текущая стадия UI. - */ - protected volatile EmbeddedStageInterface stagePeer; - - /** - * Текущая сцена UI. - */ - protected volatile EmbeddedSceneInterface scenePeer; - - /** - * Встроенное окно JavaFX UI. + * Контейнер сцены JavaFX. */ - protected volatile EmbeddedWindow stage; - protected volatile HostInterface hostContainer; + protected volatile JmeJFXPanel hostContainer; /** * Слушатель ввода пользователя. @@ -198,11 +131,6 @@ public void cleanup() { */ protected volatile Application application; - /** - * Рутовый узел текущей сцены. - */ - protected volatile Group rootNode; - /** * Отрисованное изображение UI. */ @@ -228,11 +156,6 @@ public void cleanup() { */ protected volatile CursorDisplayProvider cursorDisplayProvider; - /** - * Функция реординга данных. - */ - protected volatile Function reorderData; - /** * Время последнего изменения размера. */ @@ -295,25 +218,21 @@ public void cleanup() { private final JmeContext jmeContext; protected JmeFxContainer(final AssetManager assetManager, final Application application, final CursorDisplayProvider cursorDisplayProvider) { - this.initFx(); - - this.jmeContext = application.getContext(); + final Point decorationSize = JFXWindowsUtils.getWindowDecorationSize(); - final Point decorationSize = JFXUtils.getWindowDecorationSize(); + final AppStateManager stateManager = application.getStateManager(); + stateManager.attach(fxAppState); + this.jmeContext = application.getContext(); this.waitCount = new AtomicInteger(); this.imageLock = LockFactory.newPrimitiveAtomicARSWLock(); - this.paintListeners = new PaintListener[0]; this.windowOffsetX = (int) decorationSize.getX(); this.windowOffsetY = (int) decorationSize.getY(); this.cursorDisplayProvider = cursorDisplayProvider; this.application = application; this.visibleCursor = true; - final AppStateManager stateManager = application.getStateManager(); - stateManager.attach(fxAppState); - - this.hostContainer = new JmeFXHostInterfaceImpl(this); + this.hostContainer = new JmeJFXPanel(this); this.picture = new JavaFXPicture(this); this.picture.move(0, 0, -1); this.picture.setPosition(0, 0); @@ -352,18 +271,6 @@ public JmeContext getJmeContext() { return jmeContext; } - /** - * Добавление нового слушателя. - */ - public void addPaintListener(final PaintListener paintListener) { - - final List temp = new ArrayList<>(); - Collections.addAll(temp, getPaintListeners()); - temp.add(paintListener); - - setPaintListeners(temp.toArray(new PaintListener[temp.size()])); - } - /** * @return провайдер по отображению нужных курсоров. */ @@ -455,20 +362,6 @@ public void setOldY(final int oldY) { this.oldY = oldY; } - /** - * @return набор слушателей отрисовки. - */ - private PaintListener[] getPaintListeners() { - return paintListeners; - } - - /** - * @param paintListeners набор слушателей отрисовки. - */ - private void setPaintListeners(final PaintListener[] paintListeners) { - this.paintListeners = paintListeners; - } - /** * @return изображение для отрисовки UI. */ @@ -504,20 +397,6 @@ public void setPictureWidth(final int pictureWidth) { this.pictureWidth = pictureWidth; } - /** - * @return функция реординга данных. - */ - public Function getReorderData() { - return reorderData; - } - - /** - * @return рутовый узел текущей сцены. - */ - public Group getRootNode() { - return rootNode; - } - /** * @return текущая сцена UI. */ @@ -525,41 +404,6 @@ public Scene getScene() { return scene; } - /** - * @return текущая сцена UI. - */ - public EmbeddedSceneInterface getScenePeer() { - return scenePeer; - } - - /** - * @param scenePeer текущая сцена UI. - */ - public void setScenePeer(final EmbeddedSceneInterface scenePeer) { - this.scenePeer = scenePeer; - } - - /** - * @return встроенное окно JavaFX UI. - */ - public EmbeddedWindow getStage() { - return stage; - } - - /** - * @return текущая стадия UI. - */ - public EmbeddedStageInterface getStagePeer() { - return stagePeer; - } - - /** - * @param stagePeer текущая стадия UI. - */ - public void setStagePeer(final EmbeddedStageInterface stagePeer) { - this.stagePeer = stagePeer; - } - /** * @return временные данные кадра отрисованного в JavaFX. */ @@ -628,15 +472,10 @@ public int getWindowY() { */ public void grabFocus() { - final EmbeddedStageInterface stagePeer = getStagePeer(); - if(isFocus() || stagePeer == null) return; + final JmeJFXPanel hostContainer = getHostContainer(); + hostContainer.handleEvent(new FocusEvent(hostContainer, FocusEvent.FOCUS_GAINED)); - stagePeer.setFocused(true, AbstractEvents.FOCUSEVENT_ACTIVATED); setFocus(true); - - if(isDebug()) { - LOGGER.debug("got focus."); - } } /** @@ -649,8 +488,8 @@ public void handleResize() { final JmeContext jmeContext = getJmeContext(); - final int displayWidth = JFXUtils.getWidth(jmeContext); - final int displayHeight = JFXUtils.getHeight(jmeContext); + final int displayWidth = JFXWindowsUtils.getWidth(jmeContext); + final int displayHeight = JFXWindowsUtils.getHeight(jmeContext); final AsyncReadSyncWriteLock lock = getImageLock(); lock.syncLock(); @@ -676,7 +515,7 @@ public void handleResize() { fxData = BufferUtils.createByteBuffer(pictureWidth * pictureHeight * 4); tempData = BufferUtils.createByteBuffer(pictureWidth * pictureHeight * 4); jmeData = BufferUtils.createByteBuffer(pictureWidth * pictureHeight * 4); - jmeImage = new Image(nativeFormat.get(), pictureWidth, pictureHeight, jmeData, ColorSpace.sRGB); + jmeImage = new Image(Format.BGRA8, pictureWidth, pictureHeight, jmeData, ColorSpace.sRGB); final Texture2D texture = getTexture(); if (texture != null) texture.setImage(jmeImage); @@ -684,16 +523,7 @@ public void handleResize() { setPictureHeight(pictureHeight); setPictureWidth(pictureWidth); - final EmbeddedStageInterface stagePeer = getStagePeer(); - final EmbeddedSceneInterface scenePeer = getScenePeer(); - - if (stagePeer != null) { - Platform.runLater(() -> { - stagePeer.setSize(pictureWidth, pictureHeight); - scenePeer.setSize(pictureWidth, pictureHeight); - hostContainer.repaint(); - }); - } + hostContainer.handleResize(pictureWidth, pictureHeight); } catch (final Exception e) { LOGGER.warning(e); @@ -704,42 +534,6 @@ public void handleResize() { setLastResized(time); } - private void initFx() { - PlatformImpl.startup(() -> { - // TODO 3.1: use Format.ARGB8 and Format.BGRA8 and remove used - // of exchangeData, fx2jme_ARGB82ABGR8,... - switch (Pixels.getNativeFormat()) { - case Pixels.Format.BYTE_ARGB: - try { - JmeFxContainer.this.nativeFormat.complete(Format.valueOf("ARGB8")); - reorderData = null; - } catch (final Exception exc1) { - JmeFxContainer.this.nativeFormat.complete(Format.ABGR8); - reorderData = JmeFxContainer::reorder_ARGB82ABGR8; - } - break; - case Pixels.Format.BYTE_BGRA_PRE: - try { - JmeFxContainer.this.nativeFormat.complete(Format.valueOf("BGRA8")); - reorderData = null; - } catch (final Exception exc2) { - JmeFxContainer.this.nativeFormat.complete(Format.ABGR8); - reorderData = JmeFxContainer::reorder_BGRA82ABGR8; - } - break; - default: - try { - JmeFxContainer.this.nativeFormat.complete(Format.valueOf("ARGB8")); - reorderData = null; - } catch (final Exception exc3) { - JmeFxContainer.this.nativeFormat.complete(Format.ABGR8); - reorderData = JmeFxContainer::reorder_ARGB82ABGR8; - } - break; - } - }); - } - /** * Есть ли по этим координатом элемент JavaFX на сцене. */ @@ -816,16 +610,17 @@ public void setVisibleCursor(final boolean visibleCursor) { */ public void loseFocus() { - final EmbeddedStageInterface stagePeer = getStagePeer(); - if(!isFocus() || stagePeer == null) return; - - stagePeer.setFocused(false, AbstractEvents.FOCUSEVENT_DEACTIVATED); + final JmeJFXPanel hostContainer = getHostContainer(); + hostContainer.handleEvent(new FocusEvent(hostContainer, FocusEvent.FOCUS_LOST)); setFocus(false); + } - if(isDebug()) { - LOGGER.debug("lost focus."); - } + /** + * @return контейнер сцены JavaFX. + */ + public JmeJFXPanel getHostContainer() { + return hostContainer; } /** @@ -840,16 +635,8 @@ public void paintComponent() { LOGGER.debug("started paint FX scene..."); } - final EmbeddedSceneInterface scenePeer = getScenePeer(); - if (scenePeer == null) return; - - final PaintListener[] paintListeners = getPaintListeners(); - - if (paintListeners.length > 0) { - for (final PaintListener paintListener : paintListeners) { - paintListener.prePaint(); - } - } + final JmeJFXPanel hostContainer = getHostContainer(); + if (hostContainer == null) return; final ByteBuffer tempData = getTempData(); tempData.clear(); @@ -859,7 +646,7 @@ public void paintComponent() { final int pictureWidth = getPictureWidth(); final int pictureHeight = getPictureHeight(); - if (!scenePeer.getPixels(intBuffer, pictureWidth, pictureHeight)) return; + if (!JFXEmbeddedUtils.getPixels(hostContainer, intBuffer, pictureWidth, pictureHeight)) return; tempData.flip(); tempData.limit(pictureWidth * pictureHeight * 4); @@ -873,25 +660,12 @@ public void paintComponent() { fxData.put(tempData); fxData.flip(); - final Function reorderData = getReorderData(); - - if (reorderData != null) { - reorderData.apply(fxData); - fxData.position(0); - } - } catch (final Exception exc) { exc.printStackTrace(); } finally { imageLock.syncUnlock(); } - if (paintListeners.length > 0) { - for (final PaintListener paintListener : paintListeners) { - paintListener.postPaint(); - } - } - final AtomicInteger waitCount = getWaitCount(); waitCount.incrementAndGet(); @@ -900,23 +674,11 @@ public void paintComponent() { } } - /** - * Удаление слушателя отрисовки. - */ - public void removePaintListener(final PaintListener paintListener) { - - final List temp = new ArrayList<>(); - Collections.addAll(temp, getPaintListeners()); - temp.remove(paintListener); - - setPaintListeners(temp.toArray(new PaintListener[temp.size()])); - } - int retrieveKeyState() { int embedModifiers = 0; - if (keyStateSet.get(KeyEvent.VK_SHIFT)) { + /*if (keyStateSet.get(KeyEvent.VK_SHIFT)) { embedModifiers |= AbstractEvents.MODIFIER_SHIFT; } @@ -931,7 +693,7 @@ int retrieveKeyState() { if (keyStateSet.get(KeyEvent.VK_META)) { embedModifiers |= AbstractEvents.MODIFIER_META; } - +*/ return embedModifiers; } @@ -945,35 +707,16 @@ public void setEverListeningRawInputListener(final RawInputListener rawInputList void setFxEnabled(final boolean enabled) { } - public void setScene(final Scene newScene, final Group highLevelGroup) { - this.rootNode = highLevelGroup; - JFXUtils.runOnFxApplication(() -> setSceneImpl(newScene)); - } - - /* - * Called on JavaFX application thread. + /** + * @param scene текущая сцена UI. */ - private void setSceneImpl(final Scene newScene) { - - if (stage != null && newScene == null) { - stage.hide(); - stage = null; - } - + public void setScene(final Scene scene) { + this.scene = scene; + this.hostContainer.setScene(scene); application.enqueue(() -> { - picture.setCullHint(newScene == null ? CullHint.Always : CullHint.Never); + picture.setCullHint(scene == null ? Spatial.CullHint.Always : Spatial.CullHint.Never); return null; }); - - scene = newScene; - - if (stage == null && newScene != null) { - stage = new EmbeddedWindow(hostContainer); - } - - if (stage == null) return; - stage.setScene(newScene); - if (!stage.isShowing()) stage.show(); } /** diff --git a/src/com/jme3x/jfx/JmeJFXPanel.java b/src/com/jme3x/jfx/JmeJFXPanel.java new file mode 100644 index 0000000..b212468 --- /dev/null +++ b/src/com/jme3x/jfx/JmeJFXPanel.java @@ -0,0 +1,120 @@ +package com.jme3x.jfx; + +import com.jme3x.jfx.cursor.CursorDisplayProvider; +import com.jme3x.jfx.util.JFXEmbeddedUtils; +import com.jme3x.jfx.util.JFXPlatform; + +import java.awt.*; +import java.awt.event.FocusEvent; +import java.awt.event.KeyEvent; +import java.awt.event.MouseEvent; + +import javafx.embed.swing.JFXPanel; +import javafx.scene.Scene; +import rlib.logging.Logger; +import rlib.logging.LoggerManager; + +/** + * Fakes a top level window + */ +public class JmeJFXPanel extends JFXPanel { + + private static final Logger LOGGER = LoggerManager.getLogger(JmeJFXPanel.class); + + /** + * Контейнер JavaFX UI. + */ + private final JmeFxContainer jmeFxContainer; + + + private volatile Object embeddedStage; + private volatile Object embeddedScene; + + public JmeJFXPanel(final JmeFxContainer jmeFxContainer) { + this.jmeFxContainer = jmeFxContainer; + } + + /** + * @return контейнер JavaFX UI. + */ + private JmeFxContainer getJmeFxContainer() { + return jmeFxContainer; + } + + @Override + public void repaint() { + final JmeFxContainer jmeFxContainer = getJmeFxContainer(); + jmeFxContainer.paintComponent(); + } + + @Override + public void setCursor(final Cursor cursor) { + + final JmeFxContainer jmeFxContainer = getJmeFxContainer(); + final CursorDisplayProvider cursorDisplayProvider = jmeFxContainer.getCursorDisplayProvider(); + + if (cursorDisplayProvider != null) { + cursorDisplayProvider.showCursor(cursor); + } + } + + @Override + public void setScene(final Scene scene) { + super.setScene(scene); + + this.embeddedStage = JFXEmbeddedUtils.getStage(this); + this.embeddedScene = JFXEmbeddedUtils.getScene(this); + + if (scene == null) return; + + JFXEmbeddedUtils.setPixelScaleFactors(this, 1F, 1F); + + final int width = jmeFxContainer.getPictureWidth(); + final int height = jmeFxContainer.getPictureHeight(); + + handleResize(width, height); + + //embeddedScene.setDragStartListener(new JmeFxDNDHandler(jmeFxContainer)); + } + + public void handleEvent(final KeyEvent event) { + JFXPlatform.runInFXThread(() -> JFXEmbeddedUtils.sendKeyEventToFX(this, event)); + } + + public void handleEvent(final FocusEvent event) { + JFXPlatform.runInFXThread(() -> JFXEmbeddedUtils.sendFocusEventToFX(this, event)); + } + + public void handleEvent(final MouseEvent event) { + JFXPlatform.runInFXThread(() -> { + JFXEmbeddedUtils.setCapturingMouse(this, true); + JFXEmbeddedUtils.sendMouseEventToFX(this, event); + }); + } + + public void handleMove(final int x, final int y) { + JFXEmbeddedUtils.setScreenX(this, x); + JFXEmbeddedUtils.setScreenY(this, y); + JFXPlatform.runInFXThread(() -> JFXEmbeddedUtils.sendMoveEventToFX(this)); + } + + public void handleResize(final int width, final int height) { + if (width <= 0 || height <= 0) return; + JFXEmbeddedUtils.setPHeight(this, height); + JFXEmbeddedUtils.setPWidth(this, width); + JFXPlatform.runInFXThread(() -> JFXEmbeddedUtils.sendResizeEventToFX(this)); + } + + /** + * @return встроенная в панель сцена FX. + */ + public Object getEmbeddedScene() { + return embeddedScene; + } + + @Override + public void setEnabled(final boolean enabled) { + final JmeFxContainer jmeFxContainer = getJmeFxContainer(); + jmeFxContainer.setEnabled(enabled); + } +} diff --git a/src/main/java/com/jme3x/jfx/PixelUtils.java b/src/com/jme3x/jfx/PixelUtils.java old mode 100755 new mode 100644 similarity index 96% rename from src/main/java/com/jme3x/jfx/PixelUtils.java rename to src/com/jme3x/jfx/PixelUtils.java index e8311ba..c412c4b --- a/src/main/java/com/jme3x/jfx/PixelUtils.java +++ b/src/com/jme3x/jfx/PixelUtils.java @@ -1,68 +1,68 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package com.jme3x.jfx; - -/** - * Convertes image formats between jfx and jme - * - * @author Heist - */ -public abstract class PixelUtils { - - static int mergeArgb(final int bg, final int src) { - - final int sa = src >>> 24; - - if (sa == 0) { - return bg; - } - - final int ba = bg >>> 24; - - final int rb = (src & 0x00ff00ff) * sa + (bg & 0x00ff00ff) * (0xff - sa) & 0xff00ff00; - final int g = (src & 0x0000ff00) * sa + (bg & 0x0000ff00) * (0xff - sa) & 0x00ff0000; - final int a = sa + (ba * (0xff - sa) >> 8); - - return a << 24 | (rb | g) >>> 8; - } - - static int mergeBgra(final int bg, final int src) { - - final int sa = src & 0xff; - - if (sa == 0) { - return bg; - } - - final int ba = bg & 0xff; - - final int a = sa + (ba * (0xff - sa) >> 8); - - final int b = ((src & 0xff000000) >> 24) * sa + ((bg & 0xff000000) >> 24) * ba >> 8; - final int g = ((src & 0xff0000) >> 16) * sa + ((bg & 0xff0000) >> 16) * ba >> 8; - final int r = ((src & 0xff00) >> 8) * sa + ((bg & 0xff00) >> 8) * ba >> 8; - - return b << 24 | g << 16 | r << 8 | a; - // return 0xffff0000; - } - - // this is platform specific... assumes little-endian - static int mergeBgraPre(final int bg, final int src) { - - final int sa = src >>> 24; - - if (sa == 0) { - return bg; - } - - final int ba = bg >>> 24; - - final int rb = (src & 0x00ff00ff) * 0xff + (bg & 0x00ff00ff) * (0xff - sa) & 0xff00ff00; - final int g = (src & 0x0000ff00) * 0xff + (bg & 0x0000ff00) * (0xff - sa) & 0x00ff0000; - final int a = sa + (ba * (0xff - sa) >> 8); - - return a << 24 | (rb | g) >>> 8; - } -} +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package com.jme3x.jfx; + +/** + * Convertes image formats between jfx and jme + * + * @author Heist + */ +public abstract class PixelUtils { + + static int mergeArgb(final int bg, final int src) { + + final int sa = src >>> 24; + + if (sa == 0) { + return bg; + } + + final int ba = bg >>> 24; + + final int rb = (src & 0x00ff00ff) * sa + (bg & 0x00ff00ff) * (0xff - sa) & 0xff00ff00; + final int g = (src & 0x0000ff00) * sa + (bg & 0x0000ff00) * (0xff - sa) & 0x00ff0000; + final int a = sa + (ba * (0xff - sa) >> 8); + + return a << 24 | (rb | g) >>> 8; + } + + static int mergeBgra(final int bg, final int src) { + + final int sa = src & 0xff; + + if (sa == 0) { + return bg; + } + + final int ba = bg & 0xff; + + final int a = sa + (ba * (0xff - sa) >> 8); + + final int b = ((src & 0xff000000) >> 24) * sa + ((bg & 0xff000000) >> 24) * ba >> 8; + final int g = ((src & 0xff0000) >> 16) * sa + ((bg & 0xff0000) >> 16) * ba >> 8; + final int r = ((src & 0xff00) >> 8) * sa + ((bg & 0xff00) >> 8) * ba >> 8; + + return b << 24 | g << 16 | r << 8 | a; + // return 0xffff0000; + } + + // this is platform specific... assumes little-endian + static int mergeBgraPre(final int bg, final int src) { + + final int sa = src >>> 24; + + if (sa == 0) { + return bg; + } + + final int ba = bg >>> 24; + + final int rb = (src & 0x00ff00ff) * 0xff + (bg & 0x00ff00ff) * (0xff - sa) & 0xff00ff00; + final int g = (src & 0x0000ff00) * 0xff + (bg & 0x0000ff00) * (0xff - sa) & 0x00ff0000; + final int a = sa + (ba * (0xff - sa) >> 8); + + return a << 24 | (rb | g) >>> 8; + } +} diff --git a/src/main/java/com/jme3x/jfx/cursor/CursorDisplayProvider.java b/src/com/jme3x/jfx/cursor/CursorDisplayProvider.java similarity index 58% rename from src/main/java/com/jme3x/jfx/cursor/CursorDisplayProvider.java rename to src/com/jme3x/jfx/cursor/CursorDisplayProvider.java index 2e03a8e..96ec31f 100644 --- a/src/main/java/com/jme3x/jfx/cursor/CursorDisplayProvider.java +++ b/src/com/jme3x/jfx/cursor/CursorDisplayProvider.java @@ -1,7 +1,7 @@ package com.jme3x.jfx.cursor; -import com.sun.javafx.cursor.CursorFrame; -import com.sun.javafx.cursor.CursorType; + +import java.awt.*; /** * The interface for implementing the provider of cursors. @@ -11,10 +11,10 @@ public interface CursorDisplayProvider { /** * Setups the type of cursor. */ - void setupCursor(CursorType normal); + void setupCursor(Cursor normal); /** * Shows ths cursor. */ - void showCursor(CursorFrame cursorFrame); + void showCursor(Cursor cursorFrame); } diff --git a/src/com/jme3x/jfx/cursor/proton/ProtonCursorProvider.java b/src/com/jme3x/jfx/cursor/proton/ProtonCursorProvider.java new file mode 100644 index 0000000..2faf2c2 --- /dev/null +++ b/src/com/jme3x/jfx/cursor/proton/ProtonCursorProvider.java @@ -0,0 +1,83 @@ +package com.jme3x.jfx.cursor.proton; + +import com.jme3.app.Application; +import com.jme3.asset.AssetManager; +import com.jme3.asset.plugins.ClasspathLocator; +import com.jme3.cursors.plugins.JmeCursor; +import com.jme3.input.InputManager; +import com.jme3x.jfx.cursor.CursorDisplayProvider; + +import java.awt.*; +import java.util.concurrent.ConcurrentHashMap; + +/** + * http://www.rw-designer.com/cursor-set/proton by juanello
A cursorProvider that simulates the + * native JFX one and tries to behave similar,
using native cursors and 2D surface logic. + * + * @author empire + */ +public class ProtonCursorProvider implements CursorDisplayProvider { + + private ConcurrentHashMap cache = new ConcurrentHashMap<>(); + + private AssetManager assetManager; + private InputManager inputManager; + private Application app; + + public ProtonCursorProvider(final Application app, final AssetManager assetManager, final InputManager inputManager) { + this.assetManager = assetManager; + this.inputManager = inputManager; + this.app = app; + assetManager.registerLocator("", ClasspathLocator.class); + } + + @Override + public synchronized void showCursor(final Cursor cursor) { + + if (cache.get(cursor) == null) { + setupCursor(cursor); + } + + final JmeCursor toDisplay = cache.get(cursor); + if (toDisplay == null) return; + + app.enqueue(() -> { + inputManager.setMouseCursor(toDisplay); + return null; + }); + } + + @Override + public void setupCursor(final Cursor cursor) { + + JmeCursor loaded = null; + + switch (cursor.getType()) { + case Cursor.CROSSHAIR_CURSOR: + loaded = (JmeCursor) assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_cross.cur"); + break; + case Cursor.DEFAULT_CURSOR: + loaded = (JmeCursor) assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_arrow.cur"); + break; + case Cursor.MOVE_CURSOR: + loaded = (JmeCursor) assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_move.cur"); + break; + case Cursor.HAND_CURSOR: + break; + case Cursor.TEXT_CURSOR: + loaded = (JmeCursor) assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_text.cur"); + break; + case Cursor.WAIT_CURSOR: + loaded = (JmeCursor) assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_busy.ani"); + break; + case Cursor.W_RESIZE_CURSOR: + loaded = (JmeCursor) assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_ew.cur"); + break; + default: { + loaded = (JmeCursor) assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_arrow.cur"); + } + } + + if (loaded != null) cache.put(cursor, loaded); + } +} diff --git a/src/main/java/com/jme3x/jfx/cursor/proton/readme.txt b/src/com/jme3x/jfx/cursor/proton/readme.txt old mode 100755 new mode 100644 similarity index 93% rename from src/main/java/com/jme3x/jfx/cursor/proton/readme.txt rename to src/com/jme3x/jfx/cursor/proton/readme.txt index c8e2af6..c829538 --- a/src/main/java/com/jme3x/jfx/cursor/proton/readme.txt +++ b/src/com/jme3x/jfx/cursor/proton/readme.txt @@ -1,17 +1,17 @@ -=== Proton Cursor Set === - -By: juanello - -Download: http://www.rw-designer.com/cursor-set/proton - -Author's decription: - - - -========== - -License: Released to Public Domain - -You are free: - +=== Proton Cursor Set === + +By: juanello + +Download: http://www.rw-designer.com/cursor-set/proton + +Author's decription: + + + +========== + +License: Released to Public Domain + +You are free: + * To use this work for any legal purpose. \ No newline at end of file diff --git a/src/com/jme3x/jfx/util/JFXEmbeddedUtils.java b/src/com/jme3x/jfx/util/JFXEmbeddedUtils.java new file mode 100644 index 0000000..506d72b --- /dev/null +++ b/src/com/jme3x/jfx/util/JFXEmbeddedUtils.java @@ -0,0 +1,213 @@ +package com.jme3x.jfx.util; + +import com.jme3x.jfx.JmeJFXPanel; + +import java.awt.event.FocusEvent; +import java.awt.event.KeyEvent; +import java.awt.event.MouseEvent; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; +import java.lang.invoke.VarHandle; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.nio.IntBuffer; + +import javafx.embed.swing.JFXPanel; +import rlib.util.array.ArrayFactory; + +/** + * Created by ronn on 23.07.16. + */ +public class JFXEmbeddedUtils { + + private static final Class STAGE_TYPE; + private static final Class SCENE_TYPE; + + private static final String FIELD_STAGE_PEER = "stagePeer"; + private static final String FIELD_SCENE_PEER = "scenePeer"; + + private static final String FIELD_P_WIDTH = "pWidth"; + private static final String FIELD_P_HEIGHT = "pHeight"; + + private static final String FIELD_SCENE_X = "screenX"; + private static final String FIELD_SCENE_Y = "screenY"; + + private static final String FIELD_IS_CAPTURING_MOUSE = "isCapturingMouse"; + + private static final String METHOD_GET_PIXELS = "getPixels"; + private static final String METHOD_SET_PIXEL_SCALE_FACTORS = "setPixelScaleFactors"; + + private static final String METHOD_SEND_RESIZE_EVENT_TO_FX = "sendResizeEventToFX"; + private static final String METHOD_SEND_MOVE_EVENT_TO_FX = "sendMoveEventToFX"; + private static final String METHOD_SEND_MOUSE_EVENT_TO_FX = "sendMouseEventToFX"; + private static final String METHOD_SEND_FOCUS_EVENT_TO_FX = "sendFocusEventToFX"; + private static final String METHOD_SEND_KEY_EVENT_TO_FX = "sendKeyEventToFX"; + + private static final VarHandle STAGE_VAR_HANDLE; + private static final VarHandle SCENE_VAR_HANDLE; + + private static final VarHandle P_WIDTH_VAR_HANDLE; + private static final VarHandle P_HEIGHT_VAR_HANDLE; + + private static final VarHandle SCREEN_X_VAR_HANDLE; + private static final VarHandle SCREEN_Y_VAR_HANDLE; + + private static final VarHandle IS_CAPTURING_MOUSE_VAR_HANDLE; + + private static final MethodHandle SEND_RESIZE_EVENT_TO_FX_HANDLE; + private final static MethodHandle SEND_MOVE_EVENT_TO_FX_HANDLE; + private final static MethodHandle SEND_MOUSE_EVENT_TO_FX_HANDLE; + private final static MethodHandle SEND_FOCUS_EVENT_TO_FX_HANDLE; + private final static MethodHandle SEND_KEY_EVENT_TO_FX_HANDLE; + + private final static MethodHandle GET_PIXELS_HANDLE; + private final static MethodHandle SET_PIXEL_SCALE_FACTORS_HANDLE; + + static { + + try { + + STAGE_TYPE = Class.forName("com.sun.javafx.embed.EmbeddedStageInterface"); + SCENE_TYPE = Class.forName("com.sun.javafx.embed.EmbeddedSceneInterface"); + + final Constructor lookupConstructor = MethodHandles.Lookup.class.getDeclaredConstructor(Class.class); + lookupConstructor.setAccessible(true); + + final MethodHandles.Lookup panelLookup = lookupConstructor.newInstance(JFXPanel.class); + STAGE_VAR_HANDLE = panelLookup.findVarHandle(JFXPanel.class, FIELD_STAGE_PEER, STAGE_TYPE); + SCENE_VAR_HANDLE = panelLookup.findVarHandle(JFXPanel.class, FIELD_SCENE_PEER, SCENE_TYPE); + + P_WIDTH_VAR_HANDLE = panelLookup.findVarHandle(JFXPanel.class, FIELD_P_WIDTH, int.class); + P_HEIGHT_VAR_HANDLE = panelLookup.findVarHandle(JFXPanel.class, FIELD_P_HEIGHT, int.class); + + SCREEN_X_VAR_HANDLE = panelLookup.findVarHandle(JFXPanel.class, FIELD_SCENE_X, int.class); + SCREEN_Y_VAR_HANDLE = panelLookup.findVarHandle(JFXPanel.class, FIELD_SCENE_Y, int.class); + + IS_CAPTURING_MOUSE_VAR_HANDLE = panelLookup.findVarHandle(JFXPanel.class, FIELD_IS_CAPTURING_MOUSE, boolean.class); + + SEND_RESIZE_EVENT_TO_FX_HANDLE = panelLookup.findVirtual(JFXPanel.class, METHOD_SEND_RESIZE_EVENT_TO_FX, MethodType.methodType(void.class)); + SEND_MOVE_EVENT_TO_FX_HANDLE = panelLookup.findVirtual(JFXPanel.class, METHOD_SEND_MOVE_EVENT_TO_FX, MethodType.methodType(void.class)); + SEND_MOUSE_EVENT_TO_FX_HANDLE = panelLookup.findVirtual(JFXPanel.class, METHOD_SEND_MOUSE_EVENT_TO_FX, MethodType.methodType(void.class, MouseEvent.class)); + SEND_FOCUS_EVENT_TO_FX_HANDLE = panelLookup.findVirtual(JFXPanel.class, METHOD_SEND_FOCUS_EVENT_TO_FX, MethodType.methodType(void.class, FocusEvent.class)); + SEND_KEY_EVENT_TO_FX_HANDLE = panelLookup.findVirtual(JFXPanel.class, METHOD_SEND_KEY_EVENT_TO_FX, MethodType.methodType(void.class, KeyEvent.class)); + + final MethodType getPixelsMethodType = MethodType.methodType(boolean.class, ArrayFactory.toArray(IntBuffer.class, int.class, int.class)); + final MethodType setPixelScaleFactorsMethodType = MethodType.methodType(void.class, ArrayFactory.toArray(float.class, float.class)); + + final MethodHandles.Lookup sceneLookup = lookupConstructor.newInstance(SCENE_TYPE); + GET_PIXELS_HANDLE = sceneLookup.findVirtual(SCENE_TYPE, METHOD_GET_PIXELS, getPixelsMethodType); + SET_PIXEL_SCALE_FACTORS_HANDLE = sceneLookup.findVirtual(SCENE_TYPE, METHOD_SET_PIXEL_SCALE_FACTORS, setPixelScaleFactorsMethodType); + + } catch (final NoSuchFieldException | NoSuchMethodException | InvocationTargetException | InstantiationException | IllegalAccessException | ClassNotFoundException e) { + throw new RuntimeException(e); + } + } + + public static Object getStage(final JmeJFXPanel panel) { + return STAGE_VAR_HANDLE.get(panel); + } + + public static Object getScene(final JmeJFXPanel panel) { + return SCENE_VAR_HANDLE.get(panel); + } + + public static void setPHeight(final JmeJFXPanel panel, final int value) { + P_HEIGHT_VAR_HANDLE.set(panel, value); + } + + public static void setPWidth(final JmeJFXPanel panel, final int value) { + P_WIDTH_VAR_HANDLE.set(panel, value); + } + + public static void setScreenX(final JmeJFXPanel panel, final int value) { + SCREEN_X_VAR_HANDLE.getAndSet(panel, value); + } + + public static void setScreenY(final JmeJFXPanel panel, final int value) { + SCREEN_Y_VAR_HANDLE.getAndSet(panel, value); + } + + public static void setCapturingMouse(final JmeJFXPanel panel, final boolean value) { + IS_CAPTURING_MOUSE_VAR_HANDLE.set(panel, value); + } + + public static void sendMoveEventToFX(final JmeJFXPanel panel) { + try { + SEND_MOVE_EVENT_TO_FX_HANDLE.invoke(panel); + } catch (final Throwable e) { + throw new RuntimeException(e); + } + } + + public static void sendResizeEventToFX(final JmeJFXPanel panel) { + try { + SEND_RESIZE_EVENT_TO_FX_HANDLE.invoke(panel); + } catch (final Throwable e) { + throw new RuntimeException(e); + } + } + + public static void sendMouseEventToFX(final JmeJFXPanel panel, final MouseEvent event) { + try { + SEND_MOUSE_EVENT_TO_FX_HANDLE.invoke(panel, event); + } catch (final Throwable e) { + throw new RuntimeException(e); + } + } + + public static void sendFocusEventToFX(final JmeJFXPanel panel, final FocusEvent event) { + try { + SEND_FOCUS_EVENT_TO_FX_HANDLE.invoke(panel, event); + } catch (final Throwable e) { + throw new RuntimeException(e); + } + } + + public static void sendKeyEventToFX(final JmeJFXPanel panel, final KeyEvent event) { + try { + SEND_KEY_EVENT_TO_FX_HANDLE.invoke(panel, event); + } catch (final Throwable e) { + throw new RuntimeException(e); + } + } + + /** + * Запрос на получение данных об отрисованном UI. + * + * @param panel панель из которой надо изъять данные. + * @param buffer буффер для размещения данных. + * @param width ширина. + * @param height высота. + * @return были ли данные получены. + */ + public static boolean getPixels(final JmeJFXPanel panel, final IntBuffer buffer, final int width, final int height) { + + final Object embeddedScene = panel.getEmbeddedScene(); + final Object result; + try { + result = GET_PIXELS_HANDLE.invokeWithArguments(embeddedScene, buffer, width, height); + } catch (final Throwable throwable) { + throw new RuntimeException(throwable); + } + + return (boolean) result; + } + + /** + * Установка маштабирования пикселей в сцене. + * + * @param panel панель в которй находится сцена. + * @param scaleX маштабирование по оси X. + * @param scaleY маштабирование по оси Y. + */ + public static void setPixelScaleFactors(final JmeJFXPanel panel, final float scaleX, final float scaleY) { + + final Object embeddedScene = panel.getEmbeddedScene(); + try { + SET_PIXEL_SCALE_FACTORS_HANDLE.invokeWithArguments(embeddedScene, scaleX, scaleY); + } catch (final Throwable throwable) { + throw new RuntimeException(throwable); + } + } +} diff --git a/src/com/jme3x/jfx/util/JFXPixels.java b/src/com/jme3x/jfx/util/JFXPixels.java new file mode 100644 index 0000000..26ed6cf --- /dev/null +++ b/src/com/jme3x/jfx/util/JFXPixels.java @@ -0,0 +1,63 @@ +package com.jme3x.jfx.util; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; + +import javafx.application.Platform; +import rlib.util.array.ArrayFactory; + +/** + * Набор утильных методов для работы с Pixels в JavaFX. + */ +public class JFXPixels { + + private static final Class PIXELS_TYPE; + private static final Class FORMAT_TYPE; + + private static final String METHOD_STARTUP = "startup"; + + private static final MethodHandle STARTUP_HANDLE; + + static { + + try { + + PIXELS_TYPE = Class.forName("com.sun.glass.ui.Pixels"); + FORMAT_TYPE = Class.forName("com.sun.glass.ui.Pixels.Format"); + + final Constructor lookupConstructor = MethodHandles.Lookup.class.getDeclaredConstructor(Class.class); + lookupConstructor.setAccessible(true); + + final MethodHandles.Lookup pixelsLookup = lookupConstructor.newInstance(PIXELS_TYPE); + STARTUP_HANDLE = pixelsLookup.findStatic(PIXELS_TYPE, METHOD_STARTUP, MethodType.methodType(Void.class, ArrayFactory.toArray(Runnable.class))); + + } catch (final ClassNotFoundException | InvocationTargetException | InstantiationException | IllegalAccessException | NoSuchMethodException e) { + throw new RuntimeException(e); + } + } + + /** + * Добавить задачу на выполнение после старта JavaFX. + */ + public static void startup(final Runnable task) { + try { + STARTUP_HANDLE.invokeWithArguments(task); + } catch (final Throwable throwable) { + throw new RuntimeException(throwable); + } + } + + /** + * Выполнить задачу в потоке JavaFX. + */ + public static void runInFXThread(final Runnable task) { + if (Platform.isFxApplicationThread()) { + task.run(); + } else { + Platform.runLater(task); + } + } +} diff --git a/src/com/jme3x/jfx/util/JFXPlatform.java b/src/com/jme3x/jfx/util/JFXPlatform.java new file mode 100644 index 0000000..709ad94 --- /dev/null +++ b/src/com/jme3x/jfx/util/JFXPlatform.java @@ -0,0 +1,61 @@ +package com.jme3x.jfx.util; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; + +import javafx.application.Platform; +import rlib.util.array.ArrayFactory; + +/** + * Набор утильных методов для работы с JavaFX. + */ +public class JFXPlatform { + + private static final Class PLATFORM_TYPE; + + private static final String METHOD_STARTUP = "startup"; + + private static final MethodHandle STARTUP_HANDLE; + + static { + + try { + + PLATFORM_TYPE = Class.forName("com.sun.javafx.application.PlatformImpl"); + + final Constructor lookupConstructor = MethodHandles.Lookup.class.getDeclaredConstructor(Class.class); + lookupConstructor.setAccessible(true); + + final MethodHandles.Lookup platformLookup = lookupConstructor.newInstance(PLATFORM_TYPE); + STARTUP_HANDLE = platformLookup.findStatic(PLATFORM_TYPE, METHOD_STARTUP, MethodType.methodType(void.class, ArrayFactory.toArray(Runnable.class))); + + } catch (final ClassNotFoundException | InvocationTargetException | InstantiationException | IllegalAccessException | NoSuchMethodException e) { + throw new RuntimeException(e); + } + } + + /** + * Добавить задачу на выполнение после старта JavaFX. + */ + public static void startup(final Runnable task) { + try { + STARTUP_HANDLE.invoke(task); + } catch (final Throwable throwable) { + throw new RuntimeException(throwable); + } + } + + /** + * Выполнить задачу в потоке JavaFX. + */ + public static void runInFXThread(final Runnable task) { + if (Platform.isFxApplicationThread()) { + task.run(); + } else { + Platform.runLater(task); + } + } +} diff --git a/src/main/java/com/jme3x/jfx/util/JFXUtils.java b/src/com/jme3x/jfx/util/JFXWindowsUtils.java old mode 100755 new mode 100644 similarity index 84% rename from src/main/java/com/jme3x/jfx/util/JFXUtils.java rename to src/com/jme3x/jfx/util/JFXWindowsUtils.java index d509c05..f4f9753 --- a/src/main/java/com/jme3x/jfx/util/JFXUtils.java +++ b/src/com/jme3x/jfx/util/JFXWindowsUtils.java @@ -13,17 +13,15 @@ import java.util.HashMap; import java.util.Map; -import javafx.application.Platform; - import static java.lang.ThreadLocal.withInitial; import static org.lwjgl.BufferUtils.createIntBuffer; /** - * Set of methods for scrap work JFX. + * Набор методов по работе с окном. * * @author Ronn */ -public class JFXUtils { +public class JFXWindowsUtils { private static final Map OFFSET_MAPPING = new HashMap<>(); @@ -35,7 +33,7 @@ public class JFXUtils { private static final ThreadLocal LOCAL_SECOND_INT_BUFFER = withInitial(() -> createIntBuffer(1)); /** - * Getting the size of the window decorations in the system. + * Получение размера декарации окна. */ public static Point getWindowDecorationSize() { @@ -56,6 +54,9 @@ public static Point getWindowDecorationSize() { return new Point(0, 0); } + /** + * Получение текущей X координаты окна. + */ public static int getX(final JmeContext context) { final LwjglWindow lwjglContext = (LwjglWindow) context; @@ -71,6 +72,9 @@ public static int getX(final JmeContext context) { return x.get(0); } + /** + * Получение текущей Y координаты окна. + */ public static int getY(final JmeContext context) { final LwjglWindow lwjglContext = (LwjglWindow) context; @@ -86,6 +90,9 @@ public static int getY(final JmeContext context) { return y.get(0); } + /** + * Получение текущей ширины окна. + */ public static int getWidth(final JmeContext context) { final LwjglWindow lwjglContext = (LwjglWindow) context; @@ -101,6 +108,9 @@ public static int getWidth(final JmeContext context) { return width.get(0); } + /** + * Получение текущей высоты окна. + */ public static int getHeight(final JmeContext context) { final LwjglWindow lwjglContext = (LwjglWindow) context; @@ -116,21 +126,19 @@ public static int getHeight(final JmeContext context) { return height.get(0); } + /** + * Проверка находится ли окно в полноэкранном режиме. + */ public static boolean isFullscreen(final JmeContext jmeContext) { final AppSettings settings = jmeContext.getSettings(); return settings.isFullscreen(); } + /** + * Запросить фокус на окне. + */ public static void requestFocus(final Application application) { final LwjglWindow lwjglContext = (LwjglWindow) application.getContext(); GLFW.glfwShowWindow(lwjglContext.getWindowHandle()); } - - public static void runOnFxApplication(final Runnable task) { - if (Platform.isFxApplicationThread()) { - task.run(); - } else { - Platform.runLater(task); - } - } } diff --git a/src/main/java/com/jme3x/jfx/util/os/OperatingSystem.java b/src/com/jme3x/jfx/util/os/OperatingSystem.java old mode 100755 new mode 100644 similarity index 100% rename from src/main/java/com/jme3x/jfx/util/os/OperatingSystem.java rename to src/com/jme3x/jfx/util/os/OperatingSystem.java diff --git a/src/main/java/com/jme3x/jfx/util/os/OperatingSystemResolver.java b/src/com/jme3x/jfx/util/os/OperatingSystemResolver.java old mode 100755 new mode 100644 similarity index 100% rename from src/main/java/com/jme3x/jfx/util/os/OperatingSystemResolver.java rename to src/com/jme3x/jfx/util/os/OperatingSystemResolver.java diff --git a/src/main/java/com/jme3x/jfx/JmeFXHostInterfaceImpl.java b/src/main/java/com/jme3x/jfx/JmeFXHostInterfaceImpl.java deleted file mode 100755 index 0ced8d4..0000000 --- a/src/main/java/com/jme3x/jfx/JmeFXHostInterfaceImpl.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package com.jme3x.jfx; - -import com.jme3x.jfx.cursor.CursorDisplayProvider; -import com.sun.javafx.cursor.CursorFrame; -import com.sun.javafx.embed.AbstractEvents; -import com.sun.javafx.embed.EmbeddedSceneInterface; -import com.sun.javafx.embed.EmbeddedStageInterface; -import com.sun.javafx.embed.HostInterface; - -import rlib.logging.Logger; -import rlib.logging.LoggerManager; - -/** - * Fakes a top level window - */ -public class JmeFXHostInterfaceImpl implements HostInterface { - - private static final Logger LOGGER = LoggerManager.getLogger(JmeFXHostInterfaceImpl.class); - - /** - * контейнер JavaFX UI - */ - private final JmeFxContainer jmeFxContainer; - - public JmeFXHostInterfaceImpl(final JmeFxContainer jmeFxContainer) { - this.jmeFxContainer = jmeFxContainer; - } - - /** - * @return контейнер JavaFX UI. - */ - private JmeFxContainer getJmeFxContainer() { - return jmeFxContainer; - } - - @Override - public boolean grabFocus() { - return true; - } - - @Override - public void repaint() { - final JmeFxContainer jmeFxContainer = getJmeFxContainer(); - jmeFxContainer.paintComponent(); - } - - @Override - public boolean requestFocus() { - return true; - } - - @Override - public void setCursor(final CursorFrame cursorFrame) { - - final JmeFxContainer jmeFxContainer = getJmeFxContainer(); - final CursorDisplayProvider cursorDisplayProvider = jmeFxContainer.getCursorDisplayProvider(); - - if (cursorDisplayProvider != null) { - cursorDisplayProvider.showCursor(cursorFrame); - } - } - - @Override - public void setEmbeddedScene(final EmbeddedSceneInterface embeddedScene) { - - final JmeFxContainer jmeFxContainer = getJmeFxContainer(); - jmeFxContainer.setScenePeer(embeddedScene); - - if (embeddedScene == null) return; - - embeddedScene.setPixelScaleFactor(1); - - final int width = jmeFxContainer.getPictureWidth(); - final int height = jmeFxContainer.getPictureHeight(); - - if (width > 0 && height > 0) { - embeddedScene.setSize(jmeFxContainer.getPictureWidth(), jmeFxContainer.getPictureHeight()); - } - - embeddedScene.setDragStartListener(new JmeFxDNDHandler(jmeFxContainer)); - } - - @Override - public void setEmbeddedStage(final EmbeddedStageInterface embeddedStage) { - - final JmeFxContainer jmeFxContainer = getJmeFxContainer(); - jmeFxContainer.setStagePeer(embeddedStage); - - if (embeddedStage == null) return; - - final int width = jmeFxContainer.getPictureWidth(); - final int height = jmeFxContainer.getPictureHeight(); - - if (width > 0 && height > 0) { - embeddedStage.setSize(jmeFxContainer.getPictureWidth(), jmeFxContainer.getPictureHeight()); - } - - embeddedStage.setFocused(true, AbstractEvents.FOCUSEVENT_ACTIVATED); - } - - @Override - public void setEnabled(final boolean enabled) { - final JmeFxContainer jmeFxContainer = getJmeFxContainer(); - jmeFxContainer.setEnabled(enabled); - } - - @Override - public void setPreferredSize(final int width, final int height) { - } - - @Override - public boolean traverseFocusOut(final boolean forward) { - - if (JmeFxContainer.isDebug()) { - LOGGER.debug("Called traverseFocusOut(" + forward + ")"); - } - - return true; - } - - @Override - public void ungrabFocus() { - } -} diff --git a/src/main/java/com/jme3x/jfx/JmeFxDNDHandler.java b/src/main/java/com/jme3x/jfx/JmeFxDNDHandler.java deleted file mode 100644 index 0257995..0000000 --- a/src/main/java/com/jme3x/jfx/JmeFxDNDHandler.java +++ /dev/null @@ -1,213 +0,0 @@ -package com.jme3x.jfx; - -import com.sun.javafx.embed.EmbeddedSceneDSInterface; -import com.sun.javafx.embed.EmbeddedSceneDTInterface; -import com.sun.javafx.embed.EmbeddedSceneInterface; -import com.sun.javafx.embed.HostDragStartListener; - -import java.nio.ByteBuffer; - -import javafx.collections.ObservableList; -import javafx.scene.Group; -import javafx.scene.Node; -import javafx.scene.image.ImageView; -import javafx.scene.image.PixelFormat; -import javafx.scene.image.PixelWriter; -import javafx.scene.image.WritableImage; -import javafx.scene.input.Clipboard; -import javafx.scene.input.TransferMode; -import rlib.logging.Logger; -import rlib.logging.LoggerManager; - -/** - * A very hacky implementation of a DND system, similar to SwingDND but for jme context.
Allows - * for inner application drag and drop support.
Cross GuiManager support is untested. - * - * @author empire - */ -public class JmeFxDNDHandler implements HostDragStartListener { - - private static final Logger LOGGER = LoggerManager.getLogger(JmeFxDNDHandler.class); - - private JmeFxContainer jmeFxContainer; - private EmbeddedSceneDTInterface dropTarget; - - // mouse event stuff - private EmbeddedSceneDSInterface dragSource; - private TransferMode overTarget; - private ImageView dragImage; - - public JmeFxDNDHandler(final JmeFxContainer jmeFxContainer) { - this.jmeFxContainer = jmeFxContainer; - } - - /** - * this is kinda ridiculous, but well at least it seems to work - */ - private void createDragImageProxy(final Object jmeJfxDragImage, final Object offset) { - - if (!(jmeJfxDragImage instanceof ByteBuffer)) { - return; - } - - try { - - final ByteBuffer casted = (ByteBuffer) jmeJfxDragImage; - casted.position(0); - - final int width = casted.getInt(); - final int height = casted.getInt(); - - final byte[] imgdata = new byte[casted.remaining()]; - casted.get(imgdata); - - final WritableImage img = new WritableImage(width, height); - final PixelWriter writer = img.getPixelWriter(); - writer.setPixels(0, 0, width, height, PixelFormat.getByteBgraInstance(), imgdata, 0, width * 4); - - dragImage = new ImageView(img); - dragImage.setStyle("dragimage:true;"); - dragImage.setMouseTransparent(true); - dragImage.setVisible(true); - - if (offset instanceof ByteBuffer) { - - ((ByteBuffer) offset).position(0); - - final int x = ((ByteBuffer) offset).getInt(); - final int y = ((ByteBuffer) offset).getInt(); - - if (LOGGER.isEnabledDebug()) LOGGER.debug("Img offset " + x + ", " + y); - } - - } catch (final Exception e) { - LOGGER.warning(e.getMessage(), e); - } - } - - @Override - public void dragStarted(final EmbeddedSceneDSInterface dragSource, final TransferMode dragAction) { - - final JmeFxContainer jmeFxContainer = getJmeFxContainer(); - final JmeFXInputListener inputListener = jmeFxContainer.getInputListener(); - final EmbeddedSceneInterface scenePeer = jmeFxContainer.getScenePeer(); - final Group rootNode = jmeFxContainer.getRootNode(); - final ObservableList children = rootNode.getChildren(); - - if (dragImage != null) { - children.remove(dragImage); - dragImage = null; - } - - try { - - final Object dragImg = dragSource.getData("application/x-java-drag-image"); - final Object offset = dragSource.getData("application/x-java-drag-image-offset"); - - if (dragImg != null) { - createDragImageProxy(dragImg, offset); - } - - inputListener.setMouseDNDListener(this); - - assert dragAction == TransferMode.COPY : "Only Copy is supported currently"; - - if (LOGGER.isEnabledDebug()) { - LOGGER.debug("Drag started of " + dragSource + " in mode " + dragAction); - } - - final Clipboard clip = Clipboard.getSystemClipboard(); - - if (LOGGER.isEnabledDebug()) { - LOGGER.debug("clip : " + clip); - } - - assert this.dragSource == null; - assert this.dropTarget == null; - - this.dragSource = dragSource; - this.dropTarget = scenePeer.createDropTarget(); - // pseudo enter, we only support inner events, so it stays always entered - this.dropTarget.handleDragEnter(0, 0, 0, 0, TransferMode.COPY, dragSource); - - } catch (final Exception e) { - LOGGER.warning(e.getMessage(), e); - } - } - - public ImageView getDragImage() { - return dragImage; - } - - public JmeFxContainer getJmeFxContainer() { - return jmeFxContainer; - } - - public void mouseUpdate(final int x, final int y, final boolean mousePressed) { - - if (this.dragSource == null || this.dropTarget == null) { - return; - } - - final JmeFxContainer jmeFxContainer = getJmeFxContainer(); - final JmeFXInputListener inputListener = jmeFxContainer.getInputListener(); - final Group rootNode = jmeFxContainer.getRootNode(); - final ObservableList children = rootNode.getChildren(); - - final ImageView dragImage = getDragImage(); - - try { - - if (mousePressed) { - - if (dragImage != null) { - dragImage.relocate(x, y); - - // only add once it has a valid position - if (!children.contains(dragImage)) { - children.add(dragImage); - } - } - - this.overTarget = this.dropTarget.handleDragOver(x, y, x, y, TransferMode.COPY); - - } else { - - if (dragImage != null) { - dragImage.setVisible(false); - } - - if (LOGGER.isEnabledDebug()) { - LOGGER.debug("Drag released!"); - } - - if (this.overTarget != null) { - - // // causes exceptions when done without a target - this.overTarget = this.dropTarget.handleDragOver(x, y, x, y, TransferMode.COPY); - final TransferMode acceptedMode = this.dropTarget.handleDragDrop(x, y, x, y, TransferMode.COPY); - // // Necessary to reset final the internal states, and allow final another drag drop - this.dragSource.dragDropEnd(acceptedMode); - - } else { - - if (LOGGER.isEnabledDebug()) { - LOGGER.debug("invalid drag target"); - } - - // // seems to be necessary if no dragdrop attempt is being made - this.dropTarget.handleDragLeave(); - this.dragSource.dragDropEnd(null); - } - - inputListener.setMouseDNDListener(null); - - this.dragSource = null; - this.dropTarget = null; - } - - } catch (final Exception e) { - LOGGER.warning(e.getMessage(), e); - } - } -} \ No newline at end of file diff --git a/src/main/java/com/jme3x/jfx/cursor/proton/ProtonCursorProvider.java b/src/main/java/com/jme3x/jfx/cursor/proton/ProtonCursorProvider.java deleted file mode 100755 index 29336ce..0000000 --- a/src/main/java/com/jme3x/jfx/cursor/proton/ProtonCursorProvider.java +++ /dev/null @@ -1,127 +0,0 @@ -package com.jme3x.jfx.cursor.proton; - -import com.jme3.app.Application; -import com.jme3.asset.AssetManager; -import com.jme3.asset.plugins.ClasspathLocator; -import com.jme3.cursors.plugins.JmeCursor; -import com.jme3.input.InputManager; -import com.jme3x.jfx.cursor.CursorDisplayProvider; -import com.sun.javafx.cursor.CursorFrame; -import com.sun.javafx.cursor.CursorType; - -import java.util.concurrent.ConcurrentHashMap; - -import rlib.logging.Logger; -import rlib.logging.LoggerManager; - -/** - * http://www.rw-designer.com/cursor-set/proton by juanello
A cursorProvider that simulates the - * native JFX one and tries to behave similar,
using native cursors and 2D surface logic. - * - * @author empire - */ -public class ProtonCursorProvider implements CursorDisplayProvider { - - private static final Logger LOGGER = LoggerManager.getLogger(ProtonCursorProvider.class); - - private ConcurrentHashMap cache = new ConcurrentHashMap<>(); - - private AssetManager assetManager; - private InputManager inputManager; - private Application app; - - public ProtonCursorProvider(final Application app, final AssetManager assetManager, final InputManager inputManager) { - this.assetManager = assetManager; - this.inputManager = inputManager; - this.app = app; - assetManager.registerLocator("", ClasspathLocator.class); - } - - @Override - public void setupCursor(final CursorType cursorType) { - - JmeCursor loaded = null; - - switch (cursorType) { - case CLOSED_HAND: - break; - case CROSSHAIR: - loaded = (JmeCursor) assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_cross.cur"); - break; - case DEFAULT: - loaded = (JmeCursor) assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_arrow.cur"); - break; - case DISAPPEAR: - break; - case E_RESIZE: - loaded = (JmeCursor) assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_ew.cur"); - break; - case HAND: - loaded = (JmeCursor) assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_link.cur"); - break; - case H_RESIZE: - loaded = (JmeCursor) assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_ew.cur"); - break; - case IMAGE: - break; - case MOVE: - loaded = (JmeCursor) assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_move.cur"); - break; - case NE_RESIZE: - loaded = (JmeCursor) assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_nesw.cur"); - break; - case NONE: - break; - case NW_RESIZE: - loaded = (JmeCursor) assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_nwse.cur"); - break; - case N_RESIZE: - loaded = (JmeCursor) assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_ns.cur"); - break; - case OPEN_HAND: - break; - case SE_RESIZE: - loaded = (JmeCursor) assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_nwse.cur"); - break; - case SW_RESIZE: - loaded = (JmeCursor) assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_nesw.cur"); - break; - case S_RESIZE: - loaded = (JmeCursor) assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_ns.cur"); - break; - case TEXT: - loaded = (JmeCursor) assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_text.cur"); - break; - case V_RESIZE: - loaded = (JmeCursor) assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_ns.cur"); - break; - case WAIT: - loaded = (JmeCursor) assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_busy.ani"); - break; - case W_RESIZE: - loaded = (JmeCursor) assetManager.loadAsset("com/jme3x/jfx/cursor/proton/aero_ew.cur"); - break; - } - - if (loaded != null) cache.put(cursorType, loaded); - } - - @Override - public void showCursor(final CursorFrame cursorFrame) { - - CursorType cursorType = cursorFrame.getCursorType(); - - if (cache.get(cursorType) == null) { - LOGGER.debug("Unkown Cursor! " + cursorType); - cursorType = CursorType.DEFAULT; - } - - final JmeCursor toDisplay = cache.get(cursorType); - if (toDisplay == null) return; - - app.enqueue(() -> { - inputManager.setMouseCursor(toDisplay); - return null; - }); - } -} diff --git a/src/main/java/com/jme3x/jfx/cursor/proton/aero_arrow.cur b/src/main/java/com/jme3x/jfx/cursor/proton/aero_arrow.cur deleted file mode 100755 index c13d534e5103d220489a94eb433b005322053fa2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4286 zcmeH}%SyvQ6ow~>7o>PYEDBnqE)-l;6y15jjfigD1Rq7vov-5CWgD`I-yf1PY1)M} z9bL?UuXC78_)bq}k{T15z{IgB<9oxHKG`Y6a1UJN)0j`L`S2a^9q=9S9q=9aM;%zC zmemU7E+ay=2?IEWU04BEQ6Lf*a8r$YjIL@Z6!^p|Ji#Tns-g5-HN06h9Fgnq%+?s% zD_!lAk$=;05#_DiZ7?2sGEb3xztp$A>KRlcoi z<+huA9%r)UtS20}QB3~+j@%Rd4&5!kV|T;<2kw!-az8M-eD{?8%6-Ck2J<*$@=Oao uTh?H^!qt1ftfxNfzZt(+96oKZ7UB+Ml>yADF` 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 diff --git a/src/main/java/com/jme3x/jfx/cursor/proton/aero_cross.cur b/src/main/java/com/jme3x/jfx/cursor/proton/aero_cross.cur deleted file mode 100755 index 31d81cf72a5b73d70bfa48d50c9bcfe58f8f2512..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4286 zcmeH|>rN9<6h==6t9VC@f|qE~m}mrzQ4=K^`)2w$zJ-WbE?OU^>HU)9TFp#COcSA< z;n!@k=uFQr-`RVA`w&7BDxp>j;W|HGS3p$_nICfrPi5 zgY(B&;<^H75miJkfm5Avk!$yK7NOQncmTEZbCu6!C_L^|lkc#%UQG@V+k|JZ4ws?u zP`}k`Mf8sldke3?T3my|1O450yRH5&#NL5>*nqrG`ON1Rc(*;bzANbNbvhmOo7{hd zZLkM-!9D0rz2JN-G8dW8_0}5PhYfTOy4`MEt0sTAucuf8_h23Ff&U6`fcu_zF8o`4 z?mP9_8`xHNhJKy3Pp-pjcn&p~doJknj=d(|eK>;OXgAgG^?K9%z5a)$&!PJQ9xbXr znM~q%Jf1QdjpA@PjDx`-_WS+l9;}1t2R)h2g}%%q|8LG3{2-^F(12+z+{5v_%^42U z^#=NS;1*l~eK=3(8@;dZoo)TJiblgasLy>J?E4lx1pDm_Tm|PKn*lEK3F~1m%$YZS zfcNkO%(w8+lX?Pu`|SDSToiHs%*;hkr22#9!{5i&1gi4GVv)29YKk*mo Cw-*-x diff --git a/src/main/java/com/jme3x/jfx/cursor/proton/aero_ew.cur b/src/main/java/com/jme3x/jfx/cursor/proton/aero_ew.cur deleted file mode 100755 index ce7886c444422a70f07834a01ff3a65bf262388b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4286 zcmeH}%Wl&^6o$ukTyAXwrBGTx7!^>d5GyXCEpk?{fG1$Z67dr7IJ^ZyET~$QimIx3 z0g^_FBC?1QqA0`nS9WEYsY90tpX#ganRDj+b7sblF~0Fk6d6CZ>|1&XPs)6^Ke#JckeUcVn8j3WexnC;xLF0#AoC+*4^@N99)6d&= z?(;Y+)=WRS5+tFxbhr^-m z_xrZj>)CF%Ydf8eZMWOD)oR&hvw4_5tAU*Bp!w@eIOort*3j@Nt06ac&3RMnQ^01b zA-50ik#`Za{(6r%Ew3T7{%ZuNe%f?eG-}`V4X24l{+K-GmYable zA;~Z8ci<`%{*sgb_x*j#JT_{9_X>ZV7ird+or1rzRD<>-0Xp;AH_~4?hW3!ObB>-T zae8N+C^!D8Dc31DouKDq*N#4!_LgGwo)n5L)J%VAWd+I#loj}|DvcH&{fZBxACuuLu4I(1HBz(H2?qr diff --git a/src/main/java/com/jme3x/jfx/cursor/proton/aero_helpsel.cur b/src/main/java/com/jme3x/jfx/cursor/proton/aero_helpsel.cur deleted file mode 100755 index 91527fb4f2ef6061dc1eb635396de3e83c3ada8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4286 zcmeH}PpA?>9DqlCy?qp6|BU`%S{ZdS4-#1LDhQ(MOXv_iDv*c{(Iq++-8&hC2Z=gF zM~|L5c##g`DG!1n#yHy8}+NF-wBz@dk5#!Y`95HNF)T=3onc@|uWTCMiMn*Urb z_Z4XhF2de_NMMb=$KWLF2QN4ZamV9vok%3C`G3K{4LApeqmw9goPM|94qO6xrhTwo ztcl<2^=iW~bg5MO-fT8|40;APL0-d7LhhSRrBWX$AA_u+Bd}c#fkL71X)*`NgRu|b zEI0`*K}RcxC)8z4&&{D)t-ckv_^ce{UPzs>n{XPOgz4WRhwBVJ4`B!mkv&f4b>Gl4 zKJPjfi&_44`pA8B5+naa4$m3<2xKnr50O3Y2ApWO+uxGOq+F{>G#b_Qdi_T}pHE9W z$lmNEYT29C}>QNPXqV58Bv*6DP95*?Wf%3tMj`892F-K*dqYH!4 z3JFETxFO6#v23v-$y`)hi>2ndq7zRN^!0P6ayE~K%tDSWG|=&2fp>NukMy@tM(tW~3S0u$!7T?jaC{M*0Q8fwD1>}ODGhQ(b3UOe)RP8P(NC#YY!o20OsfrU`^(1n7fa2_cu37JRX;5G%ECi zu?Pl(GCVvigM)+8-`_7jxBi+y%mA#9;~<|E&YXLlNB7Un%*fQ#luS%aNGukUNF*X- zV`HWtR!-i(dn>p%2u&l+S&UqIbE-ot?}3&UnV+AR+1Xj4ACr@lGCn?T`r*upBM1Bz zm;-)0*_s!5f6TcjlSx@xT9So@1(}(YAI_XOa&Q%*>=Wf#inG_0V=kf2 z_JFLeu1YGE61yK(ESx#{^znl|2kZ~*1=-es7xn&>bKlt5ke}b%Wo>OuR#sL_KbDu5 zWpQzF%bc)BK+{Nb661cbWAl0R+t6-_MZ!XR`TUvCkM;F+GZys29t&qq^3_M&zgXJT z=ld+9AB@FzIkD;A#H9HR?%VO?aU-9nK0zGX?fUe?iiJHVyvNFkP5%mB$F(Y}`p5h~ z^Bow!Rl4O|);EV*Ys16bTd~%-$1F&V;XPX#G_SEI z1AmoUzl$5Wr(j=U-t+pl@%$#U=K8NOsfmz;`b!XFP`wa;nkI}yrK!MZ-pgmOq$C;u JMC_z+{0D0kA;JIv diff --git a/src/main/java/com/jme3x/jfx/cursor/proton/aero_move.cur b/src/main/java/com/jme3x/jfx/cursor/proton/aero_move.cur deleted file mode 100755 index a4b9f02e8e5c15fcd0d8b55524301107a282c3be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4286 zcmeH~%T5$Q6oz|d7{LgP0?H){;{`=UcWRW;>6M!36X;Gi#3#TNK8|mpMg>%KNeIDc z!bNusgv$WKl>gUub(*0k&@#B9$Uogxb*lbTr|Lh|I8M?@IN7Y@Wc2s?xZ|919H&oE zlj92N)vx2cQr}^zX#|p*4W#@h@BgdRiRh@%EM)vAb=nWQq(yK{Xcu~fUjIp*cKQ#h zFn421UGh;!Iyu&yN<3G6K)5Av>^p@<;UIjl+>ha&oR~1}>EySjRN{sBT;Z;8S-=P4 zQ0u*DXsb&;fO~3k(kv`2m#MLHe&1x*GclPvxa9ZdR|3~5gzv`}!em%PdxX%c^!X@FX5J#K# zoO>D**B6Z^t~Ukz=vLdv%F0TZpM8fvi*LfHwE0YRJI?OOZrZfmp2p^8X1sW79@obW zJ^MBPr`6TfFhBiXANvuZi@jSt*uq+9>LSS%WRAP#`@u!}ZxB4qt1gvj+P?gQvN>_f%6zslw_z=v?3+Qx04%@5>B zZ2TO}`9vG&iaR^9XpU_@u%9w?1#+vWZ`q6z2j=$si0w7u9QMS4Jn3@}s{OivcAJFA z*sDD#8pk>C;^6b+JKSj5(;s^g!JoyRJSiW?GO5H9*`q!30pAKoggq7O1Lsi#_^c#$ z0F94v9zy)C+Q|=n>KoCR58TnJGmab>i(B@#;4k+Wd7Lj;?p8R)BlunQ-KJl_&gNal z?s?s^jVxNzTVe}Xx7B92O#{h;SA|;Le}OOJuc}S*q`w!OQSJ$16{)dc!k90L`8HkH z{6LUUW~1=nACx}^+9*lLp5@@ z??+?7yfI(G+C-!K)>usbL-Tz`z`N)xf6Bwgl=8+DdyFY$jQQ!KG;B<6$dq$K!=>C% ezNr8G3Ib2+w42;Zjg_4p!}wy)-}%aBNBIN0(?BHv diff --git a/src/main/java/com/jme3x/jfx/cursor/proton/aero_nesw.cur b/src/main/java/com/jme3x/jfx/cursor/proton/aero_nesw.cur deleted file mode 100755 index 0a2cc628f4cf6cfe91d74879042ade1944c1d3a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4286 zcmeH}Id2nD6osG1b`lIB3nX#E5=ZP52q6Rl2{Ii8Ewn&~L<*=tsYs9L`2z$*0ZBy> zu_!1)q2Q-@Q)ayT@g2*9MhJKFib%fEmp5Z4bI!YS@0~HmGbvLj7&F1o`$=PFjWOqe zkBkp|%Wq@W_-+`(4D7QEWbiuz2l^cBuVbuPNQ0};^>Z){^RNg7I0<=}0{N0h7oj~K zfm3i9ZonYz!cAsUbjDgZ1=R~qwnE4Vm@4j3!q+@fJ8(3zjk(%^Kd%jt;}V; z4dsJ%b1LIKLrgVr1F0XE}Cb3Ku>(A)oSwa2@g;C+^GkyKMI-y zntM5P@8RK{?hD5s|KnkfztfXGnvI$b>W{>FWML$I7Z2+LJg6Ryfoei^ss2=LBswP} z4~<6S-#n-$)fe(1&Vc5%yeOB6MdYE`Y{otK%!kL+O^rGE7BS69`O%!vJxnwr53N>9 z9yXW{FQl!W)ry!8*I^09A@N`)+*e<;+wIs?LH0L>fqyH?$E?c1d`mmkJ31N$!n(aadMcGK4WWwd{s cVtvGalwVrgUgl(xlQCH9^PN>h=Nt}*KQAp+Qvd(} diff --git a/src/main/java/com/jme3x/jfx/cursor/proton/aero_ns.cur b/src/main/java/com/jme3x/jfx/cursor/proton/aero_ns.cur deleted file mode 100755 index 1bb33fc3beaaa845527eb40e7d14ee59b5257ee7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4286 zcmeH}O;1xn6o%*C+ahX91yKrWib04b#+_dQr8`aZAGma5{1f3AGG$qZ=9iKPeA+_zo#oTtoAy0=p)6RS5%-l1_n9u}fdD)l}f3MFObI}-c9q2Mu zV3bc|UNLrJULz1Pn~2g@|BuUZ2%Ux*D5b5Q)t|NH5jYDAP=VF7)wB9Fo|S3t!dxzV zQqG6lGg0uI=XJOXI`)fDfGm7)+E1nZb${P35uT?A%cp*1(^0G&O~Ux{eF08o6V+e zG#Vp);A{6`1+;$O`frw|A}h29@`^vjz(EX=(KLDSm`%k&0jP7UY z59FUajIDz5-x=_I|0$=mK!ssoh&^*ygO05Lz#|Ezn@>AU=&#=_MAb6M#B zs{NGgkf}e_*EvugRvz>ke`3B)4Bid;;Iz{^NO#Z@=$v@Je+GT%(|&>8Ew~K2d%f;G z^Bo&;-f(fipY2i2)T*8VP8`y(aZqW?c}ztQiHDu3ro?2!EdBj#rI diff --git a/src/main/java/com/jme3x/jfx/cursor/proton/aero_nwse.cur b/src/main/java/com/jme3x/jfx/cursor/proton/aero_nwse.cur deleted file mode 100755 index 2d7ac4dc4747c655ce9f6fcfb30fe1adb9b2e87f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4286 zcmeH}OKTHR7=}+K6I(AeX=~fmTT>CdR8(Au7^L$P`~el+>Oz;&m0c^Yy73o?8>K6Y zF2rp&{*Bxq1X4#sOpnjo&Iuu?XgITxeC5eWGL!Rs=k`sF2~5V6O2*{*ds8rG-WYQc z_{v1URbGwR;MzFGGw`3zK*+cb!Qq6XNjpiKgDj*K>i-DLz#=R`3C=E?zgR0OYZm6Vemv=InWvO z6@7QR-FEKBbiOhZ26yEquT4HLz$_dC)u(?A)eKkLbk0@J`tCT62i=#rb_(<_fX1qO z)#}`j;&ydS`&MJn92Qyc`&#c#r!(wU?bCg}Liwvd)wK(7nYn$4d#l^+{>rTy=Pfwb zFSU;OY-Wv4%Y|%aU3;w8>!t42AaL(~+1c5zV~Km)5;|jie#$MX?V1~}Ykp5qGGrskZ2R z>)G!;hW*OJ<$z2zRdr40BdzE93*`WMuJ_^my~3$_u6i(PUE`;J6&jo7_c-K1dtI&e zoYsAmy2j7OF`j|(47l3%`*wp%;&X!D8*BF_t^KiN?e|q{ThHuXiLWw{g^8rqd-zlQ E1YG}7?EnA( diff --git a/src/main/java/com/jme3x/jfx/cursor/proton/aero_pen.cur b/src/main/java/com/jme3x/jfx/cursor/proton/aero_pen.cur deleted file mode 100755 index 79e63a81f05ac4abb62fe4ce36985581a6f2adfb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4286 zcmeH}&rTCj6o>CjX#tUcDhNbrsR>k4X)&5eVuXb+U=&>$(`aHeMiX7S03SgYzJhGj z#20{Q!k=hZ7~{q!XjDYqxaP|GcHU|@-d}%I^Udg@0>fvxW+Mwgek^M zhcVrJNJ_M0pk9Ihr~)pzG(gltpY`3p2)UY|9rnULP?v26jfEM? zcNcWQ01SI1Icf{gSXlQUcS~Eu$@E0s1$fmOajx^-1RR4yum>6;=$SGe=}d@*m|efQSQQvVq41hhh}v8CG*%3JQT`fCmLfu4a{Vq3TTzPqIUrw|T- z`a!G)`Cq%e^`FM6+_m;2Rr)L3{yJCAit@ZY_XxfNpn2Cds)-7B>00}?_T{&G_0z|n z-gAEyQ3mAJGgochw{$D#?_bw!Zt`qC-PiM4^G*MG*&cB&;u{RxEx+8^)ZiWZZce?g zv%x)sSA9b}^4`yfK?YqjKBe$TOvh;vxEZ&P#S9fn)?5>xJr^Yg`izB${Q z^F5jxy3M%yNmy>v)!+``fBs=*rP#|^XYa)E^zb#jdal&V^nMj&&AHrW;GUKH%7w`{ zm(QPjJC+&AC6mb`jLNGXu013aH`g`YQMaFan4=D-`B&>&?`}Ho2EAK`8vcCm{1~@( qquttdD8LVR4|6aLCT=&(xLr3>wqU$relj->Q=DS0y$6jj3%>vXTKk{? diff --git a/src/main/java/com/jme3x/jfx/cursor/proton/aero_text.cur b/src/main/java/com/jme3x/jfx/cursor/proton/aero_text.cur deleted file mode 100755 index c97aae0a0c2437083d92d55dca0c03233027cd2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4286 zcmeH}TT22#6vwA6yIOXkvKv&C6jV=LslabmAE$58{Q_3fi}ct_njnG?B8WKs{^5YE z5k2fCfk%GsI)n2+bLQ+hYm8^Q%;KUkF+OLb#!MMw)_@_C1ZMd*=9IaPbt3SOBjDkC z5A?wR4EY%3cR%z(H*`Ue7GW`IjKeg{!$K2t-0Sfh1NkRkgEXx<0n4xnJ8%Gdjq5ho z4OjyCs8|GMGZF6suHzB!9#Yd0@7WJx@?iz!XW;s;nT#zI3O1k5+gvVZv)SwyFX^bY>w z0Jp)L@}O8ODh}H75hxGcxd$)kTM_-MQmG{U6jS@4b64K~Ntcs;xm<3mex*`rtA4dw zZL5B*R%@$%yaFgVf8=NmN>fi()ZP$UFKFn^-p~= ztp1l!-T6j8iKcp?dOYg991N@fDF;VD?^!x$hibq2u5vHb{>SqOw+N1&yU_y^u%);ek@ M*8UdvA6^}R$W{U9rXJ~+ytvhs_FgG$OkY+=-g zE@Y!JG^C5ywq|KYS;LxTwurY2vFRwCn?C)YwKo{u*erA_8vJB~LAoC$@L}*JU5}mIns^plM>%4QPgX`Fbn z-C1b6LNv7(Rqcaz8?^0#KInAPkJtS~SzCkp$w+4a*`s0Fp;Dp}#J5qC3rSVg3(Xej zHF09%Q@}F0TINqnyUadc|F`yCE-&xcagWo|telo$mTYuxm z(v+N>s)5|xTU=Op2V<}0qeq*$yZgu5vL_JUfa`LwLy?ZO{g@p}#|(!vAb`{9LEamb*%6~Q-nHxQ%ec513aZL?a0-xfXRvpI*sQFJCyR=1`-_Vk zxw!ZqXa+6dA!xPX$+*cWCB;-3Hj diff --git a/src/main/java/com/jme3x/jfx/cursor/proton/aero_up.cur b/src/main/java/com/jme3x/jfx/cursor/proton/aero_up.cur deleted file mode 100755 index f3cf782f7d9e5dd5f3b8add122928b3700246dfc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4286 zcmeH}+e!jK7{|x;(9!HfnRGBZP!K^E9iSpFdxu^idWm|R-Xe@3>GTX;lqQJeg%~1E zzdy7g+D)*B8$b9tyF0qSnQv$3(-_A@Og3vw%EZj|xG^)vm<`~P$pO858goToKl&Ny zXTXyTINT)$i4LM1M<9rZBN+z0)hMt*J`!of99P(hC^`oz)_C8uT=} z$I#(EN3;#|kOWV2&;5RbxgNQBU_6CXG;&7gIxK+dzt*X*;f`TC=A0tZ`!)@MxH~4M rc@BX7^QrZH-Z=W_ diff --git a/src/main/java/com/jme3x/jfx/cursor/proton/aero_working.ani b/src/main/java/com/jme3x/jfx/cursor/proton/aero_working.ani deleted file mode 100755 index bdfc70341a028136300bd66d8c512e744ba01f78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77360 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 You can - * manage the wrapped SimpleApplication by calling enqueue (by example to add/remove AppState, Node, - * Light, to change the AppSettings...).

See TestDisplayInImageView.java for sample usage.

- * The usage of the class is optional, it can avoid some pitfall in the configuration. If you want a - * better control, I suggest you to browse the source of this class to see sample of configuration - * and usage of SceneProcessorCopyToImage. - * - * @author davidB - * @TODO auto-stop when the ImageView is removed from JavaFX Stage - */ -public class JmeForImageView { - - private static SimpleApplication makeJmeApplication(int framerate) { - AppSettings settings = new AppSettings(true); - - // important to use those settings - settings.setFullscreen(false); - settings.setUseInput(false); - settings.setFrameRate(Math.max(1, Math.min(60, framerate))); - settings.setCustomRenderer(com.jme3x.jfx.injfx.JmeContextOffscreenSurface.class); - - SimpleApplication app = new SimpleApplication() { - @Override - public void simpleInitApp() { - // to prevent a NPE (due to setUseInput(null)) on Application.stop() - getStateManager().detach(getStateManager().getState(DebugKeysAppState.class)); - } - }; - app.setSettings(settings); - app.setShowSettings(false); - return app; - } - - private SimpleApplication jmeApp0; - private SceneProcessorCopyToImageView jmeAppDisplayBinder = new SceneProcessorCopyToImageView(); - - /** - * Bind the wrapped SimpleApplication to an imageView.

  • Only one imageView can be - * binded.
  • Only jmeApp.getViewPort(), jmeApp.getGuiViewPort() are binded
- * - * @param imageView destination - * @return Future when bind is done (async) - */ - public Future bind(ImageView imageView) { - return enqueue((jmeApp) -> { - jmeAppDisplayBinder.bind(imageView, jmeApp); - return true; - }); - } - - /** - * Enqueue action to apply in Jme's Thread Action can be add/remove AppState, Node, Light, - * change the AppSettings.... - * - * @param f(jmeApp) the action to apply - */ - public Future enqueue(Function f) { - SimpleApplication jmeApp = findOrCreate(); - return jmeApp.enqueue(() -> { - return f.apply(jmeApp); - }); - } - - /** - * Lazy creation of the wrapped SimpleApplication. - */ - private SimpleApplication findOrCreate() { - if (jmeApp0 == null) { - jmeApp0 = makeJmeApplication(30); - jmeApp0.start(); - } - return jmeApp0; - } - - public void stop(boolean waitFor) { - if (jmeApp0 != null) { - try { - unbind().get(); - } catch (Exception exc) { - //TODO - exc.printStackTrace(); - } - jmeApp0.stop(waitFor); - } - } - - public Future unbind() { - return enqueue((jmeApp) -> { - jmeAppDisplayBinder.unbind(); - return true; - }); - } -} diff --git a/src/main/java/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java b/src/main/java/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java deleted file mode 100644 index c9a71b5..0000000 --- a/src/main/java/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java +++ /dev/null @@ -1,204 +0,0 @@ -package com.jme3x.jfx.injfx; - -import com.jme3.app.Application; -import com.jme3.post.SceneProcessor; -import com.jme3.renderer.RenderManager; -import com.jme3.renderer.ViewPort; -import com.jme3.renderer.queue.RenderQueue; -import com.jme3.texture.FrameBuffer; -import com.jme3.texture.Image.Format; -import com.jme3.util.BufferUtils; - -import java.nio.ByteBuffer; -import java.util.List; -import java.util.concurrent.atomic.AtomicBoolean; - -import javafx.beans.value.ChangeListener; -import javafx.scene.image.ImageView; -import javafx.scene.image.PixelFormat; -import javafx.scene.image.WritableImage; - -//https://github.com/caprica/vlcj-javafx/blob/master/src/test/java/uk/co/caprica/vlcj/javafx/test/JavaFXDirectRenderingTest.java -//http://stackoverflow.com/questions/15951284/javafx-image-resizing -//http://hub.jmonkeyengine.org/forum/topic/offscreen-rendering-problem/ -//TODO manage suspend/resume (eg when image/stage is hidden) -public class SceneProcessorCopyToImageView implements SceneProcessor { - - private RenderManager rm; - private ViewPort latestViewPorts; - private int askWidth = 1; - private int askHeight = 1; - private boolean askFixAspect = true; - private TransfertImage timage; - private AtomicBoolean reshapeNeeded = new AtomicBoolean(true); - - private ImageView imgView; - private ChangeListener wlistener = (w, o, n) -> { - componentResized(n.intValue(), (int) this.imgView.getFitHeight(), this.imgView.preserveRatioProperty().get()); - }; - private ChangeListener hlistener = (w, o, n) -> { - componentResized((int) this.imgView.getFitWidth(), n.intValue(), this.imgView.preserveRatioProperty().get()); - }; - private ChangeListener rlistener = (w, o, n) -> { - componentResized((int) this.imgView.getFitWidth(), (int) this.imgView.getFitHeight(), n.booleanValue()); - }; - - public void bind(ImageView view, Application jmeApp) { - unbind(); - - if (jmeApp != null) { - List vps = jmeApp.getRenderManager().getPostViews(); - latestViewPorts = vps.get(vps.size() - 1); - latestViewPorts.addProcessor(this); - } - - FxPlatformExecutor.runOnFxApplication(() -> { - imgView = view; - if (imgView != null) { - imgView.fitWidthProperty().addListener(wlistener); - imgView.fitHeightProperty().addListener(hlistener); - imgView.preserveRatioProperty().addListener(rlistener); - componentResized((int) imgView.getFitWidth(), (int) imgView.getFitHeight(), imgView.isPreserveRatio()); - imgView.setScaleY(-1.0); - } - }); - } - - @Override - public void cleanup() { - if (timage != null) { - timage.dispose(); - timage = null; - } - } - - public void componentResized(int w, int h, boolean fixAspect) { - int newWidth2 = Math.max(w, 1); - int newHeight2 = Math.max(h, 1); - if (askWidth != newWidth2 || askWidth != newHeight2 || askFixAspect != fixAspect) { - askWidth = newWidth2; - askHeight = newHeight2; - askFixAspect = fixAspect; - reshapeNeeded.set(true); - } - } - - @Override - public void initialize(RenderManager rm, ViewPort vp) { - if (this.rm == null) { - // First time called in OGL thread - this.rm = rm; - } - } - - @Override - public boolean isInitialized() { - return timage != null; - } - - @Override - public void postFrame(FrameBuffer out) { - if (imgView != null && timage != null) { - // if (out != timage.fb){ - // throw new IllegalStateException("Why did you change the output framebuffer? " + out + " != " + timage.fb); - // } - timage.copyFrameBufferToImage(rm, imgView); - } - // for the next frame - if (reshapeNeeded.getAndSet(false)) { - timage = reshapeInThread(askWidth, askHeight, askFixAspect); - //TODO dispose previous timage ASAP (when no longer used in JavafFX thread) - } - } - - @Override - public void postQueue(RenderQueue rq) { - } - - @Override - public void preFrame(float tpf) { - } - - @Override - public void reshape(ViewPort vp, int w, int h) { - } - - private TransfertImage reshapeInThread(int width0, int height0, boolean fixAspect) { - TransfertImage ti = new TransfertImage(width0, height0); - - rm.getRenderer().setMainFrameBufferOverride(ti.fb); - rm.notifyReshape(ti.width, ti.height); - - // for (ViewPort vp : viewPorts){ - // vp.getCamera().resize(ti.width, ti.height, fixAspect); - // - // // NOTE: Hack alert. This is done ONLY for custom framebuffers. - // // Main framebuffer should use RenderManager.notifyReshape(). - // for (SceneProcessor sp : vp.getProcessors()){ - // sp.reshape(vp, ti.width, ti.height); - // } - // } - return ti; - } - - public void unbind() { - - if (latestViewPorts != null) { - latestViewPorts.removeProcessor(this); // call this.cleanup() - latestViewPorts = null; - } - - FxPlatformExecutor.runOnFxApplication(() -> { - if (imgView != null) { - imgView.fitWidthProperty().removeListener(wlistener); - imgView.fitHeightProperty().removeListener(hlistener); - } - }); - } - - static class TransfertImage { - public final int width; - public final int height; - public final FrameBuffer fb; - public final ByteBuffer byteBuf; - public final WritableImage img; - private ImageView lastIv = null; - - TransfertImage(int width, int height) { - this.width = width; - this.height = height; - - fb = new FrameBuffer(width, height, 1); - fb.setDepthBuffer(Format.Depth); - fb.setColorBuffer(Format.RGB8); - - byteBuf = BufferUtils.createByteBuffer(width * height * 4); - - img = new WritableImage(width, height); - } - - /** - * SHOULD run in JME'Display thread - */ - void copyFrameBufferToImage(RenderManager rm, ImageView iv) { - synchronized (byteBuf) { - // Convert screenshot. - byteBuf.clear(); - rm.getRenderer().readFrameBuffer(fb, byteBuf); - } - FxPlatformExecutor.runOnFxApplication(() -> { - synchronized (byteBuf) { - if (lastIv != iv) { - lastIv = iv; - lastIv.setImage(img); - } - img.getPixelWriter().setPixels(0, 0, width, height, PixelFormat.getByteBgraInstance(), byteBuf, width * 4); - } - }); - } - - void dispose() { - fb.dispose(); - } - } -} \ No newline at end of file diff --git a/src/main/java/com/jme3x/jfx/listener/PaintListener.java b/src/main/java/com/jme3x/jfx/listener/PaintListener.java deleted file mode 100755 index 52fc1742..0000000 --- a/src/main/java/com/jme3x/jfx/listener/PaintListener.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.jme3x.jfx.listener; - -/** - * Реализация слушателя отрисовки интерфейса. - * - * @author Ronn - */ -public interface PaintListener { - - /** - * Обработка действий после отрисовки. - */ - public void postPaint(); - - /** - * Обработка действий перед отрисовкой. - */ - public void prePaint(); -} diff --git a/src/main/java/com/jme3x/jfx/media/TextureMovie.java b/src/main/java/com/jme3x/jfx/media/TextureMovie.java deleted file mode 100644 index ab42c7b..0000000 --- a/src/main/java/com/jme3x/jfx/media/TextureMovie.java +++ /dev/null @@ -1,239 +0,0 @@ -package com.jme3x.jfx.media; - -import com.jme3.math.ColorRGBA; -import com.jme3.math.Vector2f; -import com.jme3.texture.Image; -import com.jme3.texture.Image.Format; -import com.jme3.texture.Texture2D; -import com.jme3.util.BufferUtils; -import com.sun.media.jfxmedia.control.VideoDataBuffer; -import com.sun.media.jfxmedia.control.VideoFormat; -import com.sun.media.jfxmedia.events.NewFrameEvent; -import com.sun.media.jfxmedia.events.VideoRendererListener; - -import java.lang.reflect.Method; -import java.nio.ByteBuffer; - -/** - * Example usage

PlatformImpl.startup(() -> {}); media = new Media("http://download.oracle.com/otndocs/products/javafx/oow2010-2.flv"); - * mp = new javafx.scene.media.MediaPlayer(media); mp.play(); tm = new TextureMovie(mp, - * LetterboxMode.VALID_LETTERBOX); tm.setLetterboxColor(ColorRGBA.Black); texture = tm.getTexture(); - *

material.setTexture("ColorMap",texture); Please be sure you do not lose reference to - * TextureMove while you need the result texture - if it ever gets garbage collected, movie can stop - * playing. - */ -public class TextureMovie { - - private static Image emptyImage = new Image(Format.ABGR8, 1, 1, BufferUtils.createByteBuffer(4)); - private final javafx.scene.media.MediaPlayer jPlayer; - private final com.sun.media.jfxmedia.MediaPlayer cPlayer; - private final LetterboxMode mode; - private final ColorRGBA letterboxColor = ColorRGBA.Red.clone(); - private final Vector2f upperLeftCorner = new Vector2f(0, 0); - private final Vector2f bottomRightCorner = new Vector2f(1, 1); - private final VideoRendererListener vrListener; - private float aspectRatio = 1.0f; - private Texture2D texture; - - public TextureMovie(javafx.scene.media.MediaPlayer mediaPlayer) { - this(mediaPlayer, LetterboxMode.VALID_LETTERBOX); - } - - public TextureMovie(javafx.scene.media.MediaPlayer mediaPlayer, ColorRGBA letterboxColor) { - this(mediaPlayer, LetterboxMode.VALID_LETTERBOX); - setLetterboxColor(letterboxColor); - } - - public TextureMovie(javafx.scene.media.MediaPlayer mediaPlayer, LetterboxMode mode) { - this.jPlayer = mediaPlayer; - this.mode = mode; - - try { - Method m1 = jPlayer.getClass().getDeclaredMethod("retrieveJfxPlayer"); - m1.setAccessible(true); - - while (true) { - com.sun.media.jfxmedia.MediaPlayer player = (com.sun.media.jfxmedia.MediaPlayer) m1.invoke(jPlayer); - if (player != null) { - cPlayer = player; - break; - } - Thread.sleep(50); - } - - } catch (Exception exc) { - throw new RuntimeException(exc); - } - - vrListener = createVrListener(); - } - - private VideoRendererListener createVrListener() { - return new VideoRendererListener() { - - @Override - public void releaseVideoFrames() { - // TODO Auto-generated method stub - - } - - @Override - public void videoFrameUpdated(NewFrameEvent event) { - try { - VideoDataBuffer frame = jPlayer.impl_getLatestFrame(); - if (frame == null) { - return; - } - VideoDataBuffer argbFrame = frame.convertToFormat(VideoFormat.ARGB); - frame.releaseFrame(); - - int expectedWidth, expectedHeight; - int xOffset; - int xSize; - int yOffset; - int ySize; - - switch (mode) { - case RAW_SQUARE: - xOffset = 0; - yOffset = 0; - expectedWidth = argbFrame.getEncodedWidth(); - expectedHeight = argbFrame.getEncodedHeight(); - xSize = expectedWidth; - ySize = expectedHeight; - break; - case VALID_SQUARE: - xOffset = 0; - yOffset = 0; - expectedWidth = argbFrame.getWidth(); - expectedHeight = argbFrame.getHeight(); - xSize = expectedWidth; - ySize = expectedHeight; - break; - case VALID_LETTERBOX: - default: - expectedWidth = Math.max(argbFrame.getWidth(), argbFrame.getHeight()); - expectedHeight = expectedWidth; - - if (argbFrame.getWidth() >= argbFrame.getHeight()) { - xOffset = 0; - xSize = expectedWidth; - ySize = argbFrame.getHeight(); - yOffset = (xSize - ySize) / 2; - } else { - yOffset = 0; - ySize = expectedHeight; - xSize = argbFrame.getWidth(); - xOffset = (ySize - xSize) / 2; - } - - break; - - } - - aspectRatio = argbFrame.getWidth() / argbFrame.getHeight(); - - upperLeftCorner.set(xOffset / (float) expectedWidth, yOffset / (float) expectedHeight); - bottomRightCorner.set((xOffset + argbFrame.getWidth()) / (float) expectedWidth, (yOffset + argbFrame.getHeight()) / (float) expectedHeight); - - Image image = texture.getImage(); - - if (image.getWidth() != expectedWidth || image.getHeight() != expectedHeight) { - ByteBuffer bb = BufferUtils.createByteBuffer(expectedHeight * expectedWidth * 4); - - for (int i = 0; i < bb.limit(); i += 4) { - bb.put(i, (byte) (letterboxColor.a * 255)); - bb.put(i + 1, (byte) (letterboxColor.b * 255)); - bb.put(i + 2, (byte) (letterboxColor.g * 255)); - bb.put(i + 3, (byte) (letterboxColor.r * 255)); - } - image = new Image(Format.ABGR8, expectedWidth, expectedHeight, bb); - texture.setImage(image); - } - - - ByteBuffer src = argbFrame.getBufferForPlane(0); - ByteBuffer bb = image.getData(0); - bb.clear(); - - for (int y = 0; y < ySize; y++) { - int ty = expectedHeight - (y + yOffset) - 1; - bb.position(4 * (ty * xSize + xOffset)); - src.position(4 * (y * argbFrame.getEncodedWidth())).limit(4 * (y * argbFrame.getEncodedWidth() + xSize)); - bb.put(src); - src.limit(src.capacity()); - } - - bb.position(bb.limit()); - bb.flip(); - - argbFrame.releaseFrame(); - image.setUpdateNeeded(); - } catch (Exception exc) { - - exc.printStackTrace(); - System.exit(0); - } - } - }; - } - - /** - * @return aspect ratio of played movie (width/height) - for widescreen movies it will be in - * range of 1.8-2.9 - */ - public float getAspectRatio() { - return aspectRatio; - } - - /** - * Corner texture coordinates of valid movie area - */ - public Vector2f getBottomRightCorner() { - return bottomRightCorner; - } - - public Texture2D getTexture() { - if (texture == null) { - texture = new Texture2D(emptyImage); - cPlayer.getVideoRenderControl().addVideoRendererListener(vrListener); - } - return texture; - } - - /** - * Corner texture coordinates of valid movie area - */ - public Vector2f getUpperLeftCorner() { - return upperLeftCorner; - } - - /** - * Sets the color which should be used for letterbox fill. It is annoying red by default to help - * with debugging. - */ - public void setLetterboxColor(ColorRGBA letterboxColor) { - this.letterboxColor.set(letterboxColor); - } - - public enum LetterboxMode { - /** - * This mode uses entire texture including some garbage data on right and bottom side; - * always utilize together with corner data to cut the texture and aspectRatio to size it - * properly - */ - RAW_SQUARE, - /** - * THis mode uses entire texture, but fills it only with valid data. Proper texture - * coordinates will be always 0-1, but you should use aspectRatio for it to look proper - */ - VALID_SQUARE, - /** - * This is cinema-like presentation, with borders on shorter sides (mostly top and down). - * Displaying it on square object will make it look proper aspectRatio-wise. You can utilize - * corner data to display only interesting part of the movie. - */ - VALID_LETTERBOX - } - -} diff --git a/src/test/java/com/jme3x/jfx/FalseColorGui.frag b/src/test/java/com/jme3x/jfx/FalseColorGui.frag deleted file mode 100755 index c16ea0a..0000000 --- a/src/test/java/com/jme3x/jfx/FalseColorGui.frag +++ /dev/null @@ -1,25 +0,0 @@ -vec2 resolution = vec2(1.0,1.0); - -uniform float g_Time; -uniform sampler2D m_Texture; -varying vec2 texCoord; - -float rand(vec2 co) { - return fract(sin(dot(co.xy ,vec2(12.9898,708.233))) * 403758.5453); -} - -void main() { - vec2 q1 = texCoord.xy / resolution.xy; - vec2 uv = 0.5 + (q1-0.5)*(0.98 + 0.006);//*sin(0.9)); - vec3 col = texture2D(m_Texture,texCoord).xyz; - - col = clamp(col*0.5+0.5*col*col*1.2,0.0,1.0); - col *= 0.6 + 0.4*16.0*uv.x*uv.y*(1.0-uv.x)*(1.0-uv.y); - col *= vec3(0.9,1.0,0.7); - col *= 0.8+0.2*sin(10.0*g_Time+uv.y*512.0); - col *= 1.0-0.9*rand(vec2(g_Time*100.0, tan(g_Time))); - float comp = smoothstep( 0.2, 0.7, sin(g_Time) ); - - gl_FragColor = vec4(col,texture2D(m_Texture,texCoord).w); -} - diff --git a/src/test/java/com/jme3x/jfx/FalseColorGui.j3md b/src/test/java/com/jme3x/jfx/FalseColorGui.j3md deleted file mode 100755 index 768e2c6..0000000 --- a/src/test/java/com/jme3x/jfx/FalseColorGui.j3md +++ /dev/null @@ -1,23 +0,0 @@ -MaterialDef Default GUI { - - MaterialParameters { - Texture2D Texture - } - - Technique { - VertexShader GLSL100: com/jme3x/jfx/FalseColorGui.vert - FragmentShader GLSL100: com/jme3x/jfx/FalseColorGui.frag - - WorldParameters { - WorldViewProjectionMatrix - Time - } - - Defines { - } - } - - Technique { - } - -} \ No newline at end of file diff --git a/src/test/java/com/jme3x/jfx/FalseColorGui.vert b/src/test/java/com/jme3x/jfx/FalseColorGui.vert deleted file mode 100755 index b5442ce..0000000 --- a/src/test/java/com/jme3x/jfx/FalseColorGui.vert +++ /dev/null @@ -1,15 +0,0 @@ -uniform mat4 g_WorldViewProjectionMatrix; -uniform vec4 m_Color; - -attribute vec3 inPosition; - -attribute vec2 inTexCoord; -varying vec2 texCoord; - -varying vec4 color; - -void main() { - gl_Position = g_WorldViewProjectionMatrix * vec4(inPosition, 1.0); - texCoord = inTexCoord; - color = m_Color; -} \ No newline at end of file diff --git a/src/test/java/com/jme3x/jfx/TestDisplayInImageView.fxml b/src/test/java/com/jme3x/jfx/TestDisplayInImageView.fxml deleted file mode 100644 index 13f0506..0000000 --- a/src/test/java/com/jme3x/jfx/TestDisplayInImageView.fxml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - -
- diff --git a/src/test/java/com/jme3x/jfx/TestDisplayInImageView.java b/src/test/java/com/jme3x/jfx/TestDisplayInImageView.java deleted file mode 100644 index c44519a..0000000 --- a/src/test/java/com/jme3x/jfx/TestDisplayInImageView.java +++ /dev/null @@ -1,193 +0,0 @@ -package com.jme3x.jfx; - -import com.jme3.app.SimpleApplication; -import com.jme3.asset.AssetManager; -import com.jme3.light.DirectionalLight; -import com.jme3.material.Material; -import com.jme3.math.ColorRGBA; -import com.jme3.math.Vector3f; -import com.jme3.renderer.queue.RenderQueue.Bucket; -import com.jme3.scene.Geometry; -import com.jme3.scene.Node; -import com.jme3.scene.shape.Box; -import com.jme3.scene.shape.Sphere; -import com.jme3.system.AppSettings; -import com.jme3.util.TangentBinormalGenerator; -import com.jme3x.jfx.injfx.JmeForImageView; - -import java.net.URL; - -import javafx.application.Application; -import javafx.application.Platform; -import javafx.event.EventHandler; -import javafx.fxml.FXML; -import javafx.fxml.FXMLLoader; -import javafx.fxml.JavaFXBuilderFactory; -import javafx.scene.Scene; -import javafx.scene.control.CheckBox; -import javafx.scene.control.ColorPicker; -import javafx.scene.control.Label; -import javafx.scene.control.Slider; -import javafx.scene.image.ImageView; -import javafx.scene.layout.Pane; -import javafx.scene.layout.Region; -import javafx.scene.paint.Color; -import javafx.stage.Stage; -import javafx.stage.WindowEvent; - -public class TestDisplayInImageView extends Application { - - static void bindOtherControls(JmeForImageView jme, Controller controller) { - controller.bgColor.valueProperty().addListener((ov, o, n) -> { - jme.enqueue((jmeApp) -> { - jmeApp.getViewPort().setBackgroundColor(new ColorRGBA((float) n.getRed(), (float) n.getGreen(), (float) n.getBlue(), (float) n.getOpacity())); - return null; - }); - }); - controller.bgColor.setValue(Color.LIGHTGRAY); - - controller.showStats.selectedProperty().addListener((ov, o, n) -> { - jme.enqueue((jmeApp) -> { - jmeApp.setDisplayStatView(n); - jmeApp.setDisplayFps(n); - return null; - }); - }); - controller.showStats.setSelected(!controller.showStats.isSelected()); - - controller.fpsReq.valueProperty().addListener((ov, o, n) -> { - jme.enqueue((jmeApp) -> { - AppSettings settings = new AppSettings(false); - settings.setFullscreen(false); - settings.setUseInput(false); - settings.setFrameRate(n.intValue()); - settings.setCustomRenderer(com.jme3x.jfx.injfx.JmeContextOffscreenSurface.class); - jmeApp.setSettings(settings); - jmeApp.restart(); - return null; - }); - }); - controller.fpsReq.setValue(30); - } - - /** - * Create a similar scene to Tutorial "Hello Material" but without texture - * http://hub.jmonkeyengine.org/wiki/doku.php/jme3:beginner:hello_material - * - * @param jmeApp the application where to create a Scene - */ - static boolean createScene(SimpleApplication jmeApp) { - Node rootNode = jmeApp.getRootNode(); - AssetManager assetManager = jmeApp.getAssetManager(); - - /** A simple textured cube -- in good MIP map quality. */ - Box cube1Mesh = new Box(1f, 1f, 1f); - Geometry cube1Geo = new Geometry("My Textured Box", cube1Mesh); - cube1Geo.setLocalTranslation(new Vector3f(-3f, 1.1f, 0f)); - Material cube1Mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); - cube1Mat.setColor("Color", ColorRGBA.Blue); - cube1Geo.setMaterial(cube1Mat); - rootNode.attachChild(cube1Geo); - - /** A translucent/transparent texture, similar to a window frame. */ - Box cube2Mesh = new Box(1f, 1f, 0.01f); - Geometry cube2Geo = new Geometry("window frame", cube2Mesh); - Material cube2Mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); - cube2Mat.setColor("Color", ColorRGBA.Brown); - cube2Geo.setQueueBucket(Bucket.Transparent); - cube2Geo.setMaterial(cube2Mat); - rootNode.attachChild(cube2Geo); - - /** A bumpy rock with a shiny light effect.*/ - Sphere sphereMesh = new Sphere(32, 32, 2f); - Geometry sphereGeo = new Geometry("Shiny rock", sphereMesh); - sphereMesh.setTextureMode(Sphere.TextureMode.Projected); // better quality on spheres - TangentBinormalGenerator.generate(sphereMesh); // for lighting effect - Material sphereMat = new Material(assetManager, "Common/MatDefs/Light/Lighting.j3md"); - sphereMat.setBoolean("UseMaterialColors", true); - sphereMat.setColor("Diffuse", ColorRGBA.Pink); - sphereMat.setColor("Specular", ColorRGBA.White); - sphereMat.setFloat("Shininess", 64f); // [0,128] - sphereGeo.setMaterial(sphereMat); - sphereGeo.setLocalTranslation(0, 2, -2); // Move it a bit - sphereGeo.rotate(1.6f, 0, 0); // Rotate it a bit - rootNode.attachChild(sphereGeo); - - /** Must add a light to make the lit object visible! */ - DirectionalLight sun = new DirectionalLight(); - sun.setDirection(new Vector3f(1, 0, -2).normalizeLocal()); - sun.setColor(ColorRGBA.White); - rootNode.addLight(sun); - return true; - } - - public static void main(String[] args) { - launch(args); - } - - @Override - public void start(Stage stage) throws Exception { - final FXMLLoader fxmlLoader = new FXMLLoader(); - final URL location = Thread.currentThread().getContextClassLoader().getResource(this.getClass().getCanonicalName().replace('.', '/') + ".fxml"); - fxmlLoader.setLocation(location); - //final ResourceBundle defaultRessources = fxmlLoader.getResources(); - //fxmlLoader.setResources(this.addCustomRessources(defaultRessources)); - fxmlLoader.setBuilderFactory(new JavaFXBuilderFactory()); - final Region root = fxmlLoader.load(location.openStream()); - Controller controller = fxmlLoader.getController(); - - JmeForImageView jme = new JmeForImageView(); - jme.bind(controller.image); - - stage.setOnCloseRequest(new EventHandler() { - public void handle(WindowEvent e) { - jme.stop(true); - } - }); - - bindOtherControls(jme, controller); - jme.enqueue(TestDisplayInImageView::createScene); - - Scene scene = new Scene(root, 600, 400); - stage.setTitle(this.getClass().getSimpleName()); - stage.setScene(scene); - stage.show(); - } - - @Override - public void stop() throws Exception { - Platform.exit(); - } - - public static class Controller { - - @FXML - public ImageView image; - - @FXML - public ColorPicker bgColor; - - @FXML - public CheckBox showStats; - - @FXML - private Label fpsLabel; - - @FXML - public Slider fpsReq; - - @FXML - public void initialize() { - //To resize image when parent is resize - //image is wrapped into a "VBOX" or "HBOX" to allow resize smaller - //see http://stackoverflow.com/questions/15951284/javafx-image-resizing - Pane p = (Pane) image.getParent(); - image.fitHeightProperty().bind(p.heightProperty()); - image.fitWidthProperty().bind(p.widthProperty()); - - fpsReq.valueProperty().addListener((ov, o, n) -> fpsLabel.setText(String.format("fps : %4d", n.intValue()))); - image.setPreserveRatio(false); - } - - } -} diff --git a/src/test/java/com/jme3x/jfx/TestMovie.java b/src/test/java/com/jme3x/jfx/TestMovie.java deleted file mode 100644 index 8f8427a..0000000 --- a/src/test/java/com/jme3x/jfx/TestMovie.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.jme3x.jfx; - -import com.jme3.app.SimpleApplication; -import com.jme3.material.Material; -import com.jme3.math.ColorRGBA; -import com.jme3.math.Vector3f; -import com.jme3.scene.Geometry; -import com.jme3.scene.shape.Quad; -import com.jme3x.jfx.media.TextureMovie; -import com.jme3x.jfx.media.TextureMovie.LetterboxMode; -import com.sun.javafx.application.PlatformImpl; - -import javafx.beans.value.ChangeListener; -import javafx.beans.value.ObservableValue; -import javafx.scene.media.Media; -import javafx.scene.media.MediaException; -import javafx.scene.media.MediaPlayer; - -public class TestMovie extends SimpleApplication { - - public static void main(final String[] args) { - - PlatformImpl.startup(() -> { - }); - - final TestMovie app = new TestMovie(); - app.start(); - } - - private TextureMovie textureMovie; - private MediaPlayer mp; - - @Override - public void destroy() { - super.destroy(); - this.mp.stop(); - PlatformImpl.exit(); - } - - @Override - public void simpleInitApp() { - - final Media media = new Media("http://download.oracle.com/otndocs/products/javafx/oow2010-2.flv"); - media.errorProperty().addListener(new ChangeListener() { - - @Override - public void changed(final ObservableValue observable, final MediaException oldValue, final MediaException newValue) { - newValue.printStackTrace(); - } - }); - this.mp = new MediaPlayer(media); - this.mp.play(); - - this.textureMovie = new TextureMovie(this.mp, LetterboxMode.VALID_LETTERBOX); - this.textureMovie.setLetterboxColor(ColorRGBA.Black); - - final Geometry screen1 = new Geometry("Screen1", new Quad(20, 20)); - - final Material s1mat = new Material(this.assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); - s1mat.setTexture("ColorMap", this.textureMovie.getTexture()); - screen1.setMaterial(s1mat); - this.rootNode.attachChild(screen1); - - this.cam.setLocation(new Vector3f(10, 10, 15)); - - } - -} diff --git a/src/test/java/com/jme3x/jfx/Testcontroller.java b/src/test/java/com/jme3x/jfx/Testcontroller.java deleted file mode 100755 index c793361..0000000 --- a/src/test/java/com/jme3x/jfx/Testcontroller.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.jme3x.jfx; - -import javafx.fxml.FXML; -import javafx.scene.layout.StackPane; -import javafx.scene.web.WebView; - -public class Testcontroller { - @FXML - private StackPane rootObject; - - @FXML - private WebView website; - - @FXML - public void initialize() { - this.website.getEngine().load("http://acid3.acidtests.org/"); - } -} diff --git a/src/test/java/com/jme3x/jfx/loading_screen.fxml b/src/test/java/com/jme3x/jfx/loading_screen.fxml deleted file mode 100755 index 1800acc..0000000 --- a/src/test/java/com/jme3x/jfx/loading_screen.fxml +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - -
- -
- - -
- - - - - - - - - - - - - -
-
-
-
-
- - -
- -
-
-
- - - -
- -
- - - -
- - - - - - - - - - - -
-
diff --git a/src/test/java/com/jme3x/jfx/test.jpg b/src/test/java/com/jme3x/jfx/test.jpg deleted file mode 100644 index ceaacb6df1681cbd14d322e8c7b570fac760149b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15571 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 diff --git a/test-src/com/jme3x/jfx/TestContext.java b/test-src/com/jme3x/jfx/TestContext.java new file mode 100644 index 0000000..93875f5 --- /dev/null +++ b/test-src/com/jme3x/jfx/TestContext.java @@ -0,0 +1,54 @@ +package com.jme3x.jfx; + +import com.jme3.system.AppSettings; +import com.jme3.system.NativeLibraryLoader; +import com.jme3.system.lwjgl.LwjglDisplay; + +import rlib.logging.Logger; +import rlib.logging.LoggerManager; + +/** + * Created by ronn on 25.07.16. + */ +public class TestContext extends LwjglDisplay { + + protected static final Logger LOGGER = LoggerManager.getLogger(TestContext.class); + + /** + * Игровой поток рендера экрана. + */ + private Thread thread; + + @Override + public void create(final boolean waitFor) { + + if ("LWJGL".equals(settings.getAudioRenderer())) { + NativeLibraryLoader.loadNativeLibrary("openal-lwjgl3", true); + } + + NativeLibraryLoader.loadNativeLibrary("lwjgl3", true); + NativeLibraryLoader.loadNativeLibrary("glfw-lwjgl3", true); + NativeLibraryLoader.loadNativeLibrary("jemalloc-lwjgl3", true); + NativeLibraryLoader.loadNativeLibrary("jinput", true); + NativeLibraryLoader.loadNativeLibrary("jinput-dx8", true); + + if (created.get()) return; + + thread = new Thread(this); + thread.setPriority(Thread.MAX_PRIORITY); + thread.setName("LWJGL Renderer Thread"); + thread.start(); + + if (waitFor) waitFor(true); + } + + public Thread getThread() { + return thread; + } + + @Override + protected void createContext(final AppSettings settings) { + settings.setRenderer(AppSettings.LWJGL_OPENGL3); + super.createContext(settings); + } +} diff --git a/test-src/com/jme3x/jfx/TestJFXPanel.java b/test-src/com/jme3x/jfx/TestJFXPanel.java new file mode 100644 index 0000000..5011b4a --- /dev/null +++ b/test-src/com/jme3x/jfx/TestJFXPanel.java @@ -0,0 +1,69 @@ +package com.jme3x.jfx; + +import com.jme3.app.SimpleApplication; +import com.jme3.scene.Node; +import com.jme3.system.AppSettings; + +import javafx.scene.Group; +import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.control.TextField; +import javafx.scene.layout.VBox; +import javafx.scene.web.HTMLEditor; + +/** + * Created by ronn on 22.07.16. + */ +public class TestJFXPanel extends SimpleApplication { + + private JmeFxContainer container; + + public static void main(String[] args) { + + // фикс рендера шрифтов в FX + System.setProperty("prism.lcdtext", "false"); + System.setProperty("prism.text", "t2k"); + + // настройки для JavaFX + System.setProperty("prism.vsync", "true"); + System.setProperty("javafx.animation.fullspeed", "false"); + System.setProperty("prism.cacheshapes", "true"); + + final AppSettings settings = new AppSettings(true); + settings.setRenderer("CUSTOM" + TestContext.class.getName()); + settings.setResizable(true); + settings.setFrameRate(90); + + TestJFXPanel test = new TestJFXPanel(); + test.setSettings(settings); + test.setShowSettings(false); + test.start(); + } + + @Override + public void simpleInitApp() { + + final Node guiNode = getGuiNode(); + guiNode.detachAllChildren(); + + flyCam.setDragToRotate(true); + flyCam.setEnabled(false); + + container = JmeFxContainer.install(this, guiNode, null); + + final Button button = new Button("WEFWEWEFWEFWE"); + final TextField textField = new TextField("TextField"); + final HTMLEditor htmlEditor = new HTMLEditor(); + + final Group group = new Group(new VBox(button, textField, htmlEditor)); + final Scene scene = new Scene(group); + + container.setScene(scene); + } + + @Override + public void update() { + if(container.isNeedWriteToJME()) container.writeToJME(); + super.update(); + } +} From bc6e6bceaf9e34ddc30797e20e53437862218ff6 Mon Sep 17 00:00:00 2001 From: javasabr Date: Tue, 26 Jul 2016 18:15:11 +0300 Subject: [PATCH 03/24] fix some bugs with mouse events --- src/com/jme3x/jfx/JavaFXPicture.java | 18 ++++---- src/com/jme3x/jfx/JmeFXInputListener.java | 25 +++++----- src/com/jme3x/jfx/JmeFxContainer.java | 25 +++++----- src/com/jme3x/jfx/JmeJFXPanel.java | 11 ++++- src/com/jme3x/jfx/util/JFXEmbeddedUtils.java | 46 +++++++++++++++++-- src/com/jme3x/jfx/util/JFXPlatform.java | 2 + ...XWindowsUtils.java => JFXWindowUtils.java} | 4 +- 7 files changed, 91 insertions(+), 40 deletions(-) rename src/com/jme3x/jfx/util/{JFXWindowsUtils.java => JFXWindowUtils.java} (97%) diff --git a/src/com/jme3x/jfx/JavaFXPicture.java b/src/com/jme3x/jfx/JavaFXPicture.java index af6a5df..000d11c 100644 --- a/src/com/jme3x/jfx/JavaFXPicture.java +++ b/src/com/jme3x/jfx/JavaFXPicture.java @@ -2,7 +2,7 @@ import com.jme3.system.JmeContext; import com.jme3.ui.Picture; -import com.jme3x.jfx.util.JFXWindowsUtils; +import com.jme3x.jfx.util.JFXWindowUtils; import rlib.logging.Logger; import rlib.logging.LoggerManager; @@ -44,26 +44,26 @@ public void updateLogicalState(float tpf) { final JmeJFXPanel panel = container.getHostContainer(); if (panel == null) return; - final int currentWidth = JFXWindowsUtils.getWidth(jmeContext); - final int currentHeight = JFXWindowsUtils.getHeight(jmeContext); + final int currentWidth = JFXWindowUtils.getWidth(jmeContext); + final int currentHeight = JFXWindowUtils.getHeight(jmeContext); if (currentWidth != container.getPictureWidth() || currentHeight != container.getPictureHeight()) { container.handleResize(); } - final int originalX = JFXWindowsUtils.getX(jmeContext); - final int originalY = JFXWindowsUtils.getY(jmeContext); + final int originalX = JFXWindowUtils.getX(jmeContext); + final int originalY = JFXWindowUtils.getY(jmeContext); - final int offsetX = JFXWindowsUtils.isFullscreen(jmeContext) ? 0 : container.getWindowOffsetX(); - final int offsetY = JFXWindowsUtils.isFullscreen(jmeContext) ? 0 : container.getWindowOffsetY(); + final int offsetX = JFXWindowUtils.isFullscreen(jmeContext) ? 0 : container.getWindowOffsetX(); + final int offsetY = JFXWindowUtils.isFullscreen(jmeContext) ? 0 : container.getWindowOffsetY(); final int x = originalX + offsetX; final int y = originalY + offsetY; if (container.getOldX() != x || container.getOldY() != y) { - if(JmeFxContainer.isDebug()) { - LOGGER.debug("moved window to [original: " + originalX + ", " + originalY + " offset:" + offsetX + ", " + offsetY +"]"); + if (JmeFxContainer.isDebug()) { + LOGGER.debug("moved window to [original: " + originalX + ", " + originalY + " offset:" + offsetX + ", " + offsetY + "]"); } container.setOldX(x); diff --git a/src/com/jme3x/jfx/JmeFXInputListener.java b/src/com/jme3x/jfx/JmeFXInputListener.java index a749307..28699f6 100644 --- a/src/com/jme3x/jfx/JmeFXInputListener.java +++ b/src/com/jme3x/jfx/JmeFXInputListener.java @@ -35,6 +35,9 @@ public class JmeFXInputListener implements RawInputListener { */ private final JmeFxContainer jmeFxContainer; + /** + * Набор зажатых кнопок. + */ private final BitSet keyStateSet = new BitSet(0xFF); /** @@ -56,7 +59,6 @@ public class JmeFXInputListener implements RawInputListener { * Обработчик DnD Java FX. */ //private volatile JmeFxDNDHandler jfxdndHandler; - public JmeFXInputListener(final JmeFxContainer listensOnContainer) { this.jmeFxContainer = listensOnContainer; } @@ -67,7 +69,6 @@ public JmeFXInputListener(final JmeFxContainer listensOnContainer) { /* private JmeFxDNDHandler getJfxdndHandler() { return jfxdndHandler; }*/ - @Override public void beginInput() { final RawInputListener adapter = getEverListeningInputListenerAdapter(); @@ -102,7 +103,7 @@ private char[] getKeyCharSet() { } /** - * @return + * @return набор зажатых кнопок. */ private BitSet getKeyStateSet() { return keyStateSet; @@ -270,7 +271,7 @@ private void onMouseButtonEventImpl(final int x, final int y, final int button, final long when = System.currentTimeMillis(); final int mask = getMouseMask(); - final boolean popupTrigger = button == MouseEvent.BUTTON2; + final boolean popupTrigger = button == MouseEvent.BUTTON2 && eventId == MouseEvent.MOUSE_PRESSED; container.handleEvent(new MouseEvent(container, eventId, when, mask, x, y, 1, popupTrigger, button)); } @@ -282,31 +283,31 @@ private int getMouseMask() { int mask = 0; - if(mouseButtonState[0]) { + if (mouseButtonState[0]) { mask |= MouseEvent.BUTTON1_DOWN_MASK; } - if(mouseButtonState[1]) { + if (mouseButtonState[1]) { mask |= MouseEvent.BUTTON2_DOWN_MASK; } - if(mouseButtonState[2]) { + if (mouseButtonState[2]) { mask |= MouseEvent.BUTTON3_DOWN_MASK; } - if(keyStateSet.get(KeyEvent.VK_SHIFT)) { + if (keyStateSet.get(KeyEvent.VK_SHIFT)) { mask |= MouseEvent.SHIFT_DOWN_MASK; } - if(keyStateSet.get(KeyEvent.VK_CONTROL)) { + if (keyStateSet.get(KeyEvent.VK_CONTROL)) { mask |= MouseEvent.CTRL_DOWN_MASK; } - if(keyStateSet.get(KeyEvent.VK_ALT)) { + if (keyStateSet.get(KeyEvent.VK_ALT)) { mask |= MouseEvent.ALT_DOWN_MASK; } - if(keyStateSet.get(KeyEvent.VK_META)) { + if (keyStateSet.get(KeyEvent.VK_META)) { mask |= MouseEvent.META_DOWN_MASK; } @@ -370,7 +371,7 @@ private void onMouseMotionEventImpl(final int x, final int y, final int button, final long when = System.currentTimeMillis(); final int mask = getMouseMask(); - if(eventId == MouseEvent.MOUSE_WHEEL) { + if (eventId == MouseEvent.MOUSE_WHEEL) { container.handleEvent(new MouseWheelEvent(container, eventId, when, mask, x, y, 1, false, button, MouseWheelEvent.WHEEL_UNIT_SCROLL, wheelRotation)); } else { container.handleEvent(new MouseEvent(container, eventId, when, mask, x, y, 1, false, button)); diff --git a/src/com/jme3x/jfx/JmeFxContainer.java b/src/com/jme3x/jfx/JmeFxContainer.java index 0700e77..b033ae9 100644 --- a/src/com/jme3x/jfx/JmeFxContainer.java +++ b/src/com/jme3x/jfx/JmeFxContainer.java @@ -18,7 +18,7 @@ import com.jme3.util.BufferUtils; import com.jme3x.jfx.cursor.CursorDisplayProvider; import com.jme3x.jfx.util.JFXEmbeddedUtils; -import com.jme3x.jfx.util.JFXWindowsUtils; +import com.jme3x.jfx.util.JFXWindowUtils; import java.awt.*; import java.awt.event.FocusEvent; @@ -218,7 +218,7 @@ public void cleanup() { private final JmeContext jmeContext; protected JmeFxContainer(final AssetManager assetManager, final Application application, final CursorDisplayProvider cursorDisplayProvider) { - final Point decorationSize = JFXWindowsUtils.getWindowDecorationSize(); + final Point decorationSize = JFXWindowUtils.getWindowDecorationSize(); final AppStateManager stateManager = application.getStateManager(); stateManager.attach(fxAppState); @@ -484,12 +484,12 @@ public void grabFocus() { public void handleResize() { final long time = System.currentTimeMillis(); - if(time - getLastResized() < PROP_MIN_RESIZE_INTERVAL) return; + if (time - getLastResized() < PROP_MIN_RESIZE_INTERVAL) return; final JmeContext jmeContext = getJmeContext(); - final int displayWidth = JFXWindowsUtils.getWidth(jmeContext); - final int displayHeight = JFXWindowsUtils.getHeight(jmeContext); + final int displayWidth = JFXWindowUtils.getWidth(jmeContext); + final int displayHeight = JFXWindowUtils.getHeight(jmeContext); final AsyncReadSyncWriteLock lock = getImageLock(); lock.syncLock(); @@ -500,7 +500,7 @@ public void handleResize() { final Picture picture = getPicture(); - if(isDebug()) { + if (isDebug()) { LOGGER.debug("handle resize from [" + getPictureWidth() + "x" + getPictureHeight() + "] to [" + pictureWidth + "x" + pictureHeight + "]"); } @@ -556,7 +556,7 @@ public boolean isCovered(final int x, final int y) { data.limit(0); - if(isDebug()) { + if (isDebug()) { LOGGER.debug("is covered " + x + ", " + y + " = " + (alpha != 0)); } @@ -630,7 +630,7 @@ public void paintComponent() { long time = 0; - if(isDebug()) { + if (isDebug()) { time = System.currentTimeMillis(); LOGGER.debug("started paint FX scene..."); } @@ -646,7 +646,8 @@ public void paintComponent() { final int pictureWidth = getPictureWidth(); final int pictureHeight = getPictureHeight(); - if (!JFXEmbeddedUtils.getPixels(hostContainer, intBuffer, pictureWidth, pictureHeight)) return; + if (!JFXEmbeddedUtils.getPixels(hostContainer, intBuffer, pictureWidth, pictureHeight)) + return; tempData.flip(); tempData.limit(pictureWidth * pictureHeight * 4); @@ -669,7 +670,7 @@ public void paintComponent() { final AtomicInteger waitCount = getWaitCount(); waitCount.incrementAndGet(); - if(isDebug()) { + if (isDebug()) { LOGGER.debug("finished paint FX scene(" + (System.currentTimeMillis() - time) + "ms.)."); } } @@ -729,7 +730,7 @@ public Void writeToJME() { long time = 0; - if(isDebug()) { + if (isDebug()) { time = System.currentTimeMillis(); LOGGER.debug("started writing FX data to JME..."); } @@ -752,7 +753,7 @@ public Void writeToJME() { waitCount.subAndGet(currentCount); - if(isDebug()) { + if (isDebug()) { LOGGER.debug("finished writing FX data to JME(" + (System.currentTimeMillis() - time) + "ms.)."); } diff --git a/src/com/jme3x/jfx/JmeJFXPanel.java b/src/com/jme3x/jfx/JmeJFXPanel.java index b212468..fe3ff05 100644 --- a/src/com/jme3x/jfx/JmeJFXPanel.java +++ b/src/com/jme3x/jfx/JmeJFXPanel.java @@ -21,6 +21,8 @@ public class JmeJFXPanel extends JFXPanel { private static final Logger LOGGER = LoggerManager.getLogger(JmeJFXPanel.class); + private static final ThreadLocal LOCATION_LOCAL = ThreadLocal.withInitial(Point::new); + /** * Контейнер JavaFX UI. */ @@ -92,7 +94,7 @@ public void handleEvent(final MouseEvent event) { }); } - public void handleMove(final int x, final int y) { + public void handleMove(final int x, final int y) { JFXEmbeddedUtils.setScreenX(this, x); JFXEmbeddedUtils.setScreenY(this, y); JFXPlatform.runInFXThread(() -> JFXEmbeddedUtils.sendMoveEventToFX(this)); @@ -105,6 +107,13 @@ public void handleResize(final int width, final int height) { JFXPlatform.runInFXThread(() -> JFXEmbeddedUtils.sendResizeEventToFX(this)); } + @Override + public Point getLocationOnScreen() { + final Point point = LOCATION_LOCAL.get(); + point.setLocation(jmeFxContainer.getOldX(), jmeFxContainer.getOldY()); + return point; + } + /** * @return встроенная в панель сцена FX. */ diff --git a/src/com/jme3x/jfx/util/JFXEmbeddedUtils.java b/src/com/jme3x/jfx/util/JFXEmbeddedUtils.java index 506d72b..e2bb14a 100644 --- a/src/com/jme3x/jfx/util/JFXEmbeddedUtils.java +++ b/src/com/jme3x/jfx/util/JFXEmbeddedUtils.java @@ -17,7 +17,9 @@ import rlib.util.array.ArrayFactory; /** - * Created by ronn on 23.07.16. + * Набор утильных методов по работе со встроенным окном JavaFX. + * + * @author Ronn */ public class JFXEmbeddedUtils { @@ -104,34 +106,58 @@ public class JFXEmbeddedUtils { } } + /** + * Вытащить из панели EmbeddedStage. + */ public static Object getStage(final JmeJFXPanel panel) { return STAGE_VAR_HANDLE.get(panel); } + /** + * Вытащить из панели EmbeddedScene. + */ public static Object getScene(final JmeJFXPanel panel) { return SCENE_VAR_HANDLE.get(panel); } + /** + * Установка новой высоты для EmbeddedScene. + */ public static void setPHeight(final JmeJFXPanel panel, final int value) { P_HEIGHT_VAR_HANDLE.set(panel, value); } + /** + * Установка новой высоты для EmbeddedStage. + */ public static void setPWidth(final JmeJFXPanel panel, final int value) { P_WIDTH_VAR_HANDLE.set(panel, value); } + /** + * Установка новой позиции по X для EmbeddedStage. + */ public static void setScreenX(final JmeJFXPanel panel, final int value) { SCREEN_X_VAR_HANDLE.getAndSet(panel, value); } + /** + * Установка новой позиции по Y для EmbeddedStage. + */ public static void setScreenY(final JmeJFXPanel panel, final int value) { SCREEN_Y_VAR_HANDLE.getAndSet(panel, value); } + /** + * Установить флаг захвата движения мышкой. + */ public static void setCapturingMouse(final JmeJFXPanel panel, final boolean value) { IS_CAPTURING_MOUSE_VAR_HANDLE.set(panel, value); } + /** + * Обновить положение EmbeddedScene. + */ public static void sendMoveEventToFX(final JmeJFXPanel panel) { try { SEND_MOVE_EVENT_TO_FX_HANDLE.invoke(panel); @@ -140,6 +166,9 @@ public static void sendMoveEventToFX(final JmeJFXPanel panel) { } } + /** + * Обновить размер EmbeddedScene. + */ public static void sendResizeEventToFX(final JmeJFXPanel panel) { try { SEND_RESIZE_EVENT_TO_FX_HANDLE.invoke(panel); @@ -148,6 +177,9 @@ public static void sendResizeEventToFX(final JmeJFXPanel panel) { } } + /** + * Отправить на обработку событие связанное с мышью в EmbeddedScene. + */ public static void sendMouseEventToFX(final JmeJFXPanel panel, final MouseEvent event) { try { SEND_MOUSE_EVENT_TO_FX_HANDLE.invoke(panel, event); @@ -156,6 +188,9 @@ public static void sendMouseEventToFX(final JmeJFXPanel panel, final MouseEvent } } + /** + * Отправить на обработку событие связанное с фокусом окна в EmbeddedScene. + */ public static void sendFocusEventToFX(final JmeJFXPanel panel, final FocusEvent event) { try { SEND_FOCUS_EVENT_TO_FX_HANDLE.invoke(panel, event); @@ -164,6 +199,9 @@ public static void sendFocusEventToFX(final JmeJFXPanel panel, final FocusEvent } } + /** + * Отправить на обработку событие связанное с клавиатурой в EmbeddedScene. + */ public static void sendKeyEventToFX(final JmeJFXPanel panel, final KeyEvent event) { try { SEND_KEY_EVENT_TO_FX_HANDLE.invoke(panel, event); @@ -175,9 +213,9 @@ public static void sendKeyEventToFX(final JmeJFXPanel panel, final KeyEvent even /** * Запрос на получение данных об отрисованном UI. * - * @param panel панель из которой надо изъять данные. + * @param panel панель из которой надо изъять данные. * @param buffer буффер для размещения данных. - * @param width ширина. + * @param width ширина. * @param height высота. * @return были ли данные получены. */ @@ -197,7 +235,7 @@ public static boolean getPixels(final JmeJFXPanel panel, final IntBuffer buffer, /** * Установка маштабирования пикселей в сцене. * - * @param panel панель в которй находится сцена. + * @param panel панель в которй находится сцена. * @param scaleX маштабирование по оси X. * @param scaleY маштабирование по оси Y. */ diff --git a/src/com/jme3x/jfx/util/JFXPlatform.java b/src/com/jme3x/jfx/util/JFXPlatform.java index 709ad94..1150c1d 100644 --- a/src/com/jme3x/jfx/util/JFXPlatform.java +++ b/src/com/jme3x/jfx/util/JFXPlatform.java @@ -11,6 +11,8 @@ /** * Набор утильных методов для работы с JavaFX. + * + * @author Ronn */ public class JFXPlatform { diff --git a/src/com/jme3x/jfx/util/JFXWindowsUtils.java b/src/com/jme3x/jfx/util/JFXWindowUtils.java similarity index 97% rename from src/com/jme3x/jfx/util/JFXWindowsUtils.java rename to src/com/jme3x/jfx/util/JFXWindowUtils.java index f4f9753..411a96f 100644 --- a/src/com/jme3x/jfx/util/JFXWindowsUtils.java +++ b/src/com/jme3x/jfx/util/JFXWindowUtils.java @@ -17,11 +17,11 @@ import static org.lwjgl.BufferUtils.createIntBuffer; /** - * Набор методов по работе с окном. + * Набор методов по работе с окном в LWJGL3. * * @author Ronn */ -public class JFXWindowsUtils { +public class JFXWindowUtils { private static final Map OFFSET_MAPPING = new HashMap<>(); From ac14023b50431a92baf25e0792c2b29add286222 Mon Sep 17 00:00:00 2001 From: javasabr Date: Tue, 26 Jul 2016 20:09:59 +0300 Subject: [PATCH 04/24] fixed color format --- src/com/jme3x/jfx/JmeFxContainer.java | 111 ++++++++++++++++++++------ src/com/jme3x/jfx/util/JFXPixels.java | 44 +++++----- 2 files changed, 108 insertions(+), 47 deletions(-) diff --git a/src/com/jme3x/jfx/JmeFxContainer.java b/src/com/jme3x/jfx/JmeFxContainer.java index b033ae9..fe0322f 100644 --- a/src/com/jme3x/jfx/JmeFxContainer.java +++ b/src/com/jme3x/jfx/JmeFxContainer.java @@ -18,6 +18,8 @@ import com.jme3.util.BufferUtils; import com.jme3x.jfx.cursor.CursorDisplayProvider; import com.jme3x.jfx.util.JFXEmbeddedUtils; +import com.jme3x.jfx.util.JFXPixels; +import com.jme3x.jfx.util.JFXPlatform; import com.jme3x.jfx.util.JFXWindowUtils; import java.awt.*; @@ -25,14 +27,19 @@ import java.nio.ByteBuffer; import java.nio.IntBuffer; import java.util.BitSet; +import java.util.concurrent.CompletableFuture; +import java.util.function.Consumer; +import java.util.function.Function; import javafx.application.Platform; import javafx.scene.Scene; import rlib.concurrent.atomic.AtomicInteger; import rlib.concurrent.lock.AsyncReadSyncWriteLock; import rlib.concurrent.lock.LockFactory; +import rlib.function.SafeRunnable; import rlib.logging.Logger; import rlib.logging.LoggerManager; +import rlib.util.Util; /** * Need to pass -Dprism.dirtyopts=false on startup @@ -43,7 +50,7 @@ public class JmeFxContainer { private static final Logger LOGGER = LoggerManager.getLogger(JmeFxContainer.class); - public static final int PROP_MIN_RESIZE_INTERVAL = 300; + public static final int PROP_MIN_RESIZE_INTERVAL = 100; /** * Актитвировал ли дебаг. @@ -64,6 +71,43 @@ public static boolean isDebug() { return debug; } + // TODO benchmark + private static Void reorder_ARGB82ABGR8(final ByteBuffer data) { + + final int limit = data.limit() - 3; + + byte v; + + for (int i = 0; i < limit; i += 4) { + v = data.get(i + 1); + data.put(i + 1, data.get(i + 3)); + data.put(i + 3, v); + } + + return null; + } + + // TODO benchmark + private static Void reorder_BGRA82ABGR8(final ByteBuffer data) { + + final int limit = data.limit() - 3; + + byte v0, v1, v2, v3; + + for (int i = 0; i < limit; i += 4) { + v0 = data.get(i); + v1 = data.get(i + 1); + v2 = data.get(i + 2); + v3 = data.get(i + 3); + data.put(i, v3); + data.put(i + 1, v0); + data.put(i + 2, v1); + data.put(i + 3, v2); + } + + return null; + } + public static JmeFxContainer install(final Application app, final Node guiNode, final CursorDisplayProvider cursorDisplayProvider) { final JmeFxContainer container = new JmeFxContainer(app.getAssetManager(), app, cursorDisplayProvider); @@ -91,6 +135,8 @@ public void cleanup() { } }; + protected volatile CompletableFuture nativeFormat = new CompletableFuture<>(); + /** * Кол-во незаписанных в JME кадров. */ @@ -217,7 +263,14 @@ public void cleanup() { */ private final JmeContext jmeContext; + /** + * Функция реординга данных. + */ + protected volatile Function reorderData; + protected JmeFxContainer(final AssetManager assetManager, final Application application, final CursorDisplayProvider cursorDisplayProvider) { + initFx(); + final Point decorationSize = JFXWindowUtils.getWindowDecorationSize(); final AppStateManager stateManager = application.getStateManager(); @@ -243,6 +296,33 @@ protected JmeFxContainer(final AssetManager assetManager, final Application appl this.picture.setTexture(assetManager, texture, true); } + private void initFx() { + JFXPlatform.startup(this::checkPixelsFormat); + } + + private void checkPixelsFormat() { + + final int format = JFXPixels.getNativeFormat(); + + if (format == JFXPixels.BYTE_ARGB) { + Util.safeExecute((SafeRunnable) () -> nativeFormat.complete(Format.valueOf("ARGB8")), (Consumer) e -> { + nativeFormat.complete(Format.ABGR8); + reorderData = JmeFxContainer::reorder_ARGB82ABGR8; + }); + } else if (format == JFXPixels.BYTE_BGRA_PRE) { + Util.safeExecute((SafeRunnable) () -> nativeFormat.complete(Format.valueOf("BGRA8")), (Consumer) e -> { + nativeFormat.complete(Format.ABGR8); + reorderData = JmeFxContainer::reorder_BGRA82ABGR8; + }); + } else { + Util.safeExecute((SafeRunnable) () -> nativeFormat.complete(Format.valueOf("ARGB8")), (Consumer) e -> { + nativeFormat.complete(Format.ABGR8); + reorderData = JmeFxContainer::reorder_ARGB82ABGR8; + }); + } + } + + /** * @param lastResized время последнего изменения размера. */ @@ -515,7 +595,7 @@ public void handleResize() { fxData = BufferUtils.createByteBuffer(pictureWidth * pictureHeight * 4); tempData = BufferUtils.createByteBuffer(pictureWidth * pictureHeight * 4); jmeData = BufferUtils.createByteBuffer(pictureWidth * pictureHeight * 4); - jmeImage = new Image(Format.BGRA8, pictureWidth, pictureHeight, jmeData, ColorSpace.sRGB); + jmeImage = new Image(nativeFormat.get(), pictureWidth, pictureHeight, jmeData, ColorSpace.sRGB); final Texture2D texture = getTexture(); if (texture != null) texture.setImage(jmeImage); @@ -661,6 +741,10 @@ public void paintComponent() { fxData.put(tempData); fxData.flip(); + if (reorderData != null) { + reorderData.apply(fxData); + } + } catch (final Exception exc) { exc.printStackTrace(); } finally { @@ -675,29 +759,6 @@ public void paintComponent() { } } - int retrieveKeyState() { - - int embedModifiers = 0; - - /*if (keyStateSet.get(KeyEvent.VK_SHIFT)) { - embedModifiers |= AbstractEvents.MODIFIER_SHIFT; - } - - if (keyStateSet.get(KeyEvent.VK_CONTROL)) { - embedModifiers |= AbstractEvents.MODIFIER_CONTROL; - } - - if (keyStateSet.get(KeyEvent.VK_ALT)) { - embedModifiers |= AbstractEvents.MODIFIER_ALT; - } - - if (keyStateSet.get(KeyEvent.VK_META)) { - embedModifiers |= AbstractEvents.MODIFIER_META; - } -*/ - return embedModifiers; - } - /** * call via gui manager! */ diff --git a/src/com/jme3x/jfx/util/JFXPixels.java b/src/com/jme3x/jfx/util/JFXPixels.java index 26ed6cf..b390bca 100644 --- a/src/com/jme3x/jfx/util/JFXPixels.java +++ b/src/com/jme3x/jfx/util/JFXPixels.java @@ -3,61 +3,61 @@ import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodType; +import java.lang.invoke.VarHandle; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; -import javafx.application.Platform; -import rlib.util.array.ArrayFactory; - /** * Набор утильных методов для работы с Pixels в JavaFX. */ public class JFXPixels { + public static final int BYTE_BGRA_PRE; + public static final int BYTE_ARGB; + private static final Class PIXELS_TYPE; private static final Class FORMAT_TYPE; - private static final String METHOD_STARTUP = "startup"; + private static final String FIELD_BYTE_BGRA_PRE = "BYTE_BGRA_PRE"; + private static final String FIELD_BYTE_ARGB = "BYTE_ARGB"; + + private static final String METHOD_GET_NATIVE_FORMAT = "getNativeFormat"; - private static final MethodHandle STARTUP_HANDLE; + private static final MethodHandle GET_NATIVE_FORMAT_HANDLE; static { try { PIXELS_TYPE = Class.forName("com.sun.glass.ui.Pixels"); - FORMAT_TYPE = Class.forName("com.sun.glass.ui.Pixels.Format"); + FORMAT_TYPE = PIXELS_TYPE.getDeclaredClasses()[0]; final Constructor lookupConstructor = MethodHandles.Lookup.class.getDeclaredConstructor(Class.class); lookupConstructor.setAccessible(true); final MethodHandles.Lookup pixelsLookup = lookupConstructor.newInstance(PIXELS_TYPE); - STARTUP_HANDLE = pixelsLookup.findStatic(PIXELS_TYPE, METHOD_STARTUP, MethodType.methodType(Void.class, ArrayFactory.toArray(Runnable.class))); + GET_NATIVE_FORMAT_HANDLE = pixelsLookup.findStatic(PIXELS_TYPE, METHOD_GET_NATIVE_FORMAT, MethodType.methodType(int.class)); + + final MethodHandles.Lookup formatLookup = lookupConstructor.newInstance(FORMAT_TYPE); + final VarHandle bgraVarField = formatLookup.findStaticVarHandle(FORMAT_TYPE, FIELD_BYTE_BGRA_PRE, int.class); + final VarHandle argbVarField = formatLookup.findStaticVarHandle(FORMAT_TYPE, FIELD_BYTE_ARGB, int.class); + + BYTE_BGRA_PRE = (Integer) bgraVarField.get(); + BYTE_ARGB = (Integer) argbVarField.get(); - } catch (final ClassNotFoundException | InvocationTargetException | InstantiationException | IllegalAccessException | NoSuchMethodException e) { + } catch (final ClassNotFoundException | NoSuchFieldException | InvocationTargetException | InstantiationException | IllegalAccessException | NoSuchMethodException e) { throw new RuntimeException(e); } } /** - * Добавить задачу на выполнение после старта JavaFX. + * Получение формата изображения. */ - public static void startup(final Runnable task) { + public static int getNativeFormat() { try { - STARTUP_HANDLE.invokeWithArguments(task); + return (Integer) GET_NATIVE_FORMAT_HANDLE.invoke(); } catch (final Throwable throwable) { throw new RuntimeException(throwable); } } - - /** - * Выполнить задачу в потоке JavaFX. - */ - public static void runInFXThread(final Runnable task) { - if (Platform.isFxApplicationThread()) { - task.run(); - } else { - Platform.runLater(task); - } - } } From f6b81fc2a0216859633883fafcad1b2e6f268e3f Mon Sep 17 00:00:00 2001 From: javasabr Date: Wed, 27 Jul 2016 20:44:44 +0300 Subject: [PATCH 05/24] Implemented DnD listener --- src/com/jme3x/jfx/JmeFxContainer.java | 22 +- src/com/jme3x/jfx/JmeFxDNDHandler.java | 271 ++++++++++++++++++ ...tListener.java => JmeFxInputListener.java} | 42 +-- .../jfx/{JmeJFXPanel.java => JmeFxPanel.java} | 14 +- .../{JavaFXPicture.java => JmeFxPicture.java} | 8 +- src/com/jme3x/jfx/PixelUtils.java | 68 ----- .../jme3x/jfx/cursor/proton/aero_arrow.cur | Bin 0 -> 4286 bytes src/com/jme3x/jfx/cursor/proton/aero_busy.ani | Bin 0 -> 77360 bytes .../jme3x/jfx/cursor/proton/aero_cross.cur | Bin 0 -> 4286 bytes src/com/jme3x/jfx/cursor/proton/aero_ew.cur | Bin 0 -> 4286 bytes .../jme3x/jfx/cursor/proton/aero_helpsel.cur | Bin 0 -> 4286 bytes src/com/jme3x/jfx/cursor/proton/aero_link.cur | Bin 0 -> 4286 bytes src/com/jme3x/jfx/cursor/proton/aero_move.cur | Bin 0 -> 4286 bytes src/com/jme3x/jfx/cursor/proton/aero_nesw.cur | Bin 0 -> 4286 bytes src/com/jme3x/jfx/cursor/proton/aero_ns.cur | Bin 0 -> 4286 bytes src/com/jme3x/jfx/cursor/proton/aero_nwse.cur | Bin 0 -> 4286 bytes src/com/jme3x/jfx/cursor/proton/aero_pen.cur | Bin 0 -> 4286 bytes src/com/jme3x/jfx/cursor/proton/aero_text.cur | Bin 0 -> 4286 bytes .../jme3x/jfx/cursor/proton/aero_unavail.cur | Bin 0 -> 4286 bytes src/com/jme3x/jfx/cursor/proton/aero_up.cur | Bin 0 -> 4286 bytes .../jme3x/jfx/cursor/proton/aero_working.ani | Bin 0 -> 77360 bytes src/com/jme3x/jfx/util/JFXDNDUtils.java | 114 ++++++++ src/com/jme3x/jfx/util/JFXEmbeddedUtils.java | 59 +++- test-src/com/jme3x/jfx/TestJFXPanel.java | 2 +- 24 files changed, 476 insertions(+), 124 deletions(-) create mode 100644 src/com/jme3x/jfx/JmeFxDNDHandler.java rename src/com/jme3x/jfx/{JmeFXInputListener.java => JmeFxInputListener.java} (91%) rename src/com/jme3x/jfx/{JmeJFXPanel.java => JmeFxPanel.java} (90%) rename src/com/jme3x/jfx/{JavaFXPicture.java => JmeFxPicture.java} (91%) delete mode 100644 src/com/jme3x/jfx/PixelUtils.java create mode 100644 src/com/jme3x/jfx/cursor/proton/aero_arrow.cur create mode 100644 src/com/jme3x/jfx/cursor/proton/aero_busy.ani create mode 100644 src/com/jme3x/jfx/cursor/proton/aero_cross.cur create mode 100644 src/com/jme3x/jfx/cursor/proton/aero_ew.cur create mode 100644 src/com/jme3x/jfx/cursor/proton/aero_helpsel.cur create mode 100644 src/com/jme3x/jfx/cursor/proton/aero_link.cur create mode 100644 src/com/jme3x/jfx/cursor/proton/aero_move.cur create mode 100644 src/com/jme3x/jfx/cursor/proton/aero_nesw.cur create mode 100644 src/com/jme3x/jfx/cursor/proton/aero_ns.cur create mode 100644 src/com/jme3x/jfx/cursor/proton/aero_nwse.cur create mode 100644 src/com/jme3x/jfx/cursor/proton/aero_pen.cur create mode 100644 src/com/jme3x/jfx/cursor/proton/aero_text.cur create mode 100644 src/com/jme3x/jfx/cursor/proton/aero_unavail.cur create mode 100644 src/com/jme3x/jfx/cursor/proton/aero_up.cur create mode 100644 src/com/jme3x/jfx/cursor/proton/aero_working.ani create mode 100644 src/com/jme3x/jfx/util/JFXDNDUtils.java diff --git a/src/com/jme3x/jfx/JmeFxContainer.java b/src/com/jme3x/jfx/JmeFxContainer.java index fe0322f..c6fbaae 100644 --- a/src/com/jme3x/jfx/JmeFxContainer.java +++ b/src/com/jme3x/jfx/JmeFxContainer.java @@ -113,7 +113,7 @@ public static JmeFxContainer install(final Application app, final Node guiNode, final JmeFxContainer container = new JmeFxContainer(app.getAssetManager(), app, cursorDisplayProvider); guiNode.attachChild(container.getJmeNode()); - final JmeFXInputListener inputListener = new JmeFXInputListener(container); + final JmeFxInputListener inputListener = new JmeFxInputListener(container); container.setInputListener(inputListener); @@ -160,12 +160,12 @@ public void cleanup() { /** * Контейнер сцены JavaFX. */ - protected volatile JmeJFXPanel hostContainer; + protected volatile JmeFxPanel hostContainer; /** * Слушатель ввода пользователя. */ - protected volatile JmeFXInputListener inputListener; + protected volatile JmeFxInputListener inputListener; /** * Текущая сцена UI. @@ -285,8 +285,8 @@ protected JmeFxContainer(final AssetManager assetManager, final Application appl this.application = application; this.visibleCursor = true; - this.hostContainer = new JmeJFXPanel(this); - this.picture = new JavaFXPicture(this); + this.hostContainer = new JmeFxPanel(this); + this.picture = new JmeFxPicture(this); this.picture.move(0, 0, -1); this.picture.setPosition(0, 0); @@ -375,14 +375,14 @@ private AsyncReadSyncWriteLock getImageLock() { /** * @return слушатель ввода пользователя. */ - public JmeFXInputListener getInputListener() { + public JmeFxInputListener getInputListener() { return inputListener; } /** * @param inputListener слушатель ввода пользователя. */ - public void setInputListener(final JmeFXInputListener inputListener) { + public void setInputListener(final JmeFxInputListener inputListener) { this.inputListener = inputListener; } @@ -552,7 +552,7 @@ public int getWindowY() { */ public void grabFocus() { - final JmeJFXPanel hostContainer = getHostContainer(); + final JmeFxPanel hostContainer = getHostContainer(); hostContainer.handleEvent(new FocusEvent(hostContainer, FocusEvent.FOCUS_GAINED)); setFocus(true); @@ -690,7 +690,7 @@ public void setVisibleCursor(final boolean visibleCursor) { */ public void loseFocus() { - final JmeJFXPanel hostContainer = getHostContainer(); + final JmeFxPanel hostContainer = getHostContainer(); hostContainer.handleEvent(new FocusEvent(hostContainer, FocusEvent.FOCUS_LOST)); setFocus(false); @@ -699,7 +699,7 @@ public void loseFocus() { /** * @return контейнер сцены JavaFX. */ - public JmeJFXPanel getHostContainer() { + public JmeFxPanel getHostContainer() { return hostContainer; } @@ -715,7 +715,7 @@ public void paintComponent() { LOGGER.debug("started paint FX scene..."); } - final JmeJFXPanel hostContainer = getHostContainer(); + final JmeFxPanel hostContainer = getHostContainer(); if (hostContainer == null) return; final ByteBuffer tempData = getTempData(); diff --git a/src/com/jme3x/jfx/JmeFxDNDHandler.java b/src/com/jme3x/jfx/JmeFxDNDHandler.java new file mode 100644 index 0000000..62e56a6 --- /dev/null +++ b/src/com/jme3x/jfx/JmeFxDNDHandler.java @@ -0,0 +1,271 @@ +package com.jme3x.jfx; + +import com.jme3x.jfx.util.JFXDNDUtils; +import com.jme3x.jfx.util.JFXEmbeddedUtils; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.nio.ByteBuffer; + +import javafx.collections.ObservableList; +import javafx.scene.Group; +import javafx.scene.Node; +import javafx.scene.Scene; +import javafx.scene.image.ImageView; +import javafx.scene.image.PixelFormat; +import javafx.scene.image.PixelWriter; +import javafx.scene.image.WritableImage; +import javafx.scene.input.TransferMode; +import rlib.logging.Logger; +import rlib.logging.LoggerManager; + +import static rlib.util.array.ArrayFactory.toArray; + +/** + * Реализация слушателя DND для обработки его в случае встраивания в jME. + * + * @author Ronn + */ +public class JmeFxDNDHandler implements InvocationHandler { + + private static final Logger LOGGER = LoggerManager.getLogger(InvocationHandler.class); + + public static final Class LISTENER_TYPE; + + static { + try { + LISTENER_TYPE = Class.forName("com.sun.javafx.embed.HostDragStartListener"); + } catch (final ClassNotFoundException e) { + throw new RuntimeException(e); + } + } + + + /** + * Контейнер. + */ + private final JmeFxContainer jmeFxContainer; + + /** + * Реализация слушателя DnD. + */ + private final Object handler; + + private Object dropTarget; + private Object dragSource; + + private TransferMode overTarget; + + /** + * Изображение для отображения перемещения элемента. + */ + private ImageView dragImage; + + public JmeFxDNDHandler(final JmeFxContainer jmeFxContainer) { + this.jmeFxContainer = jmeFxContainer; + this.handler = Proxy.newProxyInstance(LISTENER_TYPE.getClassLoader(), toArray(LISTENER_TYPE), this); + } + + @Override + public Object invoke(final Object proxy, final Method method, final Object[] args) throws Throwable { + dragStarted(args[0], (TransferMode) args[1]); + return null; + } + + /** + * @return реализация слушателя DnD. + */ + public Object getHandler() { + return handler; + } + + /** + * this is kinda ridiculous, but well at least it seems to work + */ + private void createDragImageProxy(final Object jmeJfxDragImage, final Object offset) { + if (!(jmeJfxDragImage instanceof ByteBuffer)) return; + + try { + + final ByteBuffer casted = (ByteBuffer) jmeJfxDragImage; + casted.position(0); + + final int width = casted.getInt(); + final int height = casted.getInt(); + + final byte[] imgdata = new byte[casted.remaining()]; + casted.get(imgdata); + + final WritableImage img = new WritableImage(width, height); + final PixelWriter writer = img.getPixelWriter(); + writer.setPixels(0, 0, width, height, PixelFormat.getByteBgraInstance(), imgdata, 0, width * 4); + + final ImageView dragImage = new ImageView(img); + dragImage.setStyle("dragimage:true;"); + dragImage.setMouseTransparent(true); + dragImage.setVisible(true); + + if (offset instanceof ByteBuffer) { + + ((ByteBuffer) offset).position(0); + + final int x = ((ByteBuffer) offset).getInt(); + final int y = ((ByteBuffer) offset).getInt(); + + if (LOGGER.isEnabledDebug()) LOGGER.debug("Img offset " + x + ", " + y); + } + + } catch (final Exception e) { + LOGGER.warning(e.getMessage(), e); + } + } + + /** + * Инициализациястарта перемещения какого-то элемента. + */ + private void dragStarted(final Object dragSource, final TransferMode dragAction) { + + final JmeFxContainer jmeFxContainer = getJmeFxContainer(); + final JmeFxInputListener inputListener = jmeFxContainer.getInputListener(); + final JmeFxPanel hostContainer = jmeFxContainer.getHostContainer(); + final Scene scene = jmeFxContainer.getScene(); + final Group rootNode = (Group) scene.getRoot(); + final ObservableList children = rootNode.getChildren(); + + final ImageView dragImage = getDragImage(); + + if (dragImage != null) { + children.remove(dragImage); + setDragImage(null); + } + + try { + + final Object dragImg = JFXDNDUtils.getData(dragSource, "application/x-java-drag-image"); + final Object offset = JFXDNDUtils.getData(dragSource, "application/x-java-drag-image-offset"); + + if (dragImg != null) createDragImageProxy(dragImg, offset); + inputListener.setMouseDNDListener(this); + + final Object dropTarget = JFXEmbeddedUtils.createDropTarget(hostContainer); + + setDragSource(dragSource); + setDropTarget(dropTarget); + + // pseudo enter, we only support inner events, so it stays always entered + JFXDNDUtils.handleDragEnter(dropTarget, 0, 0, TransferMode.COPY, dragSource); + + } catch (final Exception e) { + LOGGER.warning(e.getMessage(), e); + } + } + + private void setDragSource(final Object dragSource) { + this.dragSource = dragSource; + } + + private Object getDragSource() { + return dragSource; + } + + private void setDropTarget(final Object dropTarget) { + this.dropTarget = dropTarget; + } + + private Object getDropTarget() { + return dropTarget; + } + + private void setOverTarget(final TransferMode overTarget) { + this.overTarget = overTarget; + } + + private TransferMode getOverTarget() { + return overTarget; + } + + /** + * @param dragImage изображение для отображения перемещения элемента. + */ + private void setDragImage(final ImageView dragImage) { + this.dragImage = dragImage; + } + + /** + * @return изображение для отображения перемещения элемента. + */ + private ImageView getDragImage() { + return dragImage; + } + + private JmeFxContainer getJmeFxContainer() { + return jmeFxContainer; + } + + /** + * Обновление положения перемещаемого элемента в JavaFX. + * + * @param x координата перемещаемого элемента. + * @param y координата перемещаемого элемента. + * @param mousePressed зажата ли кнопка мыши. + */ + public void mouseUpdate(final int x, final int y, final boolean mousePressed) { + + final Object dropTarget = getDropTarget(); + final Object dragSource = getDragSource(); + + if (dragSource == null || dropTarget == null) return; + + final JmeFxContainer container = getJmeFxContainer(); + final JmeFxInputListener inputListener = container.getInputListener(); + final Scene scene = container.getScene(); + final Group rootNode = (Group) scene.getRoot(); + final ObservableList children = rootNode.getChildren(); + + final ImageView dragImage = getDragImage(); + + try { + + if (mousePressed) { + + if (dragImage != null) { + dragImage.relocate(x, y); + if (!children.contains(dragImage)) children.add(dragImage); + } + + setOverTarget(JFXDNDUtils.handleDragOver(dropTarget, x, y, TransferMode.COPY)); + + } else { + + if (dragImage != null) dragImage.setVisible(false); + + final TransferMode overTarget = getOverTarget(); + + if (overTarget != null) { + + // causes exceptions when done without a target + setOverTarget(JFXDNDUtils.handleDragOver(dropTarget, x, y, TransferMode.COPY)); + + final TransferMode acceptedMode = JFXDNDUtils.handleDragDrop(dropTarget, x, y, TransferMode.COPY); + + // Necessary to reset final the internal states, and allow final another drag drop + JFXDNDUtils.dragDropEnd(dragSource, acceptedMode); + + } else { + // // seems to be necessary if no dragdrop attempt is being made + JFXDNDUtils.handleDragLeave(dropTarget); + JFXDNDUtils.dragDropEnd(dragSource, null); + } + + inputListener.setMouseDNDListener(null); + + setDragSource(null); + setOverTarget(null); + } + + } catch (final Exception e) { + LOGGER.warning(e.getMessage(), e); + } + } +} diff --git a/src/com/jme3x/jfx/JmeFXInputListener.java b/src/com/jme3x/jfx/JmeFxInputListener.java similarity index 91% rename from src/com/jme3x/jfx/JmeFXInputListener.java rename to src/com/jme3x/jfx/JmeFxInputListener.java index 28699f6..8f9b511 100644 --- a/src/com/jme3x/jfx/JmeFXInputListener.java +++ b/src/com/jme3x/jfx/JmeFxInputListener.java @@ -28,7 +28,7 @@ * * @author Heist */ -public class JmeFXInputListener implements RawInputListener { +public class JmeFxInputListener implements RawInputListener { /** * Контейнер Java FX. @@ -58,17 +58,19 @@ public class JmeFXInputListener implements RawInputListener { /** * Обработчик DnD Java FX. */ - //private volatile JmeFxDNDHandler jfxdndHandler; - public JmeFXInputListener(final JmeFxContainer listensOnContainer) { + private volatile JmeFxDNDHandler jfxdndHandler; + + public JmeFxInputListener(final JmeFxContainer listensOnContainer) { this.jmeFxContainer = listensOnContainer; } /** * @return обработчик DnD Java FX. */ - /* private JmeFxDNDHandler getJfxdndHandler() { + private JmeFxDNDHandler getJfxdndHandler() { return jfxdndHandler; - }*/ + } + @Override public void beginInput() { final RawInputListener adapter = getEverListeningInputListenerAdapter(); @@ -135,7 +137,7 @@ public void onKeyEvent(final KeyInputEvent event) { if (adapter != null) adapter.onKeyEvent(event); final JmeFxContainer jmeFxContainer = getJmeFxContainer(); - final JmeJFXPanel container = jmeFxContainer.getHostContainer(); + final JmeFxPanel container = jmeFxContainer.getHostContainer(); if (container == null) return; final BitSet keyStateSet = getKeyStateSet(); @@ -206,7 +208,7 @@ public void onMouseButtonEvent(final MouseButtonEvent event) { final InputManager inputManager = application.getInputManager(); if (!inputManager.isCursorVisible()) return; - final JmeJFXPanel container = jmeFxContainer.getHostContainer(); + final JmeFxPanel container = jmeFxContainer.getHostContainer(); if (container == null) return; final Scene scene = jmeFxContainer.getScene(); @@ -260,14 +262,14 @@ public void onMouseButtonEvent(final MouseButtonEvent event) { private void onMouseButtonEventImpl(final int x, final int y, final int button, final int eventId) { - //final JmeFxDNDHandler jfxdndHandler = getJfxdndHandler(); + final JmeFxDNDHandler jfxdndHandler = getJfxdndHandler(); - //if (jfxdndHandler != null) { - // jfxdndHandler.mouseUpdate(x, y, primaryBtnDown); - //} + if (jfxdndHandler != null) { + jfxdndHandler.mouseUpdate(x, y, button == MouseEvent.BUTTON1 && eventId == MouseEvent.MOUSE_PRESSED); + } final JmeFxContainer fxContainer = getJmeFxContainer(); - final JmeJFXPanel container = fxContainer.getHostContainer(); + final JmeFxPanel container = fxContainer.getHostContainer(); final long when = System.currentTimeMillis(); final int mask = getMouseMask(); @@ -326,7 +328,7 @@ public void onMouseMotionEvent(final MouseMotionEvent event) { final InputManager inputManager = application.getInputManager(); if (!inputManager.isCursorVisible()) return; - final JmeJFXPanel container = jmeFxContainer.getHostContainer(); + final JmeFxPanel container = jmeFxContainer.getHostContainer(); if (container == null) return; final Scene scene = jmeFxContainer.getScene(); @@ -360,13 +362,13 @@ public void onMouseMotionEvent(final MouseMotionEvent event) { private void onMouseMotionEventImpl(final int x, final int y, final int button, final int eventId, final int wheelRotation) { final JmeFxContainer fxContainer = getJmeFxContainer(); - final JmeJFXPanel container = fxContainer.getHostContainer(); + final JmeFxPanel container = fxContainer.getHostContainer(); - /* - final JmeFxDNDHandler dndHandler = getJfxdndHandler(); + final JmeFxDNDHandler dndHandler = getJfxdndHandler(); - if (dndHandler != null) dndHandler.mouseUpdate(x, y, primaryBtnDown); - */ + if (dndHandler != null) { + dndHandler.mouseUpdate(x, y, button == MouseEvent.BUTTON1 && eventId == MouseEvent.MOUSE_PRESSED); + } final long when = System.currentTimeMillis(); final int mask = getMouseMask(); @@ -417,8 +419,8 @@ public void setEverListeningRawInputListener(final RawInputListener rawInputList * set on drag start /nulled on end
necessary so that the drag events can be generated * appropiatly */ - /* public void setMouseDNDListener(final JmeFxDNDHandler jfxdndHandler) { + public void setMouseDNDListener(final JmeFxDNDHandler jfxdndHandler) { assert this.jfxdndHandler == null || jfxdndHandler == null : "duplicate jfxdndn handler register? "; this.jfxdndHandler = jfxdndHandler; - }*/ + } } diff --git a/src/com/jme3x/jfx/JmeJFXPanel.java b/src/com/jme3x/jfx/JmeFxPanel.java similarity index 90% rename from src/com/jme3x/jfx/JmeJFXPanel.java rename to src/com/jme3x/jfx/JmeFxPanel.java index fe3ff05..13242a2 100644 --- a/src/com/jme3x/jfx/JmeJFXPanel.java +++ b/src/com/jme3x/jfx/JmeFxPanel.java @@ -17,9 +17,9 @@ /** * Fakes a top level window */ -public class JmeJFXPanel extends JFXPanel { +public class JmeFxPanel extends JFXPanel { - private static final Logger LOGGER = LoggerManager.getLogger(JmeJFXPanel.class); + private static final Logger LOGGER = LoggerManager.getLogger(JmeFxPanel.class); private static final ThreadLocal LOCATION_LOCAL = ThreadLocal.withInitial(Point::new); @@ -28,12 +28,17 @@ public class JmeJFXPanel extends JFXPanel { */ private final JmeFxContainer jmeFxContainer; + /** + * Обработчик работы с DnD. + */ + private final JmeFxDNDHandler dndHandler; private volatile Object embeddedStage; private volatile Object embeddedScene; - public JmeJFXPanel(final JmeFxContainer jmeFxContainer) { + public JmeFxPanel(final JmeFxContainer jmeFxContainer) { this.jmeFxContainer = jmeFxContainer; + this.dndHandler = new JmeFxDNDHandler(jmeFxContainer); } /** @@ -70,13 +75,12 @@ public void setScene(final Scene scene) { if (scene == null) return; JFXEmbeddedUtils.setPixelScaleFactors(this, 1F, 1F); + JFXEmbeddedUtils.setDragStartListener(this, dndHandler.getHandler()); final int width = jmeFxContainer.getPictureWidth(); final int height = jmeFxContainer.getPictureHeight(); handleResize(width, height); - - //embeddedScene.setDragStartListener(new JmeFxDNDHandler(jmeFxContainer)); } public void handleEvent(final KeyEvent event) { diff --git a/src/com/jme3x/jfx/JavaFXPicture.java b/src/com/jme3x/jfx/JmeFxPicture.java similarity index 91% rename from src/com/jme3x/jfx/JavaFXPicture.java rename to src/com/jme3x/jfx/JmeFxPicture.java index 000d11c..aa987e7 100644 --- a/src/com/jme3x/jfx/JavaFXPicture.java +++ b/src/com/jme3x/jfx/JmeFxPicture.java @@ -12,16 +12,16 @@ * * @author Ronn */ -public class JavaFXPicture extends Picture { +public class JmeFxPicture extends Picture { - private static final Logger LOGGER = LoggerManager.getLogger(JavaFXPicture.class); + private static final Logger LOGGER = LoggerManager.getLogger(JmeFxPicture.class); /** * Контейнер UI Java FX. */ private final JmeFxContainer container; - public JavaFXPicture(JmeFxContainer container) { + public JmeFxPicture(final JmeFxContainer container) { super("JavaFXContainer", true); this.container = container; } @@ -41,7 +41,7 @@ public void updateLogicalState(float tpf) { try { - final JmeJFXPanel panel = container.getHostContainer(); + final JmeFxPanel panel = container.getHostContainer(); if (panel == null) return; final int currentWidth = JFXWindowUtils.getWidth(jmeContext); diff --git a/src/com/jme3x/jfx/PixelUtils.java b/src/com/jme3x/jfx/PixelUtils.java deleted file mode 100644 index c412c4b..0000000 --- a/src/com/jme3x/jfx/PixelUtils.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package com.jme3x.jfx; - -/** - * Convertes image formats between jfx and jme - * - * @author Heist - */ -public abstract class PixelUtils { - - static int mergeArgb(final int bg, final int src) { - - final int sa = src >>> 24; - - if (sa == 0) { - return bg; - } - - final int ba = bg >>> 24; - - final int rb = (src & 0x00ff00ff) * sa + (bg & 0x00ff00ff) * (0xff - sa) & 0xff00ff00; - final int g = (src & 0x0000ff00) * sa + (bg & 0x0000ff00) * (0xff - sa) & 0x00ff0000; - final int a = sa + (ba * (0xff - sa) >> 8); - - return a << 24 | (rb | g) >>> 8; - } - - static int mergeBgra(final int bg, final int src) { - - final int sa = src & 0xff; - - if (sa == 0) { - return bg; - } - - final int ba = bg & 0xff; - - final int a = sa + (ba * (0xff - sa) >> 8); - - final int b = ((src & 0xff000000) >> 24) * sa + ((bg & 0xff000000) >> 24) * ba >> 8; - final int g = ((src & 0xff0000) >> 16) * sa + ((bg & 0xff0000) >> 16) * ba >> 8; - final int r = ((src & 0xff00) >> 8) * sa + ((bg & 0xff00) >> 8) * ba >> 8; - - return b << 24 | g << 16 | r << 8 | a; - // return 0xffff0000; - } - - // this is platform specific... assumes little-endian - static int mergeBgraPre(final int bg, final int src) { - - final int sa = src >>> 24; - - if (sa == 0) { - return bg; - } - - final int ba = bg >>> 24; - - final int rb = (src & 0x00ff00ff) * 0xff + (bg & 0x00ff00ff) * (0xff - sa) & 0xff00ff00; - final int g = (src & 0x0000ff00) * 0xff + (bg & 0x0000ff00) * (0xff - sa) & 0x00ff0000; - final int a = sa + (ba * (0xff - sa) >> 8); - - return a << 24 | (rb | g) >>> 8; - } -} diff --git a/src/com/jme3x/jfx/cursor/proton/aero_arrow.cur b/src/com/jme3x/jfx/cursor/proton/aero_arrow.cur new file mode 100644 index 0000000000000000000000000000000000000000..c13d534e5103d220489a94eb433b005322053fa2 GIT binary patch literal 4286 zcmeH}%SyvQ6ow~>7o>PYEDBnqE)-l;6y15jjfigD1Rq7vov-5CWgD`I-yf1PY1)M} z9bL?UuXC78_)bq}k{T15z{IgB<9oxHKG`Y6a1UJN)0j`L`S2a^9q=9S9q=9aM;%zC zmemU7E+ay=2?IEWU04BEQ6Lf*a8r$YjIL@Z6!^p|Ji#Tns-g5-HN06h9Fgnq%+?s% zD_!lAk$=;05#_DiZ7?2sGEb3xztp$A>KRlcoi z<+huA9%r)UtS20}QB3~+j@%Rd4&5!kV|T;<2kw!-az8M-eD{?8%6-Ck2J<*$@=Oao uTh?H^!qt1ftfxNfzZt(+96oKZ7UB+Ml>yADF` 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 literal 0 HcmV?d00001 diff --git a/src/com/jme3x/jfx/cursor/proton/aero_cross.cur b/src/com/jme3x/jfx/cursor/proton/aero_cross.cur new file mode 100644 index 0000000000000000000000000000000000000000..31d81cf72a5b73d70bfa48d50c9bcfe58f8f2512 GIT binary patch literal 4286 zcmeH|>rN9<6h==6t9VC@f|qE~m}mrzQ4=K^`)2w$zJ-WbE?OU^>HU)9TFp#COcSA< z;n!@k=uFQr-`RVA`w&7BDxp>j;W|HGS3p$_nICfrPi5 zgY(B&;<^H75miJkfm5Avk!$yK7NOQncmTEZbCu6!C_L^|lkc#%UQG@V+k|JZ4ws?u zP`}k`Mf8sldke3?T3my|1O450yRH5&#NL5>*nqrG`ON1Rc(*;bzANbNbvhmOo7{hd zZLkM-!9D0rz2JN-G8dW8_0}5PhYfTOy4`MEt0sTAucuf8_h23Ff&U6`fcu_zF8o`4 z?mP9_8`xHNhJKy3Pp-pjcn&p~doJknj=d(|eK>;OXgAgG^?K9%z5a)$&!PJQ9xbXr znM~q%Jf1QdjpA@PjDx`-_WS+l9;}1t2R)h2g}%%q|8LG3{2-^F(12+z+{5v_%^42U z^#=NS;1*l~eK=3(8@;dZoo)TJiblgasLy>J?E4lx1pDm_Tm|PKn*lEK3F~1m%$YZS zfcNkO%(w8+lX?Pu`|SDSToiHs%*;hkr22#9!{5i&1gi4GVv)29YKk*mo Cw-*-x literal 0 HcmV?d00001 diff --git a/src/com/jme3x/jfx/cursor/proton/aero_ew.cur b/src/com/jme3x/jfx/cursor/proton/aero_ew.cur new file mode 100644 index 0000000000000000000000000000000000000000..ce7886c444422a70f07834a01ff3a65bf262388b GIT binary patch literal 4286 zcmeH}%Wl&^6o$ukTyAXwrBGTx7!^>d5GyXCEpk?{fG1$Z67dr7IJ^ZyET~$QimIx3 z0g^_FBC?1QqA0`nS9WEYsY90tpX#ganRDj+b7sblF~0Fk6d6CZ>|1&XPs)6^Ke#JckeUcVn8j3WexnC;xLF0#AoC+*4^@N99)6d&= z?(;Y+)=WRS5+tFxbhr^-m z_xrZj>)CF%Ydf8eZMWOD)oR&hvw4_5tAU*Bp!w@eIOort*3j@Nt06ac&3RMnQ^01b zA-50ik#`Za{(6r%Ew3T7{%ZuNe%f?eG-}`V4X24l{+K-GmYable zA;~Z8ci<`%{*sgb_x*j#JT_{9_X>ZV7ird+or1rzRD<>-0Xp;AH_~4?hW3!ObB>-T zae8N+C^!D8Dc31DouKDq*N#4!_LgGwo)n5L)J%VAWd+I#loj}|DvcH&{fZBxACuuLu4I(1HBz(H2?qr literal 0 HcmV?d00001 diff --git a/src/com/jme3x/jfx/cursor/proton/aero_helpsel.cur b/src/com/jme3x/jfx/cursor/proton/aero_helpsel.cur new file mode 100644 index 0000000000000000000000000000000000000000..91527fb4f2ef6061dc1eb635396de3e83c3ada8e GIT binary patch literal 4286 zcmeH}PpA?>9DqlCy?qp6|BU`%S{ZdS4-#1LDhQ(MOXv_iDv*c{(Iq++-8&hC2Z=gF zM~|L5c##g`DG!1n#yHy8}+NF-wBz@dk5#!Y`95HNF)T=3onc@|uWTCMiMn*Urb z_Z4XhF2de_NMMb=$KWLF2QN4ZamV9vok%3C`G3K{4LApeqmw9goPM|94qO6xrhTwo ztcl<2^=iW~bg5MO-fT8|40;APL0-d7LhhSRrBWX$AA_u+Bd}c#fkL71X)*`NgRu|b zEI0`*K}RcxC)8z4&&{D)t-ckv_^ce{UPzs>n{XPOgz4WRhwBVJ4`B!mkv&f4b>Gl4 zKJPjfi&_44`pA8B5+naa4$m3<2xKnr50O3Y2ApWO+uxGOq+F{>G#b_Qdi_T}pHE9W z$lmNEYT29C}>QNPXqV58Bv*6DP95*?Wf%3tMj`892F-K*dqYH!4 z3JFETxFO6#v23v-$y`)hi>2ndq7zRN^!0P6ayE~K%tDSWG|=&2fp>NukMy@tM(tW~3S0u$!7T?jaC{M*0Q8fwD1>}ODGhQ(b3UOe)RP8P(NC#YY!o20OsfrU`^(1n7fa2_cu37JRX;5G%ECi zu?Pl(GCVvigM)+8-`_7jxBi+y%mA#9;~<|E&YXLlNB7Un%*fQ#luS%aNGukUNF*X- zV`HWtR!-i(dn>p%2u&l+S&UqIbE-ot?}3&UnV+AR+1Xj4ACr@lGCn?T`r*upBM1Bz zm;-)0*_s!5f6TcjlSx@xT9So@1(}(YAI_XOa&Q%*>=Wf#inG_0V=kf2 z_JFLeu1YGE61yK(ESx#{^znl|2kZ~*1=-es7xn&>bKlt5ke}b%Wo>OuR#sL_KbDu5 zWpQzF%bc)BK+{Nb661cbWAl0R+t6-_MZ!XR`TUvCkM;F+GZys29t&qq^3_M&zgXJT z=ld+9AB@FzIkD;A#H9HR?%VO?aU-9nK0zGX?fUe?iiJHVyvNFkP5%mB$F(Y}`p5h~ z^Bow!Rl4O|);EV*Ys16bTd~%-$1F&V;XPX#G_SEI z1AmoUzl$5Wr(j=U-t+pl@%$#U=K8NOsfmz;`b!XFP`wa;nkI}yrK!MZ-pgmOq$C;u JMC_z+{0D0kA;JIv literal 0 HcmV?d00001 diff --git a/src/com/jme3x/jfx/cursor/proton/aero_move.cur b/src/com/jme3x/jfx/cursor/proton/aero_move.cur new file mode 100644 index 0000000000000000000000000000000000000000..a4b9f02e8e5c15fcd0d8b55524301107a282c3be GIT binary patch literal 4286 zcmeH~%T5$Q6oz|d7{LgP0?H){;{`=UcWRW;>6M!36X;Gi#3#TNK8|mpMg>%KNeIDc z!bNusgv$WKl>gUub(*0k&@#B9$Uogxb*lbTr|Lh|I8M?@IN7Y@Wc2s?xZ|919H&oE zlj92N)vx2cQr}^zX#|p*4W#@h@BgdRiRh@%EM)vAb=nWQq(yK{Xcu~fUjIp*cKQ#h zFn421UGh;!Iyu&yN<3G6K)5Av>^p@<;UIjl+>ha&oR~1}>EySjRN{sBT;Z;8S-=P4 zQ0u*DXsb&;fO~3k(kv`2m#MLHe&1x*GclPvxa9ZdR|3~5gzv`}!em%PdxX%c^!X@FX5J#K# zoO>D**B6Z^t~Ukz=vLdv%F0TZpM8fvi*LfHwE0YRJI?OOZrZfmp2p^8X1sW79@obW zJ^MBPr`6TfFhBiXANvuZi@jSt*uq+9>LSS%WRAP#`@u!}ZxB4qt1gvj+P?gQvN>_f%6zslw_z=v?3+Qx04%@5>B zZ2TO}`9vG&iaR^9XpU_@u%9w?1#+vWZ`q6z2j=$si0w7u9QMS4Jn3@}s{OivcAJFA z*sDD#8pk>C;^6b+JKSj5(;s^g!JoyRJSiW?GO5H9*`q!30pAKoggq7O1Lsi#_^c#$ z0F94v9zy)C+Q|=n>KoCR58TnJGmab>i(B@#;4k+Wd7Lj;?p8R)BlunQ-KJl_&gNal z?s?s^jVxNzTVe}Xx7B92O#{h;SA|;Le}OOJuc}S*q`w!OQSJ$16{)dc!k90L`8HkH z{6LUUW~1=nACx}^+9*lLp5@@ z??+?7yfI(G+C-!K)>usbL-Tz`z`N)xf6Bwgl=8+DdyFY$jQQ!KG;B<6$dq$K!=>C% ezNr8G3Ib2+w42;Zjg_4p!}wy)-}%aBNBIN0(?BHv literal 0 HcmV?d00001 diff --git a/src/com/jme3x/jfx/cursor/proton/aero_nesw.cur b/src/com/jme3x/jfx/cursor/proton/aero_nesw.cur new file mode 100644 index 0000000000000000000000000000000000000000..0a2cc628f4cf6cfe91d74879042ade1944c1d3a8 GIT binary patch literal 4286 zcmeH}Id2nD6osG1b`lIB3nX#E5=ZP52q6Rl2{Ii8Ewn&~L<*=tsYs9L`2z$*0ZBy> zu_!1)q2Q-@Q)ayT@g2*9MhJKFib%fEmp5Z4bI!YS@0~HmGbvLj7&F1o`$=PFjWOqe zkBkp|%Wq@W_-+`(4D7QEWbiuz2l^cBuVbuPNQ0};^>Z){^RNg7I0<=}0{N0h7oj~K zfm3i9ZonYz!cAsUbjDgZ1=R~qwnE4Vm@4j3!q+@fJ8(3zjk(%^Kd%jt;}V; z4dsJ%b1LIKLrgVr1F0XE}Cb3Ku>(A)oSwa2@g;C+^GkyKMI-y zntM5P@8RK{?hD5s|KnkfztfXGnvI$b>W{>FWML$I7Z2+LJg6Ryfoei^ss2=LBswP} z4~<6S-#n-$)fe(1&Vc5%yeOB6MdYE`Y{otK%!kL+O^rGE7BS69`O%!vJxnwr53N>9 z9yXW{FQl!W)ry!8*I^09A@N`)+*e<;+wIs?LH0L>fqyH?$E?c1d`mmkJ31N$!n(aadMcGK4WWwd{s cVtvGalwVrgUgl(xlQCH9^PN>h=Nt}*KQAp+Qvd(} literal 0 HcmV?d00001 diff --git a/src/com/jme3x/jfx/cursor/proton/aero_ns.cur b/src/com/jme3x/jfx/cursor/proton/aero_ns.cur new file mode 100644 index 0000000000000000000000000000000000000000..1bb33fc3beaaa845527eb40e7d14ee59b5257ee7 GIT binary patch literal 4286 zcmeH}O;1xn6o%*C+ahX91yKrWib04b#+_dQr8`aZAGma5{1f3AGG$qZ=9iKPeA+_zo#oTtoAy0=p)6RS5%-l1_n9u}fdD)l}f3MFObI}-c9q2Mu zV3bc|UNLrJULz1Pn~2g@|BuUZ2%Ux*D5b5Q)t|NH5jYDAP=VF7)wB9Fo|S3t!dxzV zQqG6lGg0uI=XJOXI`)fDfGm7)+E1nZb${P35uT?A%cp*1(^0G&O~Ux{eF08o6V+e zG#Vp);A{6`1+;$O`frw|A}h29@`^vjz(EX=(KLDSm`%k&0jP7UY z59FUajIDz5-x=_I|0$=mK!ssoh&^*ygO05Lz#|Ezn@>AU=&#=_MAb6M#B zs{NGgkf}e_*EvugRvz>ke`3B)4Bid;;Iz{^NO#Z@=$v@Je+GT%(|&>8Ew~K2d%f;G z^Bo&;-f(fipY2i2)T*8VP8`y(aZqW?c}ztQiHDu3ro?2!EdBj#rI literal 0 HcmV?d00001 diff --git a/src/com/jme3x/jfx/cursor/proton/aero_nwse.cur b/src/com/jme3x/jfx/cursor/proton/aero_nwse.cur new file mode 100644 index 0000000000000000000000000000000000000000..2d7ac4dc4747c655ce9f6fcfb30fe1adb9b2e87f GIT binary patch literal 4286 zcmeH}OKTHR7=}+K6I(AeX=~fmTT>CdR8(Au7^L$P`~el+>Oz;&m0c^Yy73o?8>K6Y zF2rp&{*Bxq1X4#sOpnjo&Iuu?XgITxeC5eWGL!Rs=k`sF2~5V6O2*{*ds8rG-WYQc z_{v1URbGwR;MzFGGw`3zK*+cb!Qq6XNjpiKgDj*K>i-DLz#=R`3C=E?zgR0OYZm6Vemv=InWvO z6@7QR-FEKBbiOhZ26yEquT4HLz$_dC)u(?A)eKkLbk0@J`tCT62i=#rb_(<_fX1qO z)#}`j;&ydS`&MJn92Qyc`&#c#r!(wU?bCg}Liwvd)wK(7nYn$4d#l^+{>rTy=Pfwb zFSU;OY-Wv4%Y|%aU3;w8>!t42AaL(~+1c5zV~Km)5;|jie#$MX?V1~}Ykp5qGGrskZ2R z>)G!;hW*OJ<$z2zRdr40BdzE93*`WMuJ_^my~3$_u6i(PUE`;J6&jo7_c-K1dtI&e zoYsAmy2j7OF`j|(47l3%`*wp%;&X!D8*BF_t^KiN?e|q{ThHuXiLWw{g^8rqd-zlQ E1YG}7?EnA( literal 0 HcmV?d00001 diff --git a/src/com/jme3x/jfx/cursor/proton/aero_pen.cur b/src/com/jme3x/jfx/cursor/proton/aero_pen.cur new file mode 100644 index 0000000000000000000000000000000000000000..79e63a81f05ac4abb62fe4ce36985581a6f2adfb GIT binary patch literal 4286 zcmeH}&rTCj6o>CjX#tUcDhNbrsR>k4X)&5eVuXb+U=&>$(`aHeMiX7S03SgYzJhGj z#20{Q!k=hZ7~{q!XjDYqxaP|GcHU|@-d}%I^Udg@0>fvxW+Mwgek^M zhcVrJNJ_M0pk9Ihr~)pzG(gltpY`3p2)UY|9rnULP?v26jfEM? zcNcWQ01SI1Icf{gSXlQUcS~Eu$@E0s1$fmOajx^-1RR4yum>6;=$SGe=}d@*m|efQSQQvVq41hhh}v8CG*%3JQT`fCmLfu4a{Vq3TTzPqIUrw|T- z`a!G)`Cq%e^`FM6+_m;2Rr)L3{yJCAit@ZY_XxfNpn2Cds)-7B>00}?_T{&G_0z|n z-gAEyQ3mAJGgochw{$D#?_bw!Zt`qC-PiM4^G*MG*&cB&;u{RxEx+8^)ZiWZZce?g zv%x)sSA9b}^4`yfK?YqjKBe$TOvh;vxEZ&P#S9fn)?5>xJr^Yg`izB${Q z^F5jxy3M%yNmy>v)!+``fBs=*rP#|^XYa)E^zb#jdal&V^nMj&&AHrW;GUKH%7w`{ zm(QPjJC+&AC6mb`jLNGXu013aH`g`YQMaFan4=D-`B&>&?`}Ho2EAK`8vcCm{1~@( qquttdD8LVR4|6aLCT=&(xLr3>wqU$relj->Q=DS0y$6jj3%>vXTKk{? literal 0 HcmV?d00001 diff --git a/src/com/jme3x/jfx/cursor/proton/aero_text.cur b/src/com/jme3x/jfx/cursor/proton/aero_text.cur new file mode 100644 index 0000000000000000000000000000000000000000..c97aae0a0c2437083d92d55dca0c03233027cd2f GIT binary patch literal 4286 zcmeH}TT22#6vwA6yIOXkvKv&C6jV=LslabmAE$58{Q_3fi}ct_njnG?B8WKs{^5YE z5k2fCfk%GsI)n2+bLQ+hYm8^Q%;KUkF+OLb#!MMw)_@_C1ZMd*=9IaPbt3SOBjDkC z5A?wR4EY%3cR%z(H*`Ue7GW`IjKeg{!$K2t-0Sfh1NkRkgEXx<0n4xnJ8%Gdjq5ho z4OjyCs8|GMGZF6suHzB!9#Yd0@7WJx@?iz!XW;s;nT#zI3O1k5+gvVZv)SwyFX^bY>w z0Jp)L@}O8ODh}H75hxGcxd$)kTM_-MQmG{U6jS@4b64K~Ntcs;xm<3mex*`rtA4dw zZL5B*R%@$%yaFgVf8=NmN>fi()ZP$UFKFn^-p~= ztp1l!-T6j8iKcp?dOYg991N@fDF;VD?^!x$hibq2u5vHb{>SqOw+N1&yU_y^u%);ek@ M*8UdvA6^}R$W{U9rXJ~+ytvhs_FgG$OkY+=-g zE@Y!JG^C5ywq|KYS;LxTwurY2vFRwCn?C)YwKo{u*erA_8vJB~LAoC$@L}*JU5}mIns^plM>%4QPgX`Fbn z-C1b6LNv7(Rqcaz8?^0#KInAPkJtS~SzCkp$w+4a*`s0Fp;Dp}#J5qC3rSVg3(Xej zHF09%Q@}F0TINqnyUadc|F`yCE-&xcagWo|telo$mTYuxm z(v+N>s)5|xTU=Op2V<}0qeq*$yZgu5vL_JUfa`LwLy?ZO{g@p}#|(!vAb`{9LEamb*%6~Q-nHxQ%ec513aZL?a0-xfXRvpI*sQFJCyR=1`-_Vk zxw!ZqXa+6dA!xPX$+*cWCB;-3Hj literal 0 HcmV?d00001 diff --git a/src/com/jme3x/jfx/cursor/proton/aero_up.cur b/src/com/jme3x/jfx/cursor/proton/aero_up.cur new file mode 100644 index 0000000000000000000000000000000000000000..f3cf782f7d9e5dd5f3b8add122928b3700246dfc GIT binary patch literal 4286 zcmeH}+e!jK7{|x;(9!HfnRGBZP!K^E9iSpFdxu^idWm|R-Xe@3>GTX;lqQJeg%~1E zzdy7g+D)*B8$b9tyF0qSnQv$3(-_A@Og3vw%EZj|xG^)vm<`~P$pO858goToKl&Ny zXTXyTINT)$i4LM1M<9rZBN+z0)hMt*J`!of99P(hC^`oz)_C8uT=} z$I#(EN3;#|kOWV2&;5RbxgNQBU_6CXG;&7gIxK+dzt*X*;f`TC=A0tZ`!)@MxH~4M rc@BX7^QrZH-Z=W_ literal 0 HcmV?d00001 diff --git a/src/com/jme3x/jfx/cursor/proton/aero_working.ani b/src/com/jme3x/jfx/cursor/proton/aero_working.ani new file mode 100644 index 0000000000000000000000000000000000000000..bdfc70341a028136300bd66d8c512e744ba01f78 GIT binary patch literal 77360 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 DRAG_SOURCE_TYPE; + public static final Class DRAG_TARGET_TYPE; + + private static final String METHOD_HANDLE_DRAG_OVER = "handleDragOver"; + private static final String METHOD_HANDLE_DRAG_DROP = "handleDragDrop"; + private static final String METHOD_HANDLE_DRAG_LEAVE = "handleDragLeave"; + private static final String METHOD_HANDLE_DRAG_ENTER = "handleDragEnter"; + + private static final String METHOD_DRAG_DROP_END = "dragDropEnd"; + private static final String METHOD_GET_DATA = "getData"; + + private static final MethodHandle DRAG_DROP_END_HANDLE; + private static final MethodHandle GET_DATA_HANDLE; + + private static final MethodHandle HANDLE_DRAG_OVER_HANDLE; + private static final MethodHandle HANDLE_DRAG_DROP_HANDLE; + private static final MethodHandle HANDLE_DRAG_LEAVE_HANDLE; + private static final MethodHandle HANDLE_DRAG_ENTER_HANDLE; + + static { + + try { + + DRAG_SOURCE_TYPE = Class.forName("com.sun.javafx.embed.EmbeddedSceneDSInterface"); + DRAG_TARGET_TYPE = Class.forName("com.sun.javafx.embed.EmbeddedSceneDTInterface"); + + final Constructor lookupConstructor = MethodHandles.Lookup.class.getDeclaredConstructor(Class.class); + lookupConstructor.setAccessible(true); + + final MethodHandles.Lookup sourceLookup = lookupConstructor.newInstance(DRAG_SOURCE_TYPE); + + DRAG_DROP_END_HANDLE = sourceLookup.findVirtual(DRAG_SOURCE_TYPE, METHOD_DRAG_DROP_END, MethodType.methodType(void.class, TransferMode.class)); + GET_DATA_HANDLE = sourceLookup.findVirtual(DRAG_SOURCE_TYPE, METHOD_GET_DATA, MethodType.methodType(Object.class, String.class)); + + final MethodHandles.Lookup targetLookup = lookupConstructor.newInstance(DRAG_TARGET_TYPE); + final MethodType handleDragOverMethodType = MethodType.methodType(TransferMode.class, toArray(int.class, int.class, int.class, int.class, TransferMode.class)); + final MethodType handleDragDropMethodType = MethodType.methodType(TransferMode.class, toArray(int.class, int.class, int.class, int.class, TransferMode.class)); + final MethodType handleDragEnterMethodType = MethodType.methodType(TransferMode.class, toArray(int.class, int.class, int.class, int.class, TransferMode.class, DRAG_SOURCE_TYPE)); + + HANDLE_DRAG_LEAVE_HANDLE = targetLookup.findVirtual(DRAG_TARGET_TYPE, METHOD_HANDLE_DRAG_LEAVE, MethodType.methodType(void.class)); + HANDLE_DRAG_OVER_HANDLE = targetLookup.findVirtual(DRAG_TARGET_TYPE, METHOD_HANDLE_DRAG_OVER, handleDragOverMethodType); + HANDLE_DRAG_DROP_HANDLE = targetLookup.findVirtual(DRAG_TARGET_TYPE, METHOD_HANDLE_DRAG_DROP, handleDragDropMethodType); + HANDLE_DRAG_ENTER_HANDLE = targetLookup.findVirtual(DRAG_TARGET_TYPE, METHOD_HANDLE_DRAG_ENTER, handleDragEnterMethodType); + + } catch (final ClassNotFoundException | InvocationTargetException | InstantiationException | IllegalAccessException | NoSuchMethodException e) { + throw new RuntimeException(e); + } + } + + public static TransferMode handleDragEnter(final Object target, final int x, final int y, final TransferMode transferMode, final Object source) { + try { + return (TransferMode) HANDLE_DRAG_ENTER_HANDLE.invoke(target, x, y, x, y, transferMode, source); + } catch (final Throwable throwable) { + throw new RuntimeException(throwable); + } + } + + public static TransferMode handleDragOver(final Object target, final int x, final int y, final TransferMode transferMode) { + try { + return (TransferMode) HANDLE_DRAG_OVER_HANDLE.invoke(target, x, y, x, y, transferMode); + } catch (final Throwable throwable) { + throw new RuntimeException(throwable); + } + } + + public static TransferMode handleDragDrop(final Object target, final int x, final int y, final TransferMode transferMode) { + try { + return (TransferMode) HANDLE_DRAG_DROP_HANDLE.invoke(target, x, y, x, y, transferMode); + } catch (final Throwable throwable) { + throw new RuntimeException(throwable); + } + } + + public static Object getData(final Object source, final String name) { + try { + return GET_DATA_HANDLE.invoke(source, name); + } catch (final Throwable throwable) { + throw new RuntimeException(throwable); + } + } + + public static void handleDragLeave(final Object target) { + try { + HANDLE_DRAG_LEAVE_HANDLE.invoke(target); + } catch (final Throwable throwable) { + throw new RuntimeException(throwable); + } + } + + public static void dragDropEnd(final Object source, final TransferMode transferMode) { + try { + DRAG_DROP_END_HANDLE.invoke(source, transferMode); + } catch (final Throwable throwable) { + throw new RuntimeException(throwable); + } + } +} diff --git a/src/com/jme3x/jfx/util/JFXEmbeddedUtils.java b/src/com/jme3x/jfx/util/JFXEmbeddedUtils.java index e2bb14a..3dc0f06 100644 --- a/src/com/jme3x/jfx/util/JFXEmbeddedUtils.java +++ b/src/com/jme3x/jfx/util/JFXEmbeddedUtils.java @@ -1,6 +1,7 @@ package com.jme3x.jfx.util; -import com.jme3x.jfx.JmeJFXPanel; +import com.jme3x.jfx.JmeFxDNDHandler; +import com.jme3x.jfx.JmeFxPanel; import java.awt.event.FocusEvent; import java.awt.event.KeyEvent; @@ -39,6 +40,8 @@ public class JFXEmbeddedUtils { private static final String METHOD_GET_PIXELS = "getPixels"; private static final String METHOD_SET_PIXEL_SCALE_FACTORS = "setPixelScaleFactors"; + private static final String METHOD_CREATE_DROP_TARGET = "createDropTarget"; + private static final String METHOD_SET_DRAG_START_LISTENER = "setDragStartListener"; private static final String METHOD_SEND_RESIZE_EVENT_TO_FX = "sendResizeEventToFX"; private static final String METHOD_SEND_MOVE_EVENT_TO_FX = "sendMoveEventToFX"; @@ -65,6 +68,8 @@ public class JFXEmbeddedUtils { private final static MethodHandle GET_PIXELS_HANDLE; private final static MethodHandle SET_PIXEL_SCALE_FACTORS_HANDLE; + private final static MethodHandle CREATE_DROP_TARGET_HANDLE; + private final static MethodHandle SET_DRAG_START_LISTENER_HANDLE; static { @@ -100,65 +105,89 @@ public class JFXEmbeddedUtils { final MethodHandles.Lookup sceneLookup = lookupConstructor.newInstance(SCENE_TYPE); GET_PIXELS_HANDLE = sceneLookup.findVirtual(SCENE_TYPE, METHOD_GET_PIXELS, getPixelsMethodType); SET_PIXEL_SCALE_FACTORS_HANDLE = sceneLookup.findVirtual(SCENE_TYPE, METHOD_SET_PIXEL_SCALE_FACTORS, setPixelScaleFactorsMethodType); + CREATE_DROP_TARGET_HANDLE = sceneLookup.findVirtual(SCENE_TYPE, METHOD_CREATE_DROP_TARGET, MethodType.methodType(JFXDNDUtils.DRAG_TARGET_TYPE)); + SET_DRAG_START_LISTENER_HANDLE = sceneLookup.findVirtual(SCENE_TYPE, METHOD_SET_DRAG_START_LISTENER, MethodType.methodType(void.class, JmeFxDNDHandler.LISTENER_TYPE)); } catch (final NoSuchFieldException | NoSuchMethodException | InvocationTargetException | InstantiationException | IllegalAccessException | ClassNotFoundException e) { throw new RuntimeException(e); } } + /** + * Установка слушателя DND в сцене JavaFX. + */ + public static void setDragStartListener(final JmeFxPanel panel, final Object listener) { + try { + SET_DRAG_START_LISTENER_HANDLE.invoke(panel.getEmbeddedScene(), listener); + } catch (final Throwable throwable) { + throw new RuntimeException(throwable); + } + } + + /** + * Создание целевого элемента для DND. + */ + public static Object createDropTarget(final JmeFxPanel panel) { + try { + return CREATE_DROP_TARGET_HANDLE.invoke(panel.getEmbeddedScene()); + } catch (final Throwable throwable) { + throw new RuntimeException(throwable); + } + } + /** * Вытащить из панели EmbeddedStage. */ - public static Object getStage(final JmeJFXPanel panel) { + public static Object getStage(final JmeFxPanel panel) { return STAGE_VAR_HANDLE.get(panel); } /** * Вытащить из панели EmbeddedScene. */ - public static Object getScene(final JmeJFXPanel panel) { + public static Object getScene(final JmeFxPanel panel) { return SCENE_VAR_HANDLE.get(panel); } /** * Установка новой высоты для EmbeddedScene. */ - public static void setPHeight(final JmeJFXPanel panel, final int value) { + public static void setPHeight(final JmeFxPanel panel, final int value) { P_HEIGHT_VAR_HANDLE.set(panel, value); } /** * Установка новой высоты для EmbeddedStage. */ - public static void setPWidth(final JmeJFXPanel panel, final int value) { + public static void setPWidth(final JmeFxPanel panel, final int value) { P_WIDTH_VAR_HANDLE.set(panel, value); } /** * Установка новой позиции по X для EmbeddedStage. */ - public static void setScreenX(final JmeJFXPanel panel, final int value) { + public static void setScreenX(final JmeFxPanel panel, final int value) { SCREEN_X_VAR_HANDLE.getAndSet(panel, value); } /** * Установка новой позиции по Y для EmbeddedStage. */ - public static void setScreenY(final JmeJFXPanel panel, final int value) { + public static void setScreenY(final JmeFxPanel panel, final int value) { SCREEN_Y_VAR_HANDLE.getAndSet(panel, value); } /** * Установить флаг захвата движения мышкой. */ - public static void setCapturingMouse(final JmeJFXPanel panel, final boolean value) { + public static void setCapturingMouse(final JmeFxPanel panel, final boolean value) { IS_CAPTURING_MOUSE_VAR_HANDLE.set(panel, value); } /** * Обновить положение EmbeddedScene. */ - public static void sendMoveEventToFX(final JmeJFXPanel panel) { + public static void sendMoveEventToFX(final JmeFxPanel panel) { try { SEND_MOVE_EVENT_TO_FX_HANDLE.invoke(panel); } catch (final Throwable e) { @@ -169,7 +198,7 @@ public static void sendMoveEventToFX(final JmeJFXPanel panel) { /** * Обновить размер EmbeddedScene. */ - public static void sendResizeEventToFX(final JmeJFXPanel panel) { + public static void sendResizeEventToFX(final JmeFxPanel panel) { try { SEND_RESIZE_EVENT_TO_FX_HANDLE.invoke(panel); } catch (final Throwable e) { @@ -180,7 +209,7 @@ public static void sendResizeEventToFX(final JmeJFXPanel panel) { /** * Отправить на обработку событие связанное с мышью в EmbeddedScene. */ - public static void sendMouseEventToFX(final JmeJFXPanel panel, final MouseEvent event) { + public static void sendMouseEventToFX(final JmeFxPanel panel, final MouseEvent event) { try { SEND_MOUSE_EVENT_TO_FX_HANDLE.invoke(panel, event); } catch (final Throwable e) { @@ -191,7 +220,7 @@ public static void sendMouseEventToFX(final JmeJFXPanel panel, final MouseEvent /** * Отправить на обработку событие связанное с фокусом окна в EmbeddedScene. */ - public static void sendFocusEventToFX(final JmeJFXPanel panel, final FocusEvent event) { + public static void sendFocusEventToFX(final JmeFxPanel panel, final FocusEvent event) { try { SEND_FOCUS_EVENT_TO_FX_HANDLE.invoke(panel, event); } catch (final Throwable e) { @@ -202,7 +231,7 @@ public static void sendFocusEventToFX(final JmeJFXPanel panel, final FocusEvent /** * Отправить на обработку событие связанное с клавиатурой в EmbeddedScene. */ - public static void sendKeyEventToFX(final JmeJFXPanel panel, final KeyEvent event) { + public static void sendKeyEventToFX(final JmeFxPanel panel, final KeyEvent event) { try { SEND_KEY_EVENT_TO_FX_HANDLE.invoke(panel, event); } catch (final Throwable e) { @@ -219,7 +248,7 @@ public static void sendKeyEventToFX(final JmeJFXPanel panel, final KeyEvent even * @param height высота. * @return были ли данные получены. */ - public static boolean getPixels(final JmeJFXPanel panel, final IntBuffer buffer, final int width, final int height) { + public static boolean getPixels(final JmeFxPanel panel, final IntBuffer buffer, final int width, final int height) { final Object embeddedScene = panel.getEmbeddedScene(); final Object result; @@ -239,7 +268,7 @@ public static boolean getPixels(final JmeJFXPanel panel, final IntBuffer buffer, * @param scaleX маштабирование по оси X. * @param scaleY маштабирование по оси Y. */ - public static void setPixelScaleFactors(final JmeJFXPanel panel, final float scaleX, final float scaleY) { + public static void setPixelScaleFactors(final JmeFxPanel panel, final float scaleX, final float scaleY) { final Object embeddedScene = panel.getEmbeddedScene(); try { diff --git a/test-src/com/jme3x/jfx/TestJFXPanel.java b/test-src/com/jme3x/jfx/TestJFXPanel.java index 5011b4a..d07811d 100644 --- a/test-src/com/jme3x/jfx/TestJFXPanel.java +++ b/test-src/com/jme3x/jfx/TestJFXPanel.java @@ -18,7 +18,7 @@ public class TestJFXPanel extends SimpleApplication { private JmeFxContainer container; - public static void main(String[] args) { + public static void main(String[] args) throws Throwable { // фикс рендера шрифтов в FX System.setProperty("prism.lcdtext", "false"); From 75e7ab703e0fa577fb703ec484b33f7b518ce02d Mon Sep 17 00:00:00 2001 From: javasabr Date: Fri, 2 Dec 2016 12:29:58 +0300 Subject: [PATCH 06/24] started implementing the integrating jME to JavaFX ImageView --- .idea/dictionaries/ronn.xml | 3 + .idea/misc.xml | 12 +- .../jfx/injfx/JmeContextOffscreenSurface.java | 140 ++++++++++++ src/com/jme3x/jfx/injfx/JmeForImageView.java | 113 ++++++++++ .../injfx/SceneProcessorCopyToImageView.java | 204 ++++++++++++++++++ 5 files changed, 461 insertions(+), 11 deletions(-) create mode 100644 .idea/dictionaries/ronn.xml create mode 100644 src/com/jme3x/jfx/injfx/JmeContextOffscreenSurface.java create mode 100644 src/com/jme3x/jfx/injfx/JmeForImageView.java create mode 100644 src/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java diff --git a/.idea/dictionaries/ronn.xml b/.idea/dictionaries/ronn.xml new file mode 100644 index 0000000..a1ba98d --- /dev/null +++ b/.idea/dictionaries/ronn.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 1344a47..667ebe2 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -3,17 +3,7 @@ - - - - - - - - - - - + \ No newline at end of file diff --git a/src/com/jme3x/jfx/injfx/JmeContextOffscreenSurface.java b/src/com/jme3x/jfx/injfx/JmeContextOffscreenSurface.java new file mode 100644 index 0000000..a88b758 --- /dev/null +++ b/src/com/jme3x/jfx/injfx/JmeContextOffscreenSurface.java @@ -0,0 +1,140 @@ +package com.jme3x.jfx.injfx; + +import com.jme3.input.JoyInput; +import com.jme3.input.KeyInput; +import com.jme3.input.MouseInput; +import com.jme3.input.TouchInput; +import com.jme3.opencl.Context; +import com.jme3.renderer.Renderer; +import com.jme3.system.AppSettings; +import com.jme3.system.JmeContext; +import com.jme3.system.JmeSystem; +import com.jme3.system.SystemListener; +import com.jme3.system.Timer; + +import javafx.stage.Stage; + +import static com.jme3x.jfx.util.JFXPlatform.runInFXThread; + +/** + * The implementation of the {@link JmeContext} for integrating to JavaFX. + * + * @author empirephoenix + */ +public class JmeContextOffscreenSurface implements JmeContext { + + protected final Stage window; + protected final AppSettings settings; + + protected JmeContext backgroundContext; + + public JmeContextOffscreenSurface(final Stage window) { + this.window = window; + this.settings = createSettings(); + } + + protected AppSettings createSettings() { + final AppSettings settings = new AppSettings(true); + settings.setRenderer(AppSettings.LWJGL_OPENGL3); + return settings; + } + + protected JmeContext createBackgroundContext() { + return JmeSystem.newContext(settings, Type.OffscreenSurface); + } + + @Override + public Type getType() { + return Type.OffscreenSurface; + } + + @Override + public void setSettings(final AppSettings settings) { + this.settings.copyFrom(settings); + this.settings.setRenderer(AppSettings.LWJGL_OPENGL3); + this.backgroundContext.setSettings(settings); + } + + @Override + public void setSystemListener(final SystemListener listener) { + backgroundContext.setSystemListener(listener); + } + + @Override + public AppSettings getSettings() { + return settings; + } + + @Override + public Renderer getRenderer() { + return backgroundContext.getRenderer(); + } + + @Override + public Context getOpenCLContext() { + return null; + } + + @Override + public MouseInput getMouseInput() { + //return backgroundContext.getMouseInput(); + return null; + } + + @Override + public KeyInput getKeyInput() { + //return backgroundContext.getKeyInput(); + return null; + } + + @Override + public JoyInput getJoyInput() { + return null; + } + + @Override + public TouchInput getTouchInput() { + return null; + } + + @Override + public Timer getTimer() { + return backgroundContext.getTimer(); + } + + @Override + public void setTitle(final String title) { + runInFXThread(() -> window.setTitle(title)); + } + + @Override + public boolean isCreated() { + return backgroundContext != null && backgroundContext.isCreated(); + } + + @Override + public boolean isRenderable() { + return backgroundContext != null && backgroundContext.isRenderable(); + } + + @Override + public void setAutoFlushFrames(final boolean enabled) { + // TODO Auto-generated method stub + } + + @Override + public void create(final boolean waitFor) { + backgroundContext.create(waitFor); + } + + @Override + public void restart() { + } + + @Override + public void destroy(boolean waitFor) { + if (backgroundContext == null) throw new IllegalStateException("Not created"); + // destroy wrapped context + backgroundContext.destroy(waitFor); + } +} \ No newline at end of file diff --git a/src/com/jme3x/jfx/injfx/JmeForImageView.java b/src/com/jme3x/jfx/injfx/JmeForImageView.java new file mode 100644 index 0000000..2965c31 --- /dev/null +++ b/src/com/jme3x/jfx/injfx/JmeForImageView.java @@ -0,0 +1,113 @@ +package com.jme3x.jfx.injfx; + +import com.jme3.app.DebugKeysAppState; +import com.jme3.app.SimpleApplication; +import com.jme3.system.AppSettings; + +import java.util.concurrent.Future; +import java.util.function.Function; + +import javafx.scene.image.ImageView; + +/** + * JmeForImageView create a jme'SimpleApplication viewable into an JavaFX's ImageView. + * + * You can manage the wrapped SimpleApplication by calling enqueue (by example to add/remove + * AppState, Node, Light, to change the AppSettings...). + * + * See TestDisplayInImageView.java for sample usage. + * + * The usage of the class is optional, it can avoid some + * pitfall in the configuration. If you want a better control, I suggest you to browse + * the source of this class to see sample of configuration and usage of + * SceneProcessorCopyToImage. + * + * @TODO auto-stop when the ImageView is removed from JavaFX Stage + * @author davidB + */ +public class JmeForImageView { + + private static SimpleApplication makeJmeApplication(int framerate) { + AppSettings settings = new AppSettings(true); + + // important to use those settings + settings.setFullscreen(false); + settings.setUseInput(false); + settings.setFrameRate(Math.max(1, Math.min(60, framerate))); + settings.setCustomRenderer(com.jme3x.jfx.injfx.JmeContextOffscreenSurface.class); + + SimpleApplication app = new SimpleApplication(){ + @Override + public void simpleInitApp() { + // to prevent a NPE (due to setUseInput(null)) on Application.stop() + getStateManager().detach(getStateManager().getState(DebugKeysAppState.class)); + } + }; + app.setSettings(settings); + app.setShowSettings(false); + return app; + } + + private SimpleApplication jmeApp0; + private SceneProcessorCopyToImageView jmeAppDisplayBinder = new SceneProcessorCopyToImageView(); + + /** + * Lazy creation of the wrapped SimpleApplication. + */ + private SimpleApplication findOrCreate() { + if (jmeApp0 == null) { + jmeApp0 = makeJmeApplication(30); + jmeApp0.start(); + } + return jmeApp0; + } + + /** + * Bind the wrapped SimpleApplication to an imageView. + * + *
    + *
  • Only one imageView can be binded.
  • + *
  • Only jmeApp.getViewPort(), jmeApp.getGuiViewPort() are binded
  • + *
+ * + * @param imageView destination + * @return Future when bind is done (async) + */ + public Future bind(ImageView imageView) { + return enqueue((jmeApp) -> { + jmeAppDisplayBinder.bind(imageView, jmeApp); + return true; + }); + } + + public Future unbind() { + return enqueue((jmeApp) -> { + jmeAppDisplayBinder.unbind(); + return true; + }); + } + + /** + * Enqueue action to apply in Jme's Thread + * Action can be add/remove AppState, Node, Light, + * change the AppSettings.... + * + * @param f(jmeApp) the action to apply + */ + public Future enqueue(Function f) { + SimpleApplication jmeApp = findOrCreate(); + return jmeApp.enqueue(() -> {return f.apply(jmeApp);}); + } + + public void stop(boolean waitFor) { + if (jmeApp0 != null){ + try { + unbind().get(); + } catch (Exception exc) { + //TODO + exc.printStackTrace(); + } + jmeApp0.stop(waitFor); + } + } +} \ No newline at end of file diff --git a/src/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java b/src/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java new file mode 100644 index 0000000..838196b --- /dev/null +++ b/src/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java @@ -0,0 +1,204 @@ +package com.jme3x.jfx.injfx; + +import com.jme3.app.Application; +import com.jme3.post.SceneProcessor; +import com.jme3.renderer.RenderManager; +import com.jme3.renderer.ViewPort; +import com.jme3.renderer.queue.RenderQueue; +import com.jme3.texture.FrameBuffer; +import com.jme3.texture.Image; +import com.jme3.texture.Image.Format; +import com.jme3.util.BufferUtils; +import com.jme3x.jfx.util.JFXPlatform; + +import java.nio.ByteBuffer; +import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; + +import javafx.beans.value.ChangeListener; +import javafx.scene.image.ImageView; +import javafx.scene.image.PixelFormat; +import javafx.scene.image.WritableImage; + +//https://github.com/caprica/vlcj-javafx/blob/master/src/test/java/uk/co/caprica/vlcj/javafx/test/JavaFXDirectRenderingTest.java +//http://stackoverflow.com/questions/15951284/javafx-image-resizing +//http://hub.jmonkeyengine.org/forum/topic/offscreen-rendering-problem/ +//TODO manage suspend/resume (eg when image/stage is hidden) +public class SceneProcessorCopyToImageView implements SceneProcessor { + + private RenderManager rm; + private ViewPort latestViewPorts; + private int askWidth = 1; + private int askHeight = 1; + private boolean askFixAspect = true; + private TransfertImage timage; + private AtomicBoolean reshapeNeeded = new AtomicBoolean(true); + + private ImageView imgView; + private ChangeListener wlistener = (w,o,n)->{ + componentResized(n.intValue(), (int)this.imgView.getFitHeight(), this.imgView.preserveRatioProperty().get()); + }; + private ChangeListener hlistener = (w,o,n)->{ + componentResized((int)this.imgView.getFitWidth(), n.intValue(), this.imgView.preserveRatioProperty().get()); + }; + private ChangeListener rlistener = (w,o,n)->{ + componentResized((int)this.imgView.getFitWidth(), (int)this.imgView.getFitHeight(), n.booleanValue()); + }; + + public void componentResized(int w, int h, boolean fixAspect) { + int newWidth2 = Math.max(w, 1); + int newHeight2 = Math.max(h, 1); + if (askWidth != newWidth2 || askWidth != newHeight2 || askFixAspect != fixAspect){ + askWidth = newWidth2; + askHeight = newHeight2; + askFixAspect = fixAspect; + reshapeNeeded.set(true); + } + } + + public void bind(ImageView view, Application jmeApp){ + unbind(); + + if (jmeApp != null) { + List vps = jmeApp.getRenderManager().getPostViews(); + latestViewPorts = vps.get(vps.size() - 1); + latestViewPorts.addProcessor(this); + } + + JFXPlatform.runInFXThread(() -> { + imgView = view; + if (imgView != null) { + imgView.fitWidthProperty().addListener(wlistener); + imgView.fitHeightProperty().addListener(hlistener); + imgView.preserveRatioProperty().addListener(rlistener); + componentResized((int)imgView.getFitWidth(), (int)imgView.getFitHeight(), imgView.isPreserveRatio()); + imgView.setScaleY(-1.0); + } + }); + } + + public void unbind(){ + + if (latestViewPorts != null){ + latestViewPorts.removeProcessor(this); // call this.cleanup() + latestViewPorts = null; + } + + JFXPlatform.runInFXThread(() -> { + if (imgView != null) { + imgView.fitWidthProperty().removeListener(wlistener); + imgView.fitHeightProperty().removeListener(hlistener); + } + }); + } + + @Override + public void initialize(RenderManager rm, ViewPort vp) { + if (this.rm == null){ + // First time called in OGL thread + this.rm = rm; + } + } + + private TransfertImage reshapeInThread(int width0, int height0, boolean fixAspect) { + TransfertImage ti = new TransfertImage(width0, height0); + + rm.getRenderer().setMainFrameBufferOverride(ti.fb); + rm.notifyReshape(ti.width, ti.height); + +// for (ViewPort vp : viewPorts){ +// vp.getCamera().resize(ti.width, ti.height, fixAspect); +// +// // NOTE: Hack alert. This is done ONLY for custom framebuffers. +// // Main framebuffer should use RenderManager.notifyReshape(). +// for (SceneProcessor sp : vp.getProcessors()){ +// sp.reshape(vp, ti.width, ti.height); +// } +// } + return ti; + } + + @Override + public boolean isInitialized() { + return timage != null; + } + + @Override + public void preFrame(float tpf) { + } + + @Override + public void postQueue(RenderQueue rq) { + } + + @Override + public void postFrame(FrameBuffer out) { + if (imgView != null && timage != null) { + // if (out != timage.fb){ + // throw new IllegalStateException("Why did you change the output framebuffer? " + out + " != " + timage.fb); + // } + timage.copyFrameBufferToImage(rm, imgView); + } + // for the next frame + if (reshapeNeeded.getAndSet(false)){ + timage = reshapeInThread(askWidth, askHeight, askFixAspect); + //TODO dispose previous timage ASAP (when no longer used in JavafFX thread) + } + } + + @Override + public void cleanup() { + if (timage != null) { + timage.dispose(); + timage = null; + } + } + + @Override + public void reshape(ViewPort vp, int w, int h) { + } + + static class TransfertImage { + public final int width; + public final int height; + public final FrameBuffer fb; + public final ByteBuffer byteBuf; + public final WritableImage img; + private ImageView lastIv = null; + + TransfertImage(int width, int height) { + this.width = width; + this.height = height; + + fb = new FrameBuffer(width, height, 1); + fb.setDepthBuffer(Format.Depth); + fb.setColorBuffer(Format.BGRA8); + + byteBuf = BufferUtils.createByteBuffer(width * height * 4); + + img = new WritableImage(width, height); + } + + /** SHOULD run in JME'Display thread */ + void copyFrameBufferToImage(RenderManager rm, ImageView iv) { + synchronized (byteBuf) { + // Convert screenshot. + byteBuf.clear(); + rm.getRenderer().readFrameBufferWithFormat(fb, byteBuf, Image.Format.BGRA8); + } + JFXPlatform.runInFXThread(() -> { + synchronized (byteBuf) { + if (lastIv != iv) { + lastIv = iv; + lastIv.setImage(img); + } + img.getPixelWriter().setPixels(0, 0, width, height, PixelFormat.getByteBgraInstance(), byteBuf, width * 4); + } + }); + } + + void dispose() { + fb.dispose(); + } + } +} \ No newline at end of file From 0f9a2889af2e83f5df12c906d8f00dcd56d9d74c Mon Sep 17 00:00:00 2001 From: javasabr Date: Sat, 3 Dec 2016 17:04:35 +0300 Subject: [PATCH 07/24] updated the implementation of InJFX --- src/com/jme3/system/lwjgl/LwjglWindow.java | 665 ++++++++++++++++++ src/com/jme3x/jfx/JmeFxContainer.java | 5 +- .../jfx/injfx/JmeContextOffscreenSurface.java | 14 +- .../injfx/SceneProcessorCopyToImageView.java | 265 ++++--- src/com/jme3x/jfx/injfx/TransferImage.java | 167 +++++ src/com/jme3x/jfx/util/JFXPlatform.java | 20 +- test-src/com/jme3x/jfx/TestJmeToJFX.java | 117 +++ .../com/jme3x/jfx/TestOffscreenContext.java | 54 ++ 8 files changed, 1152 insertions(+), 155 deletions(-) create mode 100644 src/com/jme3/system/lwjgl/LwjglWindow.java create mode 100644 src/com/jme3x/jfx/injfx/TransferImage.java create mode 100644 test-src/com/jme3x/jfx/TestJmeToJFX.java create mode 100644 test-src/com/jme3x/jfx/TestOffscreenContext.java diff --git a/src/com/jme3/system/lwjgl/LwjglWindow.java b/src/com/jme3/system/lwjgl/LwjglWindow.java new file mode 100644 index 0000000..e133c0b --- /dev/null +++ b/src/com/jme3/system/lwjgl/LwjglWindow.java @@ -0,0 +1,665 @@ +/* + * Copyright (c) 2009-2012 jMonkeyEngine + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'jMonkeyEngine' nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package com.jme3.system.lwjgl; + +import com.jme3.input.JoyInput; +import com.jme3.input.KeyInput; +import com.jme3.input.MouseInput; +import com.jme3.input.TouchInput; +import com.jme3.input.lwjgl.GlfwJoystickInput; +import com.jme3.input.lwjgl.GlfwKeyInput; +import com.jme3.input.lwjgl.GlfwMouseInput; +import com.jme3.system.AppSettings; +import com.jme3.system.JmeContext; +import com.jme3.system.JmeSystem; +import com.jme3.system.NanoTimer; +import com.jme3.util.BufferUtils; + +import org.lwjgl.Version; +import org.lwjgl.glfw.GLFWErrorCallback; +import org.lwjgl.glfw.GLFWImage; +import org.lwjgl.glfw.GLFWVidMode; +import org.lwjgl.glfw.GLFWWindowFocusCallback; +import org.lwjgl.glfw.GLFWWindowSizeCallback; + +import java.awt.*; +import java.awt.image.BufferedImage; +import java.nio.ByteBuffer; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.logging.Level; +import java.util.logging.Logger; + +import static org.lwjgl.glfw.GLFW.GLFW_ALPHA_BITS; +import static org.lwjgl.glfw.GLFW.GLFW_BLUE_BITS; +import static org.lwjgl.glfw.GLFW.GLFW_CONTEXT_VERSION_MAJOR; +import static org.lwjgl.glfw.GLFW.GLFW_CONTEXT_VERSION_MINOR; +import static org.lwjgl.glfw.GLFW.GLFW_DEPTH_BITS; +import static org.lwjgl.glfw.GLFW.GLFW_FALSE; +import static org.lwjgl.glfw.GLFW.GLFW_GREEN_BITS; +import static org.lwjgl.glfw.GLFW.GLFW_OPENGL_CORE_PROFILE; +import static org.lwjgl.glfw.GLFW.GLFW_OPENGL_DEBUG_CONTEXT; +import static org.lwjgl.glfw.GLFW.GLFW_OPENGL_FORWARD_COMPAT; +import static org.lwjgl.glfw.GLFW.GLFW_OPENGL_PROFILE; +import static org.lwjgl.glfw.GLFW.GLFW_RED_BITS; +import static org.lwjgl.glfw.GLFW.GLFW_REFRESH_RATE; +import static org.lwjgl.glfw.GLFW.GLFW_RESIZABLE; +import static org.lwjgl.glfw.GLFW.GLFW_SAMPLES; +import static org.lwjgl.glfw.GLFW.GLFW_SRGB_CAPABLE; +import static org.lwjgl.glfw.GLFW.GLFW_STENCIL_BITS; +import static org.lwjgl.glfw.GLFW.GLFW_STEREO; +import static org.lwjgl.glfw.GLFW.GLFW_TRUE; +import static org.lwjgl.glfw.GLFW.GLFW_VISIBLE; +import static org.lwjgl.glfw.GLFW.glfwCreateWindow; +import static org.lwjgl.glfw.GLFW.glfwDefaultWindowHints; +import static org.lwjgl.glfw.GLFW.glfwDestroyWindow; +import static org.lwjgl.glfw.GLFW.glfwGetPrimaryMonitor; +import static org.lwjgl.glfw.GLFW.glfwGetVideoMode; +import static org.lwjgl.glfw.GLFW.glfwInit; +import static org.lwjgl.glfw.GLFW.glfwMakeContextCurrent; +import static org.lwjgl.glfw.GLFW.glfwPollEvents; +import static org.lwjgl.glfw.GLFW.glfwSetErrorCallback; +import static org.lwjgl.glfw.GLFW.glfwSetWindowFocusCallback; +import static org.lwjgl.glfw.GLFW.glfwSetWindowIcon; +import static org.lwjgl.glfw.GLFW.glfwSetWindowPos; +import static org.lwjgl.glfw.GLFW.glfwSetWindowSizeCallback; +import static org.lwjgl.glfw.GLFW.glfwSetWindowTitle; +import static org.lwjgl.glfw.GLFW.glfwShowWindow; +import static org.lwjgl.glfw.GLFW.glfwSwapBuffers; +import static org.lwjgl.glfw.GLFW.glfwSwapInterval; +import static org.lwjgl.glfw.GLFW.glfwWindowHint; +import static org.lwjgl.glfw.GLFW.glfwWindowShouldClose; +import static org.lwjgl.opengl.GL11.GL_FALSE; +import static org.lwjgl.system.MemoryUtil.NULL; + +/** + * A wrapper class over the GLFW framework in LWJGL 3. + * + * @author Daniel Johansson + */ +public abstract class LwjglWindow extends LwjglContext implements Runnable { + + private static final Logger LOGGER = Logger.getLogger(LwjglWindow.class.getName()); + + protected final AtomicBoolean needClose = new AtomicBoolean(false); + protected final AtomicBoolean needRestart = new AtomicBoolean(false); + + private final JmeContext.Type type; + + private GLFWErrorCallback errorCallback; + private GLFWWindowSizeCallback windowSizeCallback; + private GLFWWindowFocusCallback windowFocusCallback; + + private Thread mainThread; + + private double frameSleepTime; + private long window = NULL; + private int frameRateLimit = -1; + + protected boolean wasActive = false; + protected boolean autoFlush = true; + protected boolean allowSwapBuffers = false; + + public LwjglWindow(final JmeContext.Type type) { + if (!JmeContext.Type.Display.equals(type) && !JmeContext.Type.OffscreenSurface.equals(type) && !JmeContext.Type.Canvas.equals(type)) { + throw new IllegalArgumentException("Unsupported type '" + type.name() + "' provided"); + } + + this.type = type; + } + + /** + * @return Type.Display or Type.Canvas + */ + public JmeContext.Type getType() { + return type; + } + + /** + * Set the title if its a windowed display + * + * @param title the title to set + */ + public void setTitle(final String title) { + if (created.get() && window != NULL) { + glfwSetWindowTitle(window, title); + } + } + + /** + * Restart if its a windowed or full-screen display. + */ + public void restart() { + if (created.get()) { + needRestart.set(true); + } else { + LOGGER.warning("Display is not created, cannot restart window."); + } + } + + /** + * Apply the settings, changing resolution, etc. + * + * @param settings the settings to apply when creating the context. + */ + protected void createContext(final AppSettings settings) { + glfwSetErrorCallback(errorCallback = new GLFWErrorCallback() { + @Override + public void invoke(int error, long description) { + final String message = GLFWErrorCallback.getDescription(description); + listener.handleError(message, new Exception(message)); + } + + @Override + public void close() { + super.close(); + } + + @Override + public void callback(long args) { + super.callback(args); + } + }); + + if (!glfwInit()) { + throw new IllegalStateException("Unable to initialize GLFW"); + } + + glfwDefaultWindowHints(); + + if (settings.getRenderer().equals(AppSettings.LWJGL_OPENGL3)) { + glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); + glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GLFW_TRUE); + glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); + glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2); + } else { + glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2); + glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0); + } + + if (settings.getBoolean("RendererDebug")) { + glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, GLFW_TRUE); + } + + if (settings.isGammaCorrection()) { + glfwWindowHint(GLFW_SRGB_CAPABLE, GLFW_TRUE); + } + + glfwWindowHint(GLFW_VISIBLE, GL_FALSE); + glfwWindowHint(GLFW_RESIZABLE, settings.isResizable() ? GLFW_TRUE : GLFW_FALSE); + glfwWindowHint(GLFW_DEPTH_BITS, settings.getDepthBits()); + glfwWindowHint(GLFW_STENCIL_BITS, settings.getStencilBits()); + glfwWindowHint(GLFW_SAMPLES, settings.getSamples()); + glfwWindowHint(GLFW_STEREO, settings.useStereo3D() ? GLFW_TRUE : GLFW_FALSE); + glfwWindowHint(GLFW_REFRESH_RATE, settings.getFrequency()); + + if (settings.getBitsPerPixel() == 24) { + glfwWindowHint(GLFW_RED_BITS, 8); + glfwWindowHint(GLFW_GREEN_BITS, 8); + glfwWindowHint(GLFW_BLUE_BITS, 8); + } else if (settings.getBitsPerPixel() == 16) { + glfwWindowHint(GLFW_RED_BITS, 5); + glfwWindowHint(GLFW_GREEN_BITS, 6); + glfwWindowHint(GLFW_BLUE_BITS, 5); + } + + glfwWindowHint(GLFW_ALPHA_BITS, settings.getAlphaBits()); + + // TODO: Add support for monitor selection + long monitor = NULL; + + if (settings.isFullscreen()) { + monitor = glfwGetPrimaryMonitor(); + } + + final GLFWVidMode videoMode = glfwGetVideoMode(glfwGetPrimaryMonitor()); + + if (settings.getWidth() <= 0 || settings.getHeight() <= 0) { + settings.setResolution(videoMode.width(), videoMode.height()); + } + + window = glfwCreateWindow(settings.getWidth(), settings.getHeight(), settings.getTitle(), monitor, NULL); + + if (window == NULL) { + throw new RuntimeException("Failed to create the GLFW window"); + } + + // Add a resize callback which delegates to the listener + glfwSetWindowSizeCallback(window, windowSizeCallback = new GLFWWindowSizeCallback() { + @Override + public void invoke(final long window, final int width, final int height) { + settings.setResolution(width, height); + listener.reshape(width, height); + } + + @Override + public void close() { + super.close(); + } + + @Override + public void callback(long args) { + super.callback(args); + } + }); + + glfwSetWindowFocusCallback(window, windowFocusCallback = new GLFWWindowFocusCallback() { + @Override + public void invoke(final long window, final boolean focus) { + if (wasActive != focus) { + if (!wasActive) { + listener.gainFocus(); + timer.reset(); + } else { + listener.loseFocus(); + } + + wasActive = !wasActive; + } + } + + @Override + public void close() { + super.close(); + } + + @Override + public void callback(long args) { + super.callback(args); + } + }); + + // Center the window + if (!settings.isFullscreen()) { + glfwSetWindowPos(window, + (videoMode.width() - settings.getWidth()) / 2, + (videoMode.height() - settings.getHeight()) / 2); + } + + // Make the OpenGL context current + glfwMakeContextCurrent(window); + + // Enable vsync + if (settings.isVSync()) { + glfwSwapInterval(1); + } else { + glfwSwapInterval(0); + } + + if (type != Type.OffscreenSurface) { + setWindowIcon(settings); + glfwShowWindow(window); + } + + allowSwapBuffers = settings.isSwapBuffers(); + } + + /** + * Set custom icons to the window of this application. + */ + private void setWindowIcon(final AppSettings settings) { + + final Object[] icons = settings.getIcons(); + if (icons == null) return; + + final GLFWImage[] images = imagesToGLFWImages(icons); + + try (final GLFWImage.Buffer iconSet = GLFWImage.malloc(images.length)) { + + for (int i = images.length - 1; i >= 0; i--) { + final GLFWImage image = images[i]; + iconSet.put(i, image); + } + + glfwSetWindowIcon(window, iconSet); + } + } + + /** + * Convert array of images to array of {@link GLFWImage}. + */ + private GLFWImage[] imagesToGLFWImages(final Object[] images) { + + final GLFWImage[] out = new GLFWImage[images.length]; + + for (int i = 0; i < images.length; i++) { + final BufferedImage image = (BufferedImage) images[i]; + out[i] = imageToGLFWImage(image); + } + + return out; + } + + /** + * Convert the {@link BufferedImage} to the {@link GLFWImage}. + */ + private GLFWImage imageToGLFWImage(BufferedImage image) { + + if (image.getType() != BufferedImage.TYPE_INT_ARGB_PRE) { + + final BufferedImage convertedImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_ARGB_PRE); + final Graphics2D graphics = convertedImage.createGraphics(); + + final int targetWidth = image.getWidth(); + final int targetHeight = image.getHeight(); + + graphics.drawImage(image, 0, 0, targetWidth, targetHeight, null); + graphics.dispose(); + + image = convertedImage; + } + + final ByteBuffer buffer = BufferUtils.createByteBuffer(image.getWidth() * image.getHeight() * 4); + + for (int i = 0; i < image.getHeight(); i++) { + for (int j = 0; j < image.getWidth(); j++) { + int colorSpace = image.getRGB(j, i); + buffer.put((byte) ((colorSpace << 8) >> 24)); + buffer.put((byte) ((colorSpace << 16) >> 24)); + buffer.put((byte) ((colorSpace << 24) >> 24)); + buffer.put((byte) (colorSpace >> 24)); + } + } + + buffer.flip(); + + final GLFWImage result = GLFWImage.create(); + result.set(image.getWidth(), image.getHeight(), buffer); + + return result; + } + + /** + * Destroy the context. + */ + protected void destroyContext() { + try { + if (renderer != null) { + renderer.cleanup(); + } + + if (errorCallback != null) { + errorCallback.close(); + errorCallback = null; + } + + if (windowSizeCallback != null) { + windowSizeCallback.close(); + windowSizeCallback = null; + } + + if (windowFocusCallback != null) { + windowFocusCallback.close(); + windowFocusCallback = null; + } + + if (window != NULL) { + glfwDestroyWindow(window); + window = NULL; + } + } catch (final Exception ex) { + listener.handleError("Failed to destroy context", ex); + } + } + + @Override + public void create(boolean waitFor) { + if (created.get()) { + LOGGER.warning("create() called when display is already created!"); + return; + } + + // NOTE: this is required for Mac OS X! + mainThread = Thread.currentThread(); + run(); + } + + /** + * Does LWJGL display initialization in the OpenGL thread + */ + protected boolean initInThread() { + try { + if (!JmeSystem.isLowPermissions()) { + // Enable uncaught exception handler only for current thread + Thread.currentThread().setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { + @Override + public void uncaughtException(Thread thread, Throwable thrown) { + listener.handleError("Uncaught exception thrown in " + thread.toString(), thrown); + if (needClose.get()) { + // listener.handleError() has requested the + // context to close. Satisfy request. + deinitInThread(); + } + } + }); + } + + timer = new NanoTimer(); + + // For canvas, this will create a pbuffer, + // allowing us to query information. + // When the canvas context becomes available, it will + // be replaced seamlessly. + createContext(settings); + printContextInitInfo(); + + created.set(true); + super.internalCreate(); + + //create OpenCL + //Must be done here because the window handle is needed + if (settings.isOpenCLSupport()) { + initOpenCL(window); + } + + } catch (Exception ex) { + try { + if (window != NULL) { + glfwDestroyWindow(window); + window = NULL; + } + } catch (Exception ex2) { + LOGGER.log(Level.WARNING, null, ex2); + } + + listener.handleError("Failed to create display", ex); + return false; // if we failed to create display, do not continue + } + + listener.initialize(); + return true; + } + + /** + * execute one iteration of the render loop in the OpenGL thread + */ + protected void runLoop() { + // If a restart is required, lets recreate the context. + if (needRestart.getAndSet(false)) { + try { + destroyContext(); + createContext(settings); + } catch (Exception ex) { + LOGGER.log(Level.SEVERE, "Failed to set display settings!", ex); + } + + LOGGER.fine("Display restarted."); + } + + if (!created.get()) { + throw new IllegalStateException(); + } + + listener.update(); + + // All this does is call swap buffers + // If the canvas is not active, there's no need to waste time + // doing that .. + if (renderable.get()) { + // calls swap buffers, etc. + try { + if (allowSwapBuffers && autoFlush) { + glfwSwapBuffers(window); + } + } catch (Throwable ex) { + listener.handleError("Error while swapping buffers", ex); + } + } + + // Subclasses just call GLObjectManager clean up objects here + // it is safe .. for now. + if (renderer != null) { + renderer.postFrame(); + } + + if (autoFlush) { + if (frameRateLimit != getSettings().getFrameRate()) { + setFrameRateLimit(getSettings().getFrameRate()); + } + } else if (frameRateLimit != 20) { + setFrameRateLimit(20); + } + + // If software frame rate limiting has been asked for, lets calculate sleep time based on a base value calculated + // from 1000 / frameRateLimit in milliseconds subtracting the time it has taken to render last frame. + // This gives an approximate limit within 3 fps of the given frame rate limit. + if (frameRateLimit > 0) { + final double sleep = frameSleepTime - (timer.getTimePerFrame() / 1000.0); + final long sleepMillis = (long) sleep; + final int additionalNanos = (int) ((sleep - sleepMillis) * 1000000.0); + + if (sleepMillis >= 0 && additionalNanos >= 0) { + try { + Thread.sleep(sleepMillis, additionalNanos); + } catch (InterruptedException ignored) { + } + } + } + + glfwPollEvents(); + } + + private void setFrameRateLimit(int frameRateLimit) { + this.frameRateLimit = frameRateLimit; + frameSleepTime = 1000.0 / this.frameRateLimit; + } + + /** + * De-initialize in the OpenGL thread. + */ + + protected void deinitInThread() { + listener.destroy(); + + destroyContext(); + super.internalDestroy(); + + LOGGER.fine("Display destroyed."); + } + + @Override + public void run() { + if (listener == null) { + throw new IllegalStateException("SystemListener is not set on context!" + + "Must set with JmeContext.setSystemListener()."); + } + + LOGGER.log(Level.FINE, "Using LWJGL {0}", Version.getVersion()); + + if (!initInThread()) { + LOGGER.log(Level.SEVERE, "Display initialization failed. Cannot continue."); + return; + } + + while (true) { + + runLoop(); + + if (needClose.get()) { + break; + } + + if (glfwWindowShouldClose(window)) { + listener.requestClose(false); + } + } + + deinitInThread(); + } + + public JoyInput getJoyInput() { + if (joyInput == null) { + joyInput = new GlfwJoystickInput(); + } + return joyInput; + } + + public MouseInput getMouseInput() { + if (mouseInput == null) { + mouseInput = new GlfwMouseInput(this); + } + return mouseInput; + } + + public KeyInput getKeyInput() { + if (keyInput == null) { + keyInput = new GlfwKeyInput(this); + } + + return keyInput; + } + + public TouchInput getTouchInput() { + return null; + } + + public void setAutoFlushFrames(boolean enabled) { + this.autoFlush = enabled; + } + + public void destroy(boolean waitFor) { + needClose.set(true); + + if (mainThread == Thread.currentThread()) { + // Ignore waitFor. + return; + } + + if (waitFor) { + waitFor(false); + } + } + + public long getWindowHandle() { + return window; + } +} diff --git a/src/com/jme3x/jfx/JmeFxContainer.java b/src/com/jme3x/jfx/JmeFxContainer.java index c6fbaae..9a26158 100644 --- a/src/com/jme3x/jfx/JmeFxContainer.java +++ b/src/com/jme3x/jfx/JmeFxContainer.java @@ -19,7 +19,6 @@ import com.jme3x.jfx.cursor.CursorDisplayProvider; import com.jme3x.jfx.util.JFXEmbeddedUtils; import com.jme3x.jfx.util.JFXPixels; -import com.jme3x.jfx.util.JFXPlatform; import com.jme3x.jfx.util.JFXWindowUtils; import java.awt.*; @@ -278,7 +277,7 @@ protected JmeFxContainer(final AssetManager assetManager, final Application appl this.jmeContext = application.getContext(); this.waitCount = new AtomicInteger(); - this.imageLock = LockFactory.newPrimitiveAtomicARSWLock(); + this.imageLock = LockFactory.newAtomicARSWLock(); this.windowOffsetX = (int) decorationSize.getX(); this.windowOffsetY = (int) decorationSize.getY(); this.cursorDisplayProvider = cursorDisplayProvider; @@ -297,7 +296,7 @@ protected JmeFxContainer(final AssetManager assetManager, final Application appl } private void initFx() { - JFXPlatform.startup(this::checkPixelsFormat); + Platform.startup(this::checkPixelsFormat); } private void checkPixelsFormat() { diff --git a/src/com/jme3x/jfx/injfx/JmeContextOffscreenSurface.java b/src/com/jme3x/jfx/injfx/JmeContextOffscreenSurface.java index a88b758..efcfc4e 100644 --- a/src/com/jme3x/jfx/injfx/JmeContextOffscreenSurface.java +++ b/src/com/jme3x/jfx/injfx/JmeContextOffscreenSurface.java @@ -15,6 +15,7 @@ import javafx.stage.Stage; import static com.jme3x.jfx.util.JFXPlatform.runInFXThread; +import static java.util.Objects.requireNonNull; /** * The implementation of the {@link JmeContext} for integrating to JavaFX. @@ -23,14 +24,22 @@ */ public class JmeContextOffscreenSurface implements JmeContext { + private static final ThreadLocal STAGE_LOCAL = new ThreadLocal<>(); + + public static void setLocalStage(final Stage stage) { + STAGE_LOCAL.set(stage); + } + protected final Stage window; protected final AppSettings settings; protected JmeContext backgroundContext; - public JmeContextOffscreenSurface(final Stage window) { - this.window = window; + public JmeContextOffscreenSurface() { + this.window = STAGE_LOCAL.get(); + requireNonNull(window, "you have to set a Stage to thread local."); this.settings = createSettings(); + this.backgroundContext = createBackgroundContext(); } protected AppSettings createSettings() { @@ -124,6 +133,7 @@ public void setAutoFlushFrames(final boolean enabled) { @Override public void create(final boolean waitFor) { + backgroundContext.getSettings().setRenderer(AppSettings.LWJGL_OPENGL3); backgroundContext.create(waitFor); } diff --git a/src/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java b/src/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java index 838196b..692b78c 100644 --- a/src/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java +++ b/src/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java @@ -6,121 +6,160 @@ import com.jme3.renderer.ViewPort; import com.jme3.renderer.queue.RenderQueue; import com.jme3.texture.FrameBuffer; -import com.jme3.texture.Image; -import com.jme3.texture.Image.Format; -import com.jme3.util.BufferUtils; import com.jme3x.jfx.util.JFXPlatform; -import java.nio.ByteBuffer; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; +import javafx.application.Platform; import javafx.beans.value.ChangeListener; import javafx.scene.image.ImageView; -import javafx.scene.image.PixelFormat; -import javafx.scene.image.WritableImage; -//https://github.com/caprica/vlcj-javafx/blob/master/src/test/java/uk/co/caprica/vlcj/javafx/test/JavaFXDirectRenderingTest.java -//http://stackoverflow.com/questions/15951284/javafx-image-resizing -//http://hub.jmonkeyengine.org/forum/topic/offscreen-rendering-problem/ -//TODO manage suspend/resume (eg when image/stage is hidden) +/** + * The implementation of the {@link SceneProcessor} for transfering content between jME and + * ImageView. + */ public class SceneProcessorCopyToImageView implements SceneProcessor { - private RenderManager rm; + /** + * The listeners. + */ + private final ChangeListener widthListener; + private final ChangeListener heightListener; + private final ChangeListener rationListener; + + private final AtomicBoolean reshapeNeeded; + + private RenderManager renderManager; private ViewPort latestViewPorts; - private int askWidth = 1; + + private TransferImage transferImage; + + /** + * The {@link ImageView} for showing the content of jME. + */ + private volatile ImageView imageView; + + private int askWidth = 1; private int askHeight = 1; + private boolean askFixAspect = true; - private TransfertImage timage; - private AtomicBoolean reshapeNeeded = new AtomicBoolean(true); - - private ImageView imgView; - private ChangeListener wlistener = (w,o,n)->{ - componentResized(n.intValue(), (int)this.imgView.getFitHeight(), this.imgView.preserveRatioProperty().get()); - }; - private ChangeListener hlistener = (w,o,n)->{ - componentResized((int)this.imgView.getFitWidth(), n.intValue(), this.imgView.preserveRatioProperty().get()); - }; - private ChangeListener rlistener = (w,o,n)->{ - componentResized((int)this.imgView.getFitWidth(), (int)this.imgView.getFitHeight(), n.booleanValue()); - }; - - public void componentResized(int w, int h, boolean fixAspect) { - int newWidth2 = Math.max(w, 1); - int newHeight2 = Math.max(h, 1); - if (askWidth != newWidth2 || askWidth != newHeight2 || askFixAspect != fixAspect){ - askWidth = newWidth2; - askHeight = newHeight2; - askFixAspect = fixAspect; - reshapeNeeded.set(true); - } + + public SceneProcessorCopyToImageView() { + reshapeNeeded = new AtomicBoolean(true); + widthListener = (view, oldValue, newValue) -> notifyChangedWidth(newValue); + heightListener = (view, oldValue, newValue) -> notifyChangedHeight(newValue); + rationListener = (view, oldValue, newValue) -> notifyChangedRatio(newValue); + } + + /** + * @return the {@link ImageView} for showing the content of jME. + */ + protected ImageView getImageView() { + return imageView; } - public void bind(ImageView view, Application jmeApp){ + /** + * Notify about that the ratio was changed. + * + * @param newValue the new value of the ratio. + */ + protected void notifyChangedRatio(final Boolean newValue) { + notifyComponentResized((int) imageView.getFitWidth(), (int) imageView.getFitHeight(), newValue); + } + + /** + * Notify about that the height was changed. + * + * @param newValue the new value of the height. + */ + protected void notifyChangedHeight(final Number newValue) { + notifyComponentResized((int) imageView.getFitWidth(), newValue.intValue(), imageView.isPreserveRatio()); + } + + /** + * Notify about that the width was changed. + * + * @param newValue the new value of the width. + */ + protected void notifyChangedWidth(final Number newValue) { + notifyComponentResized(newValue.intValue(), (int) imageView.getFitHeight(), imageView.isPreserveRatio()); + } + + protected void notifyComponentResized(int newWidth, int newHeight, boolean fixAspect) { + newWidth = Math.max(newWidth, 1); + newHeight = Math.max(newHeight, 1); + if (askWidth == newWidth && askWidth == newHeight && askFixAspect == fixAspect) return; + askWidth = newWidth; + askHeight = newHeight; + askFixAspect = fixAspect; + reshapeNeeded.set(true); + } + + public void bind(final ImageView imageView, final Application application) { unbind(); - if (jmeApp != null) { - List vps = jmeApp.getRenderManager().getPostViews(); - latestViewPorts = vps.get(vps.size() - 1); - latestViewPorts.addProcessor(this); - } + final RenderManager renderManager = application.getRenderManager(); + final List postViews = renderManager.getPostViews(); + if (postViews.isEmpty()) throw new RuntimeException("the list of a post view is empty."); - JFXPlatform.runInFXThread(() -> { - imgView = view; - if (imgView != null) { - imgView.fitWidthProperty().addListener(wlistener); - imgView.fitHeightProperty().addListener(hlistener); - imgView.preserveRatioProperty().addListener(rlistener); - componentResized((int)imgView.getFitWidth(), (int)imgView.getFitHeight(), imgView.isPreserveRatio()); - imgView.setScaleY(-1.0); - } - }); + latestViewPorts = postViews.get(postViews.size() - 1); + latestViewPorts.addProcessor(this); + + JFXPlatform.runInFXThread(() -> bindImageView(imageView)); + } + + protected void bindImageView(final ImageView imageView) { + if (!Platform.isFxApplicationThread()) + throw new RuntimeException("this call is not from JavaFX thread."); + this.imageView = imageView; + this.imageView.fitWidthProperty().addListener(widthListener); + this.imageView.fitHeightProperty().addListener(heightListener); + this.imageView.preserveRatioProperty().addListener(rationListener); + notifyComponentResized((int) imageView.getFitWidth(), (int) imageView.getFitHeight(), imageView.isPreserveRatio()); + this.imageView.setScaleY(-1.0); } - public void unbind(){ + public void unbind() { - if (latestViewPorts != null){ + if (latestViewPorts != null) { latestViewPorts.removeProcessor(this); // call this.cleanup() latestViewPorts = null; } - JFXPlatform.runInFXThread(() -> { - if (imgView != null) { - imgView.fitWidthProperty().removeListener(wlistener); - imgView.fitHeightProperty().removeListener(hlistener); - } - }); + JFXPlatform.runInFXThread(this::unbindImageView); + } + + protected void unbindImageView() { + if (!Platform.isFxApplicationThread()) + throw new RuntimeException("this call is not from JavaFX thread."); + if (imageView == null) return; + imageView.fitWidthProperty().removeListener(widthListener); + imageView.fitHeightProperty().removeListener(heightListener); + imageView.preserveRatioProperty().removeListener(rationListener); + imageView = null; } @Override - public void initialize(RenderManager rm, ViewPort vp) { - if (this.rm == null){ - // First time called in OGL thread - this.rm = rm; + public void initialize(final RenderManager renderManager, final ViewPort viewPort) { + if (this.renderManager == null) { + this.renderManager = renderManager; } } - private TransfertImage reshapeInThread(int width0, int height0, boolean fixAspect) { - TransfertImage ti = new TransfertImage(width0, height0); + private TransferImage reshapeInThread(final int width, final int height, final boolean fixAspect) { - rm.getRenderer().setMainFrameBufferOverride(ti.fb); - rm.notifyReshape(ti.width, ti.height); + final TransferImage transferImage = new TransferImage(imageView, width, height); + transferImage.initFor(renderManager.getRenderer()); -// for (ViewPort vp : viewPorts){ -// vp.getCamera().resize(ti.width, ti.height, fixAspect); -// -// // NOTE: Hack alert. This is done ONLY for custom framebuffers. -// // Main framebuffer should use RenderManager.notifyReshape(). -// for (SceneProcessor sp : vp.getProcessors()){ -// sp.reshape(vp, ti.width, ti.height); -// } -// } - return ti; + renderManager.notifyReshape(transferImage.getWidth(), transferImage.getHeight()); + + return transferImage; } @Override public boolean isInitialized() { - return timage != null; + return transferImage != null; } @Override @@ -128,77 +167,31 @@ public void preFrame(float tpf) { } @Override - public void postQueue(RenderQueue rq) { + public void postQueue(final RenderQueue renderQueue) { } @Override - public void postFrame(FrameBuffer out) { - if (imgView != null && timage != null) { - // if (out != timage.fb){ - // throw new IllegalStateException("Why did you change the output framebuffer? " + out + " != " + timage.fb); - // } - timage.copyFrameBufferToImage(rm, imgView); + public void postFrame(final FrameBuffer out) { + if (transferImage != null) { + transferImage.copyFrameBufferToImage(renderManager); } + // for the next frame - if (reshapeNeeded.getAndSet(false)){ - timage = reshapeInThread(askWidth, askHeight, askFixAspect); - //TODO dispose previous timage ASAP (when no longer used in JavafFX thread) + if (reshapeNeeded.getAndSet(false)) { + transferImage = reshapeInThread(askWidth, askHeight, askFixAspect); + //TODO dispose previous transferImage ASAP (when no longer used in JavafFX thread) } } @Override public void cleanup() { - if (timage != null) { - timage.dispose(); - timage = null; + if (transferImage != null) { + transferImage.dispose(); + transferImage = null; } } @Override - public void reshape(ViewPort vp, int w, int h) { - } - - static class TransfertImage { - public final int width; - public final int height; - public final FrameBuffer fb; - public final ByteBuffer byteBuf; - public final WritableImage img; - private ImageView lastIv = null; - - TransfertImage(int width, int height) { - this.width = width; - this.height = height; - - fb = new FrameBuffer(width, height, 1); - fb.setDepthBuffer(Format.Depth); - fb.setColorBuffer(Format.BGRA8); - - byteBuf = BufferUtils.createByteBuffer(width * height * 4); - - img = new WritableImage(width, height); - } - - /** SHOULD run in JME'Display thread */ - void copyFrameBufferToImage(RenderManager rm, ImageView iv) { - synchronized (byteBuf) { - // Convert screenshot. - byteBuf.clear(); - rm.getRenderer().readFrameBufferWithFormat(fb, byteBuf, Image.Format.BGRA8); - } - JFXPlatform.runInFXThread(() -> { - synchronized (byteBuf) { - if (lastIv != iv) { - lastIv = iv; - lastIv.setImage(img); - } - img.getPixelWriter().setPixels(0, 0, width, height, PixelFormat.getByteBgraInstance(), byteBuf, width * 4); - } - }); - } - - void dispose() { - fb.dispose(); - } + public void reshape(final ViewPort viewPort, final int width, final int height) { } } \ No newline at end of file diff --git a/src/com/jme3x/jfx/injfx/TransferImage.java b/src/com/jme3x/jfx/injfx/TransferImage.java new file mode 100644 index 0000000..1d11284 --- /dev/null +++ b/src/com/jme3x/jfx/injfx/TransferImage.java @@ -0,0 +1,167 @@ +package com.jme3x.jfx.injfx; + +import com.jme3.renderer.RenderManager; +import com.jme3.renderer.Renderer; +import com.jme3.texture.FrameBuffer; +import com.jme3.texture.Image; +import com.jme3.util.BufferUtils; +import com.jme3x.jfx.util.JFXPlatform; + +import java.nio.ByteBuffer; +import java.util.concurrent.atomic.AtomicInteger; + +import javafx.scene.image.ImageView; +import javafx.scene.image.PixelFormat; +import javafx.scene.image.PixelWriter; +import javafx.scene.image.WritableImage; +import javafx.scene.image.WritablePixelFormat; + +/** + * The class for transferring content from the jME to {@link ImageView}. + * + * @author JavaSaBr. + */ +public class TransferImage { + + private static final int RUNNING_STATE = 1; + private static final int WAITING_STATE = 2; + private static final int DISPOSING_STATE = 3; + private static final int DISPOSED_STATE = 4; + + private final AtomicInteger frameState; + private final AtomicInteger imageState; + + private final FrameBuffer frameBuffer; + + private final WritableImage writableImage; + + private final ByteBuffer frameByteBuffer; + private final ByteBuffer byteBuffer; + private final ByteBuffer imageByteBuffer; + + /** + * The width. + */ + private final int width; + + /** + * The height. + */ + private final int height; + + public TransferImage(final ImageView imageView, final int width, final int height) { + this.frameState = new AtomicInteger(WAITING_STATE); + this.imageState = new AtomicInteger(WAITING_STATE); + this.width = width; + this.height = height; + + frameBuffer = new FrameBuffer(width, height, 1); + frameBuffer.setDepthBuffer(Image.Format.Depth); + frameBuffer.setColorBuffer(Image.Format.BGRA8); + + frameByteBuffer = BufferUtils.createByteBuffer(width * height * 4); + byteBuffer = BufferUtils.createByteBuffer(width * height * 4); + imageByteBuffer = BufferUtils.createByteBuffer(width * height * 4); + writableImage = new WritableImage(width, height); + + JFXPlatform.runInFXThread(() -> imageView.setImage(writableImage)); + } + + /** + * Init this transfer for the render. + * + * @param renderer the render. + */ + public void initFor(final Renderer renderer) { + renderer.setMainFrameBufferOverride(frameBuffer); + } + + /** + * @return the width. + */ + public int getWidth() { + return width; + } + + /** + * @return the height. + */ + public int getHeight() { + return height; + } + + /** + * Copy the content from render to the frameByteBuffer and write this content to image view. + */ + public void copyFrameBufferToImage(final RenderManager renderManager) { + while (!frameState.compareAndSet(WAITING_STATE, RUNNING_STATE)) { + if (frameState.get() == DISPOSED_STATE) { + return; + } + } + + // Convert screenshot. + try { + + frameByteBuffer.clear(); + + final Renderer renderer = renderManager.getRenderer(); + renderer.readFrameBufferWithFormat(frameBuffer, frameByteBuffer, Image.Format.BGRA8); + + } finally { + if (!frameState.compareAndSet(RUNNING_STATE, WAITING_STATE)) { + throw new RuntimeException("unknown problem with the frame state"); + } + } + + synchronized (byteBuffer) { + byteBuffer.clear(); + byteBuffer.put(frameByteBuffer); + byteBuffer.flip(); + } + + JFXPlatform.runInFXThread(this::writeImage); + } + + /** + * Write content to image. + */ + private void writeImage() { + while (!imageState.compareAndSet(WAITING_STATE, RUNNING_STATE)) { + if (imageState.get() == DISPOSED_STATE) return; + } + + try { + + imageByteBuffer.clear(); + + synchronized (byteBuffer) { + if (byteBuffer.position() == byteBuffer.limit()) return; + imageByteBuffer.put(byteBuffer); + imageByteBuffer.flip(); + } + + final WritablePixelFormat pixelFormat = PixelFormat.getByteBgraInstance(); + final PixelWriter pixelWriter = writableImage.getPixelWriter(); + pixelWriter.setPixels(0, 0, width, height, pixelFormat, imageByteBuffer, width * 4); + } finally { + if (!imageState.compareAndSet(RUNNING_STATE, WAITING_STATE)) { + throw new RuntimeException("unknown problem with the image state"); + } + } + } + + /** + * Dispose this transfer. + */ + public void dispose() { + while (!frameState.compareAndSet(WAITING_STATE, DISPOSING_STATE)) ; + while (!imageState.compareAndSet(WAITING_STATE, DISPOSING_STATE)) ; + frameBuffer.dispose(); + BufferUtils.destroyDirectBuffer(frameByteBuffer); + BufferUtils.destroyDirectBuffer(byteBuffer); + BufferUtils.destroyDirectBuffer(imageByteBuffer); + frameState.compareAndSet(DISPOSING_STATE, DISPOSED_STATE); + imageState.compareAndSet(DISPOSING_STATE, DISPOSED_STATE); + } +} diff --git a/src/com/jme3x/jfx/util/JFXPlatform.java b/src/com/jme3x/jfx/util/JFXPlatform.java index 1150c1d..80c69da 100644 --- a/src/com/jme3x/jfx/util/JFXPlatform.java +++ b/src/com/jme3x/jfx/util/JFXPlatform.java @@ -10,9 +10,9 @@ import rlib.util.array.ArrayFactory; /** - * Набор утильных методов для работы с JavaFX. + * The class with additional utility methods for JavaFX Platform. * - * @author Ronn + * @author JavaSaBr. */ public class JFXPlatform { @@ -20,6 +20,9 @@ public class JFXPlatform { private static final String METHOD_STARTUP = "startup"; + /** + * The example of getting a method handle. + */ private static final MethodHandle STARTUP_HANDLE; static { @@ -40,18 +43,7 @@ public class JFXPlatform { } /** - * Добавить задачу на выполнение после старта JavaFX. - */ - public static void startup(final Runnable task) { - try { - STARTUP_HANDLE.invoke(task); - } catch (final Throwable throwable) { - throw new RuntimeException(throwable); - } - } - - /** - * Выполнить задачу в потоке JavaFX. + * Execute the task in JavaFX thread. */ public static void runInFXThread(final Runnable task) { if (Platform.isFxApplicationThread()) { diff --git a/test-src/com/jme3x/jfx/TestJmeToJFX.java b/test-src/com/jme3x/jfx/TestJmeToJFX.java new file mode 100644 index 0000000..3fb9ab2 --- /dev/null +++ b/test-src/com/jme3x/jfx/TestJmeToJFX.java @@ -0,0 +1,117 @@ +package com.jme3x.jfx; + +import com.jme3.app.DebugKeysAppState; +import com.jme3.app.SimpleApplication; +import com.jme3.material.Material; +import com.jme3.math.ColorRGBA; +import com.jme3.scene.Geometry; +import com.jme3.scene.shape.Box; +import com.jme3.system.AppSettings; +import com.jme3.system.NativeLibraryLoader; +import com.jme3x.jfx.injfx.JmeContextOffscreenSurface; +import com.jme3x.jfx.injfx.SceneProcessorCopyToImageView; + +import javafx.application.Application; +import javafx.application.Platform; +import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.image.ImageView; +import javafx.scene.layout.StackPane; +import javafx.stage.Stage; + +/** + * Created by ronn on 03.12.16. + */ +public class TestJmeToJFX extends Application { + + private SceneProcessorCopyToImageView jmeAppDisplayBinder = new SceneProcessorCopyToImageView(); + + public static void main(final String[] args) { + launch(args); + } + + @Override + public void start(final Stage stage) throws Exception { + + final ImageView imageView = new ImageView(); + final Button button = new Button("BUTTON"); + final StackPane stackPane = new StackPane(imageView, button); + final Scene scene = new Scene(stackPane, 600, 600); + + imageView.fitWidthProperty().bind(stackPane.widthProperty()); + imageView.fitHeightProperty().bind(stackPane.heightProperty()); + + stage.setTitle("Test"); + stage.setScene(scene); + stage.show(); + + new Thread(() -> { + final SimpleApplication application = makeJmeApplication(stage, 80); + new Thread(application::start).start(); + + Platform.runLater(() -> { + application.enqueue(() -> jmeAppDisplayBinder.bind(imageView, application)); + }); + }).start(); + } + + + private static SimpleApplication makeJmeApplication(Stage stage, int framerate) { + AppSettings settings = new AppSettings(true); + // important to use those settings + settings.setFullscreen(false); + settings.setUseInput(false); + settings.setFrameRate(Math.max(1, Math.min(80, framerate))); + settings.setCustomRenderer(com.jme3x.jfx.injfx.JmeContextOffscreenSurface.class); + + SimpleApplication app = new SimpleApplication(){ + + public Geometry player; + + @Override + public void start() { + + if ("LWJGL".equals(settings.getAudioRenderer())) { + NativeLibraryLoader.loadNativeLibrary("openal-lwjgl3", true); + } + + NativeLibraryLoader.loadNativeLibrary("lwjgl3", true); + NativeLibraryLoader.loadNativeLibrary("glfw-lwjgl3", true); + NativeLibraryLoader.loadNativeLibrary("jemalloc-lwjgl3", true); + NativeLibraryLoader.loadNativeLibrary("jinput", true); + NativeLibraryLoader.loadNativeLibrary("jinput-dx8", true); + + JmeContextOffscreenSurface.setLocalStage(stage); + try { + super.start(); + } finally { + JmeContextOffscreenSurface.setLocalStage(null); + } + } + + @Override + public void simpleInitApp() { + // to prevent a NPE (due to setUseInput(null)) on Application.stop() + getStateManager().detach(getStateManager().getState(DebugKeysAppState.class)); + /** this blue box is our player character */ + Box b = new Box(1, 1, 1); + player = new Geometry("blue cube", b); + Material mat = new Material(assetManager, + "Common/MatDefs/Misc/Unshaded.j3md"); + mat.setColor("Color", ColorRGBA.Blue); + player.setMaterial(mat); + rootNode.attachChild(player); + } + + /* Use the main event loop to trigger repeating actions. */ + @Override + public void simpleUpdate(float tpf) { + // make the player rotate: + player.rotate(0, 2*tpf, 0); + } + }; + app.setSettings(settings); + app.setShowSettings(false); + return app; + } +} diff --git a/test-src/com/jme3x/jfx/TestOffscreenContext.java b/test-src/com/jme3x/jfx/TestOffscreenContext.java new file mode 100644 index 0000000..c076b7d --- /dev/null +++ b/test-src/com/jme3x/jfx/TestOffscreenContext.java @@ -0,0 +1,54 @@ +package com.jme3x.jfx; + +import com.jme3.system.AppSettings; +import com.jme3.system.NativeLibraryLoader; +import com.jme3.system.lwjgl.LwjglDisplay; + +import rlib.logging.Logger; +import rlib.logging.LoggerManager; + +/** + * Created by ronn on 25.07.16. + */ +public class TestOffscreenContext extends LwjglDisplay { + + protected static final Logger LOGGER = LoggerManager.getLogger(TestOffscreenContext.class); + + /** + * Игровой поток рендера экрана. + */ + private Thread thread; + + @Override + public void create(final boolean waitFor) { + + if ("LWJGL".equals(settings.getAudioRenderer())) { + NativeLibraryLoader.loadNativeLibrary("openal-lwjgl3", true); + } + + NativeLibraryLoader.loadNativeLibrary("lwjgl3", true); + NativeLibraryLoader.loadNativeLibrary("glfw-lwjgl3", true); + NativeLibraryLoader.loadNativeLibrary("jemalloc-lwjgl3", true); + NativeLibraryLoader.loadNativeLibrary("jinput", true); + NativeLibraryLoader.loadNativeLibrary("jinput-dx8", true); + + if (created.get()) return; + + thread = new Thread(this); + thread.setPriority(Thread.MAX_PRIORITY); + thread.setName("LWJGL Renderer Thread"); + thread.start(); + + if (waitFor) waitFor(true); + } + + public Thread getThread() { + return thread; + } + + @Override + protected void createContext(final AppSettings settings) { + settings.setRenderer(AppSettings.LWJGL_OPENGL3); + super.createContext(settings); + } +} From caaed06a0eb5105f752c1091eaab58121a13d1d1 Mon Sep 17 00:00:00 2001 From: javasabr Date: Sat, 3 Dec 2016 20:09:29 +0300 Subject: [PATCH 08/24] implemented mouse input from ImageView --- .../jfx/injfx/ApplicationThreadExecutor.java | 57 +++++++ src/com/jme3x/jfx/injfx/JmeForImageView.java | 113 ------------- ...e.java => JmeOffscreenSurfaceContext.java} | 66 ++++++-- .../jme3x/jfx/injfx/JmeToJFXApplication.java | 26 +++ .../jme3x/jfx/injfx/JmeToJFXIntegrator.java | 30 ++++ .../injfx/SceneProcessorCopyToImageView.java | 41 ++++- src/com/jme3x/jfx/injfx/input/JFXInput.java | 77 +++++++++ .../jme3x/jfx/injfx/input/JFXKeyInput.java | 40 +++++ .../jme3x/jfx/injfx/input/JFXMouseInput.java | 160 ++++++++++++++++++ test-src/com/jme3x/jfx/HelloInput.java | 143 ++++++++++++++++ test-src/com/jme3x/jfx/TestJmeToJFX.java | 99 +++++++---- 11 files changed, 686 insertions(+), 166 deletions(-) create mode 100644 src/com/jme3x/jfx/injfx/ApplicationThreadExecutor.java delete mode 100644 src/com/jme3x/jfx/injfx/JmeForImageView.java rename src/com/jme3x/jfx/injfx/{JmeContextOffscreenSurface.java => JmeOffscreenSurfaceContext.java} (73%) create mode 100644 src/com/jme3x/jfx/injfx/JmeToJFXApplication.java create mode 100644 src/com/jme3x/jfx/injfx/JmeToJFXIntegrator.java create mode 100644 src/com/jme3x/jfx/injfx/input/JFXInput.java create mode 100644 src/com/jme3x/jfx/injfx/input/JFXKeyInput.java create mode 100644 src/com/jme3x/jfx/injfx/input/JFXMouseInput.java create mode 100644 test-src/com/jme3x/jfx/HelloInput.java diff --git a/src/com/jme3x/jfx/injfx/ApplicationThreadExecutor.java b/src/com/jme3x/jfx/injfx/ApplicationThreadExecutor.java new file mode 100644 index 0000000..423c35a --- /dev/null +++ b/src/com/jme3x/jfx/injfx/ApplicationThreadExecutor.java @@ -0,0 +1,57 @@ +package com.jme3x.jfx.injfx; + +import rlib.util.ArrayUtils; +import rlib.util.array.Array; +import rlib.util.array.ArrayFactory; +import rlib.util.array.ConcurrentArray; + +/** + * The executor for executing tasks in application thread. + * + * @author JavaSaBr + */ +public class ApplicationThreadExecutor { + + private static final ApplicationThreadExecutor INSTANCE = new ApplicationThreadExecutor(); + + public static ApplicationThreadExecutor getInstance() { + return INSTANCE; + } + + /** + * The list of waiting tasks. + */ + private final ConcurrentArray waitTasks; + + /** + * THe list of tasks to execute. + */ + private final Array execute; + + public ApplicationThreadExecutor() { + this.waitTasks = ArrayFactory.newConcurrentAtomicARSWLockArray(Runnable.class); + this.execute = ArrayFactory.newArray(Runnable.class); + } + + /** + * Add the task to execute. + * + * @param task the new task. + */ + public void addToExecute(final Runnable task) { + ArrayUtils.runInWriteLock(waitTasks, task, Array::add); + } + + /** + * Execute the waiting tasks. + */ + public void execute() { + if (waitTasks.isEmpty()) return; + ArrayUtils.runInWriteLock(waitTasks, execute, ArrayUtils::move); + try { + execute.forEach(Runnable::run); + } finally { + execute.clear(); + } + } +} diff --git a/src/com/jme3x/jfx/injfx/JmeForImageView.java b/src/com/jme3x/jfx/injfx/JmeForImageView.java deleted file mode 100644 index 2965c31..0000000 --- a/src/com/jme3x/jfx/injfx/JmeForImageView.java +++ /dev/null @@ -1,113 +0,0 @@ -package com.jme3x.jfx.injfx; - -import com.jme3.app.DebugKeysAppState; -import com.jme3.app.SimpleApplication; -import com.jme3.system.AppSettings; - -import java.util.concurrent.Future; -import java.util.function.Function; - -import javafx.scene.image.ImageView; - -/** - * JmeForImageView create a jme'SimpleApplication viewable into an JavaFX's ImageView. - * - * You can manage the wrapped SimpleApplication by calling enqueue (by example to add/remove - * AppState, Node, Light, to change the AppSettings...). - * - * See TestDisplayInImageView.java for sample usage. - * - * The usage of the class is optional, it can avoid some - * pitfall in the configuration. If you want a better control, I suggest you to browse - * the source of this class to see sample of configuration and usage of - * SceneProcessorCopyToImage. - * - * @TODO auto-stop when the ImageView is removed from JavaFX Stage - * @author davidB - */ -public class JmeForImageView { - - private static SimpleApplication makeJmeApplication(int framerate) { - AppSettings settings = new AppSettings(true); - - // important to use those settings - settings.setFullscreen(false); - settings.setUseInput(false); - settings.setFrameRate(Math.max(1, Math.min(60, framerate))); - settings.setCustomRenderer(com.jme3x.jfx.injfx.JmeContextOffscreenSurface.class); - - SimpleApplication app = new SimpleApplication(){ - @Override - public void simpleInitApp() { - // to prevent a NPE (due to setUseInput(null)) on Application.stop() - getStateManager().detach(getStateManager().getState(DebugKeysAppState.class)); - } - }; - app.setSettings(settings); - app.setShowSettings(false); - return app; - } - - private SimpleApplication jmeApp0; - private SceneProcessorCopyToImageView jmeAppDisplayBinder = new SceneProcessorCopyToImageView(); - - /** - * Lazy creation of the wrapped SimpleApplication. - */ - private SimpleApplication findOrCreate() { - if (jmeApp0 == null) { - jmeApp0 = makeJmeApplication(30); - jmeApp0.start(); - } - return jmeApp0; - } - - /** - * Bind the wrapped SimpleApplication to an imageView. - * - *
    - *
  • Only one imageView can be binded.
  • - *
  • Only jmeApp.getViewPort(), jmeApp.getGuiViewPort() are binded
  • - *
- * - * @param imageView destination - * @return Future when bind is done (async) - */ - public Future bind(ImageView imageView) { - return enqueue((jmeApp) -> { - jmeAppDisplayBinder.bind(imageView, jmeApp); - return true; - }); - } - - public Future unbind() { - return enqueue((jmeApp) -> { - jmeAppDisplayBinder.unbind(); - return true; - }); - } - - /** - * Enqueue action to apply in Jme's Thread - * Action can be add/remove AppState, Node, Light, - * change the AppSettings.... - * - * @param f(jmeApp) the action to apply - */ - public Future enqueue(Function f) { - SimpleApplication jmeApp = findOrCreate(); - return jmeApp.enqueue(() -> {return f.apply(jmeApp);}); - } - - public void stop(boolean waitFor) { - if (jmeApp0 != null){ - try { - unbind().get(); - } catch (Exception exc) { - //TODO - exc.printStackTrace(); - } - jmeApp0.stop(waitFor); - } - } -} \ No newline at end of file diff --git a/src/com/jme3x/jfx/injfx/JmeContextOffscreenSurface.java b/src/com/jme3x/jfx/injfx/JmeOffscreenSurfaceContext.java similarity index 73% rename from src/com/jme3x/jfx/injfx/JmeContextOffscreenSurface.java rename to src/com/jme3x/jfx/injfx/JmeOffscreenSurfaceContext.java index efcfc4e..c8f9889 100644 --- a/src/com/jme3x/jfx/injfx/JmeContextOffscreenSurface.java +++ b/src/com/jme3x/jfx/injfx/JmeOffscreenSurfaceContext.java @@ -1,8 +1,6 @@ package com.jme3x.jfx.injfx; import com.jme3.input.JoyInput; -import com.jme3.input.KeyInput; -import com.jme3.input.MouseInput; import com.jme3.input.TouchInput; import com.jme3.opencl.Context; import com.jme3.renderer.Renderer; @@ -11,6 +9,8 @@ import com.jme3.system.JmeSystem; import com.jme3.system.SystemListener; import com.jme3.system.Timer; +import com.jme3x.jfx.injfx.input.JFXKeyInput; +import com.jme3x.jfx.injfx.input.JFXMouseInput; import javafx.stage.Stage; @@ -22,7 +22,7 @@ * * @author empirephoenix */ -public class JmeContextOffscreenSurface implements JmeContext { +public class JmeOffscreenSurfaceContext implements JmeContext { private static final ThreadLocal STAGE_LOCAL = new ThreadLocal<>(); @@ -33,13 +33,61 @@ public static void setLocalStage(final Stage stage) { protected final Stage window; protected final AppSettings settings; + protected final JFXKeyInput keyInput; + protected final JFXMouseInput mouseInput; + + /** + * The current width. + */ + private volatile int width; + + /** + * The current height. + */ + private volatile int height; + + /** + * The background context. + */ protected JmeContext backgroundContext; - public JmeContextOffscreenSurface() { + public JmeOffscreenSurfaceContext() { this.window = STAGE_LOCAL.get(); + this.keyInput = new JFXKeyInput(); + this.mouseInput = new JFXMouseInput(this); requireNonNull(window, "you have to set a Stage to thread local."); this.settings = createSettings(); this.backgroundContext = createBackgroundContext(); + this.height = 1; + this.width = 1; + } + + /** + * @return the current height. + */ + public int getHeight() { + return height; + } + + /** + * @param height the current height. + */ + public void setHeight(final int height) { + this.height = height; + } + + /** + * @return the current width. + */ + public int getWidth() { + return width; + } + + /** + * @param width the current width. + */ + public void setWidth(final int width) { + this.width = width; } protected AppSettings createSettings() { @@ -85,15 +133,13 @@ public Context getOpenCLContext() { } @Override - public MouseInput getMouseInput() { - //return backgroundContext.getMouseInput(); - return null; + public JFXMouseInput getMouseInput() { + return mouseInput; } @Override - public KeyInput getKeyInput() { - //return backgroundContext.getKeyInput(); - return null; + public JFXKeyInput getKeyInput() { + return keyInput; } @Override diff --git a/src/com/jme3x/jfx/injfx/JmeToJFXApplication.java b/src/com/jme3x/jfx/injfx/JmeToJFXApplication.java new file mode 100644 index 0000000..e906bd2 --- /dev/null +++ b/src/com/jme3x/jfx/injfx/JmeToJFXApplication.java @@ -0,0 +1,26 @@ +package com.jme3x.jfx.injfx; + +import com.jme3.app.Application; +import com.jme3.app.SimpleApplication; + +import javafx.scene.image.ImageView; + +/** + * The base implementation of {@link Application} for using in the {@link ImageView}. + * + * @author JavaSaBr. + */ +public class JmeToJFXApplication extends SimpleApplication { + + private static final ApplicationThreadExecutor EXECUTOR = ApplicationThreadExecutor.getInstance(); + + @Override + public void update() { + EXECUTOR.execute(); + super.update(); + } + + @Override + public void simpleInitApp() { + } +} diff --git a/src/com/jme3x/jfx/injfx/JmeToJFXIntegrator.java b/src/com/jme3x/jfx/injfx/JmeToJFXIntegrator.java new file mode 100644 index 0000000..11e8ad8 --- /dev/null +++ b/src/com/jme3x/jfx/injfx/JmeToJFXIntegrator.java @@ -0,0 +1,30 @@ +package com.jme3x.jfx.injfx; + +import com.jme3.system.AppSettings; + +import java.util.function.Function; + +import javafx.application.Platform; +import javafx.scene.image.ImageView; + +import static java.lang.Math.max; +import static java.lang.Math.min; + +/** + * @author JavaSaBr + */ +public class JmeToJFXIntegrator { + + public static void prepareSettings(final AppSettings settings, final int framerate) { + settings.setFullscreen(false); + settings.setFrameRate(max(1, min(100, framerate + 20))); + settings.setCustomRenderer(JmeOffscreenSurfaceContext.class); + } + + public static SceneProcessorCopyToImageView bind(final JmeToJFXApplication application, final ImageView imageView, final Function factory) { + factory.apply(application::start).start(); + final SceneProcessorCopyToImageView processor = new SceneProcessorCopyToImageView(); + Platform.runLater(() -> application.enqueue(() -> processor.bind(imageView, application))); + return processor; + } +} diff --git a/src/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java b/src/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java index 692b78c..d55c324 100644 --- a/src/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java +++ b/src/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java @@ -1,11 +1,11 @@ package com.jme3x.jfx.injfx; -import com.jme3.app.Application; import com.jme3.post.SceneProcessor; import com.jme3.renderer.RenderManager; import com.jme3.renderer.ViewPort; import com.jme3.renderer.queue.RenderQueue; import com.jme3.texture.FrameBuffer; +import com.jme3x.jfx.injfx.input.JFXMouseInput; import com.jme3x.jfx.util.JFXPlatform; import java.util.List; @@ -35,6 +35,8 @@ public class SceneProcessorCopyToImageView implements SceneProcessor { private TransferImage transferImage; + private volatile JmeToJFXApplication application; + /** * The {@link ImageView} for showing the content of jME. */ @@ -96,7 +98,7 @@ protected void notifyComponentResized(int newWidth, int newHeight, boolean fixAs reshapeNeeded.set(true); } - public void bind(final ImageView imageView, final Application application) { + public void bind(final ImageView imageView, final JmeToJFXApplication application) { unbind(); final RenderManager renderManager = application.getRenderManager(); @@ -106,17 +108,29 @@ public void bind(final ImageView imageView, final Application application) { latestViewPorts = postViews.get(postViews.size() - 1); latestViewPorts.addProcessor(this); - JFXPlatform.runInFXThread(() -> bindImageView(imageView)); + JFXPlatform.runInFXThread(() -> bindImageView(application, imageView)); } - protected void bindImageView(final ImageView imageView) { - if (!Platform.isFxApplicationThread()) + protected void bindImageView(final JmeToJFXApplication application, final ImageView imageView) { + + if (!Platform.isFxApplicationThread()) { throw new RuntimeException("this call is not from JavaFX thread."); + } + + this.application = application; + + final JmeOffscreenSurfaceContext context = (JmeOffscreenSurfaceContext) application.getContext(); + final JFXMouseInput mouseInput = context.getMouseInput(); + mouseInput.bind(imageView); + this.imageView = imageView; this.imageView.fitWidthProperty().addListener(widthListener); this.imageView.fitHeightProperty().addListener(heightListener); this.imageView.preserveRatioProperty().addListener(rationListener); + this.imageView.setPickOnBounds(true); + notifyComponentResized((int) imageView.getFitWidth(), (int) imageView.getFitHeight(), imageView.isPreserveRatio()); + this.imageView.setScaleY(-1.0); } @@ -131,9 +145,20 @@ public void unbind() { } protected void unbindImageView() { - if (!Platform.isFxApplicationThread()) + + if (!Platform.isFxApplicationThread()) { throw new RuntimeException("this call is not from JavaFX thread."); + } + + if (application != null) { + final JmeOffscreenSurfaceContext context = (JmeOffscreenSurfaceContext) application.getContext(); + final JFXMouseInput mouseInput = context.getMouseInput(); + mouseInput.unbind(); + application = null; + } + if (imageView == null) return; + imageView.fitWidthProperty().removeListener(widthListener); imageView.fitHeightProperty().removeListener(heightListener); imageView.preserveRatioProperty().removeListener(rationListener); @@ -154,6 +179,10 @@ private TransferImage reshapeInThread(final int width, final int height, final b renderManager.notifyReshape(transferImage.getWidth(), transferImage.getHeight()); + final JmeOffscreenSurfaceContext context = (JmeOffscreenSurfaceContext) application.getContext(); + context.setHeight(height); + context.setWidth(width); + return transferImage; } diff --git a/src/com/jme3x/jfx/injfx/input/JFXInput.java b/src/com/jme3x/jfx/injfx/input/JFXInput.java new file mode 100644 index 0000000..3381dcb --- /dev/null +++ b/src/com/jme3x/jfx/injfx/input/JFXInput.java @@ -0,0 +1,77 @@ +package com.jme3x.jfx.injfx.input; + +import com.jme3.input.Input; +import com.jme3.input.RawInputListener; +import com.jme3x.jfx.injfx.ApplicationThreadExecutor; +import com.jme3x.jfx.injfx.JmeOffscreenSurfaceContext; + +import javafx.scene.image.ImageView; + +/** + * The base implementation of the {@link Input} for using in the ImageView. + * + * @author JavaSaBr. + */ +public class JFXInput implements Input { + + protected static final ApplicationThreadExecutor EXECUTOR = ApplicationThreadExecutor.getInstance(); + + protected final JmeOffscreenSurfaceContext context; + + protected RawInputListener listener; + + protected ImageView imageView; + + protected boolean initialized; + + public JFXInput(final JmeOffscreenSurfaceContext context) { + this.context = context; + } + + public void bind(final ImageView imageView) { + } + + public void unbind() { + } + + @Override + public void initialize() { + if (isInitialized()) return; + initializeImpl(); + initialized = true; + } + + protected void initializeImpl() { + + } + + @Override + public void update() { + if (!context.isRenderable()) return; + updateImpl(); + } + + protected void updateImpl() { + + } + + @Override + public void destroy() { + + } + + @Override + public boolean isInitialized() { + return initialized; + } + + @Override + public void setInputListener(final RawInputListener listener) { + this.listener = listener; + } + + @Override + public long getInputTimeNanos() { + return System.nanoTime(); + } +} diff --git a/src/com/jme3x/jfx/injfx/input/JFXKeyInput.java b/src/com/jme3x/jfx/injfx/input/JFXKeyInput.java new file mode 100644 index 0000000..6ddfcc4 --- /dev/null +++ b/src/com/jme3x/jfx/injfx/input/JFXKeyInput.java @@ -0,0 +1,40 @@ +package com.jme3x.jfx.injfx.input; + +import com.jme3.input.KeyInput; +import com.jme3.input.RawInputListener; + +/** + * Created by ronn on 03.12.16. + */ +public class JFXKeyInput implements KeyInput { + + @Override + public void initialize() { + + } + + @Override + public void update() { + + } + + @Override + public void destroy() { + + } + + @Override + public boolean isInitialized() { + return false; + } + + @Override + public void setInputListener(RawInputListener listener) { + + } + + @Override + public long getInputTimeNanos() { + return System.nanoTime(); + } +} diff --git a/src/com/jme3x/jfx/injfx/input/JFXMouseInput.java b/src/com/jme3x/jfx/injfx/input/JFXMouseInput.java new file mode 100644 index 0000000..bc75417 --- /dev/null +++ b/src/com/jme3x/jfx/injfx/input/JFXMouseInput.java @@ -0,0 +1,160 @@ +package com.jme3x.jfx.injfx.input; + +import com.jme3.cursors.plugins.JmeCursor; +import com.jme3.input.MouseInput; +import com.jme3.input.event.MouseButtonEvent; +import com.jme3.input.event.MouseMotionEvent; +import com.jme3x.jfx.injfx.JmeOffscreenSurfaceContext; + +import javafx.event.EventHandler; +import javafx.scene.image.ImageView; +import javafx.scene.input.MouseButton; +import javafx.scene.input.MouseEvent; +import javafx.scene.input.ScrollEvent; +import rlib.util.linkedlist.LinkedList; + +import static rlib.util.linkedlist.LinkedListFactory.newLinkedList; + +/** + * The implementation of the {@link MouseInput} for using in the ImageView. + * + * @author JavaSaBr. + */ +public class JFXMouseInput extends JFXInput implements MouseInput { + + private static final int WHEEL_SCALE = 10; + + private final EventHandler processMotion = this::processMotion; + private final EventHandler processPressed = this::processPressed; + private final EventHandler processReleased = this::processReleased; + private final EventHandler processScroll = this::processScroll; + + private final LinkedList mouseMotionEvents; + private final LinkedList mouseButtonEvents; + + private int mouseX; + private int mouseY; + private int mouseWheel; + + public JFXMouseInput(final JmeOffscreenSurfaceContext context) { + super(context); + mouseMotionEvents = newLinkedList(MouseMotionEvent.class); + mouseButtonEvents = newLinkedList(MouseButtonEvent.class); + } + + @Override + public void bind(final ImageView imageView) { + super.bind(imageView); + imageView.setOnMouseMoved(processMotion); + imageView.setOnMousePressed(processPressed); + imageView.setOnMouseReleased(processReleased); + imageView.setOnScroll(processScroll); + } + + @Override + public void unbind() { + super.unbind(); + imageView.setOnMouseMoved(null); + imageView.setOnMousePressed(null); + imageView.setOnMouseReleased(null); + imageView.setOnScroll(null); + } + + @Override + protected void updateImpl() { + while (!mouseMotionEvents.isEmpty()) { + listener.onMouseMotionEvent(mouseMotionEvents.poll()); + } + while (!mouseButtonEvents.isEmpty()) { + listener.onMouseButtonEvent(mouseButtonEvents.poll()); + } + } + + private void processScroll(final ScrollEvent mouseEvent) { + onWheelScroll(mouseEvent.getDeltaX() * WHEEL_SCALE, mouseEvent.getDeltaY() * WHEEL_SCALE); + } + + private void processReleased(final MouseEvent mouseEvent) { + onMouseButton(mouseEvent.getButton(), false); + } + + private void processPressed(final MouseEvent mouseEvent) { + onMouseButton(mouseEvent.getButton(), true); + } + + private void processMotion(final MouseEvent mouseEvent) { + onCursorPos(mouseEvent.getSceneX(), mouseEvent.getSceneY()); + } + + private void onWheelScroll(final double xOffset, final double yOffset) { + + mouseWheel += yOffset; + + final MouseMotionEvent mouseMotionEvent = new MouseMotionEvent(mouseX, mouseY, 0, 0, mouseWheel, (int) Math.round(yOffset)); + mouseMotionEvent.setTime(getInputTimeNanos()); + + EXECUTOR.addToExecute(() -> mouseMotionEvents.add(mouseMotionEvent)); + } + + private void onCursorPos(final double xpos, final double ypos) { + + int xDelta; + int yDelta; + int x = (int) Math.round(xpos); + int y = context.getHeight() - (int) Math.round(ypos); + + if (mouseX == 0) mouseX = x; + if (mouseY == 0) mouseY = y; + + xDelta = x - mouseX; + yDelta = y - mouseY; + + mouseX = x; + mouseY = y; + + if (xDelta == 0 && yDelta == 0) return; + + final MouseMotionEvent mouseMotionEvent = new MouseMotionEvent(x, y, xDelta, yDelta, mouseWheel, 0); + mouseMotionEvent.setTime(getInputTimeNanos()); + + EXECUTOR.addToExecute(() -> mouseMotionEvents.add(mouseMotionEvent)); + } + + private void onMouseButton(final MouseButton button, final boolean pressed) { + + final MouseButtonEvent mouseButtonEvent = new MouseButtonEvent(convertButton(button), pressed, mouseX, mouseY); + mouseButtonEvent.setTime(getInputTimeNanos()); + + EXECUTOR.addToExecute(() -> mouseButtonEvents.add(mouseButtonEvent)); + } + + private int convertButton(final MouseButton button) { + switch (button) { + case PRIMARY: { + return MouseInput.BUTTON_LEFT; + } + case MIDDLE: { + return MouseInput.BUTTON_MIDDLE; + } + case SECONDARY: { + return MouseInput.BUTTON_RIGHT; + } + default: { + return 0; + } + } + } + + @Override + public void setCursorVisible(final boolean visible) { + } + + @Override + public int getButtonCount() { + return 3; + } + + @Override + public void setNativeCursor(final JmeCursor cursor) { + } +} diff --git a/test-src/com/jme3x/jfx/HelloInput.java b/test-src/com/jme3x/jfx/HelloInput.java new file mode 100644 index 0000000..25be166 --- /dev/null +++ b/test-src/com/jme3x/jfx/HelloInput.java @@ -0,0 +1,143 @@ +/* + * Copyright (c) 2009-2012 jMonkeyEngine + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'jMonkeyEngine' nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package com.jme3x.jfx; + +import com.jme3.app.SimpleApplication; +import com.jme3.input.KeyInput; +import com.jme3.input.MouseInput; +import com.jme3.input.controls.ActionListener; +import com.jme3.input.controls.AnalogListener; +import com.jme3.input.controls.KeyTrigger; +import com.jme3.input.controls.MouseButtonTrigger; +import com.jme3.material.Material; +import com.jme3.math.ColorRGBA; +import com.jme3.math.Vector3f; +import com.jme3.scene.Geometry; +import com.jme3.scene.shape.Box; +import com.jme3.system.AppSettings; +import com.jme3.system.NativeLibraryLoader; + +/** + * Sample 5 - how to map keys and mousebuttons to actions + */ +public class HelloInput extends SimpleApplication { + + public static void main(String[] args) { + HelloInput app = new HelloInput(); + final AppSettings settings = new AppSettings(true); + settings.setHeight(600); + settings.setWidth(600); + settings.setUseInput(true); + app.setSettings(settings); + app.setShowSettings(false); + app.start(); + } + + protected Geometry player; + Boolean isRunning = true; + + @Override + public void start() { + + if ("LWJGL".equals(settings.getAudioRenderer())) { + NativeLibraryLoader.loadNativeLibrary("openal-lwjgl3", true); + } + + NativeLibraryLoader.loadNativeLibrary("lwjgl3", true); + NativeLibraryLoader.loadNativeLibrary("glfw-lwjgl3", true); + NativeLibraryLoader.loadNativeLibrary("jemalloc-lwjgl3", true); + NativeLibraryLoader.loadNativeLibrary("jinput", true); + NativeLibraryLoader.loadNativeLibrary("jinput-dx8", true); + + super.start(); + } + + @Override + public void simpleInitApp() { + Box b = new Box(1, 1, 1); + player = new Geometry("Player", b); + Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); + mat.setColor("Color", ColorRGBA.Blue); + player.setMaterial(mat); + rootNode.attachChild(player); + initKeys(); // load my custom keybinding + } + + /** + * Custom Keybinding: Map named actions to inputs. + */ + private void initKeys() { + /** You can map one or several inputs to one named mapping. */ + inputManager.addMapping("Pause", new KeyTrigger(keyInput.KEY_P)); + inputManager.addMapping("Left", new KeyTrigger(KeyInput.KEY_J)); + inputManager.addMapping("Right", new KeyTrigger(KeyInput.KEY_K)); + inputManager.addMapping("Rotate", new KeyTrigger(KeyInput.KEY_SPACE), // spacebar! + new MouseButtonTrigger(MouseInput.BUTTON_LEFT)); // left click! + /** Add the named mappings to the action listeners. */ + inputManager.addListener(actionListener, "Pause"); + inputManager.addListener(analogListener, "Left", "Right", "Rotate"); + } + + /** + * Use this listener for KeyDown/KeyUp events + */ + private ActionListener actionListener = new ActionListener() { + public void onAction(String name, boolean keyPressed, float tpf) { + if (name.equals("Pause") && !keyPressed) { + isRunning = !isRunning; + } + } + }; + + /** + * Use this listener for continuous events + */ + private AnalogListener analogListener = new AnalogListener() { + public void onAnalog(String name, float value, float tpf) { + if (isRunning) { + if (name.equals("Rotate")) { + player.rotate(0, value, 0); + } + if (name.equals("Right")) { + player.move((new Vector3f(value, 0, 0))); + } + if (name.equals("Left")) { + player.move(new Vector3f(-value, 0, 0)); + } + } else { + System.out.println("Press P to unpause."); + } + } + }; + +} diff --git a/test-src/com/jme3x/jfx/TestJmeToJFX.java b/test-src/com/jme3x/jfx/TestJmeToJFX.java index 3fb9ab2..3979b52 100644 --- a/test-src/com/jme3x/jfx/TestJmeToJFX.java +++ b/test-src/com/jme3x/jfx/TestJmeToJFX.java @@ -1,18 +1,23 @@ package com.jme3x.jfx; -import com.jme3.app.DebugKeysAppState; -import com.jme3.app.SimpleApplication; +import com.jme3.input.KeyInput; +import com.jme3.input.MouseInput; +import com.jme3.input.controls.ActionListener; +import com.jme3.input.controls.AnalogListener; +import com.jme3.input.controls.KeyTrigger; +import com.jme3.input.controls.MouseButtonTrigger; import com.jme3.material.Material; import com.jme3.math.ColorRGBA; +import com.jme3.math.Vector3f; import com.jme3.scene.Geometry; import com.jme3.scene.shape.Box; import com.jme3.system.AppSettings; import com.jme3.system.NativeLibraryLoader; -import com.jme3x.jfx.injfx.JmeContextOffscreenSurface; -import com.jme3x.jfx.injfx.SceneProcessorCopyToImageView; +import com.jme3x.jfx.injfx.JmeOffscreenSurfaceContext; +import com.jme3x.jfx.injfx.JmeToJFXApplication; +import com.jme3x.jfx.injfx.JmeToJFXIntegrator; import javafx.application.Application; -import javafx.application.Platform; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.image.ImageView; @@ -24,8 +29,6 @@ */ public class TestJmeToJFX extends Application { - private SceneProcessorCopyToImageView jmeAppDisplayBinder = new SceneProcessorCopyToImageView(); - public static void main(final String[] args) { launch(args); } @@ -45,28 +48,19 @@ public void start(final Stage stage) throws Exception { stage.setScene(scene); stage.show(); - new Thread(() -> { - final SimpleApplication application = makeJmeApplication(stage, 80); - new Thread(application::start).start(); + final JmeToJFXApplication application = makeJmeApplication(stage, 80); - Platform.runLater(() -> { - application.enqueue(() -> jmeAppDisplayBinder.bind(imageView, application)); - }); - }).start(); + JmeToJFXIntegrator.bind(application, imageView, Thread::new); } + private static JmeToJFXApplication makeJmeApplication(Stage stage, int framerate) { + final AppSettings settings = new AppSettings(true); + JmeToJFXIntegrator.prepareSettings(settings, 60); - private static SimpleApplication makeJmeApplication(Stage stage, int framerate) { - AppSettings settings = new AppSettings(true); - // important to use those settings - settings.setFullscreen(false); - settings.setUseInput(false); - settings.setFrameRate(Math.max(1, Math.min(80, framerate))); - settings.setCustomRenderer(com.jme3x.jfx.injfx.JmeContextOffscreenSurface.class); - - SimpleApplication app = new SimpleApplication(){ + JmeToJFXApplication app = new JmeToJFXApplication() { - public Geometry player; + protected Geometry player; + Boolean isRunning = true; @Override public void start() { @@ -81,34 +75,65 @@ public void start() { NativeLibraryLoader.loadNativeLibrary("jinput", true); NativeLibraryLoader.loadNativeLibrary("jinput-dx8", true); - JmeContextOffscreenSurface.setLocalStage(stage); + JmeOffscreenSurfaceContext.setLocalStage(stage); try { super.start(); } finally { - JmeContextOffscreenSurface.setLocalStage(null); + JmeOffscreenSurfaceContext.setLocalStage(null); } } @Override public void simpleInitApp() { - // to prevent a NPE (due to setUseInput(null)) on Application.stop() - getStateManager().detach(getStateManager().getState(DebugKeysAppState.class)); - /** this blue box is our player character */ Box b = new Box(1, 1, 1); - player = new Geometry("blue cube", b); - Material mat = new Material(assetManager, - "Common/MatDefs/Misc/Unshaded.j3md"); + player = new Geometry("Player", b); + Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); mat.setColor("Color", ColorRGBA.Blue); player.setMaterial(mat); rootNode.attachChild(player); + initKeys(); // load my custom keybinding } - /* Use the main event loop to trigger repeating actions. */ - @Override - public void simpleUpdate(float tpf) { - // make the player rotate: - player.rotate(0, 2*tpf, 0); + /** Custom Keybinding: Map named actions to inputs. */ + private void initKeys() { + /** You can map one or several inputs to one named mapping. */ + inputManager.addMapping("Pause", new KeyTrigger(keyInput.KEY_P)); + inputManager.addMapping("Left", new KeyTrigger(KeyInput.KEY_J)); + inputManager.addMapping("Right", new KeyTrigger(KeyInput.KEY_K)); + inputManager.addMapping("Rotate", new KeyTrigger(KeyInput.KEY_SPACE), // spacebar! + new MouseButtonTrigger(MouseInput.BUTTON_LEFT)); // left click! + /** Add the named mappings to the action listeners. */ + inputManager.addListener(actionListener, "Pause"); + inputManager.addListener(analogListener, "Left", "Right", "Rotate"); } + + /** Use this listener for KeyDown/KeyUp events */ + private ActionListener actionListener = new ActionListener() { + public void onAction(String name, boolean keyPressed, float tpf) { + if (name.equals("Pause") && !keyPressed) { + isRunning = !isRunning; + } + } + }; + + /** Use this listener for continuous events */ + private AnalogListener analogListener = new AnalogListener() { + public void onAnalog(String name, float value, float tpf) { + if (isRunning) { + if (name.equals("Rotate")) { + player.rotate(0, value, 0); + } + if (name.equals("Right")) { + player.move((new Vector3f(value, 0, 0))); + } + if (name.equals("Left")) { + player.move(new Vector3f(-value, 0, 0)); + } + } else { + System.out.println("Press P to unpause."); + } + } + }; }; app.setSettings(settings); app.setShowSettings(false); From 7b7562242c02f21a0d6b19c3cf5d0657aabb3fcb Mon Sep 17 00:00:00 2001 From: javasabr Date: Sun, 4 Dec 2016 11:07:24 +0300 Subject: [PATCH 09/24] implemented KeyInput --- .../jfx/injfx/JmeOffscreenSurfaceContext.java | 2 +- .../jme3x/jfx/injfx/JmeToJFXApplication.java | 19 ++ .../injfx/SceneProcessorCopyToImageView.java | 6 + src/com/jme3x/jfx/injfx/input/JFXInput.java | 14 +- .../jme3x/jfx/injfx/input/JFXKeyInput.java | 182 ++++++++++++++++-- .../jme3x/jfx/injfx/input/JFXMouseInput.java | 60 +++--- test-src/com/jme3x/jfx/TestJmeToJFX.java | 10 +- 7 files changed, 244 insertions(+), 49 deletions(-) diff --git a/src/com/jme3x/jfx/injfx/JmeOffscreenSurfaceContext.java b/src/com/jme3x/jfx/injfx/JmeOffscreenSurfaceContext.java index c8f9889..22fa852 100644 --- a/src/com/jme3x/jfx/injfx/JmeOffscreenSurfaceContext.java +++ b/src/com/jme3x/jfx/injfx/JmeOffscreenSurfaceContext.java @@ -53,7 +53,7 @@ public static void setLocalStage(final Stage stage) { public JmeOffscreenSurfaceContext() { this.window = STAGE_LOCAL.get(); - this.keyInput = new JFXKeyInput(); + this.keyInput = new JFXKeyInput(this); this.mouseInput = new JFXMouseInput(this); requireNonNull(window, "you have to set a Stage to thread local."); this.settings = createSettings(); diff --git a/src/com/jme3x/jfx/injfx/JmeToJFXApplication.java b/src/com/jme3x/jfx/injfx/JmeToJFXApplication.java index e906bd2..d8d3b8f 100644 --- a/src/com/jme3x/jfx/injfx/JmeToJFXApplication.java +++ b/src/com/jme3x/jfx/injfx/JmeToJFXApplication.java @@ -4,6 +4,9 @@ import com.jme3.app.SimpleApplication; import javafx.scene.image.ImageView; +import javafx.stage.Stage; + +import static com.jme3x.jfx.injfx.JmeOffscreenSurfaceContext.setLocalStage; /** * The base implementation of {@link Application} for using in the {@link ImageView}. @@ -14,6 +17,22 @@ public class JmeToJFXApplication extends SimpleApplication { private static final ApplicationThreadExecutor EXECUTOR = ApplicationThreadExecutor.getInstance(); + private final Stage stage; + + public JmeToJFXApplication(final Stage stage) { + this.stage = stage; + } + + @Override + public void start() { + setLocalStage(stage); + try { + super.start(); + } finally { + setLocalStage(null); + } + } + @Override public void update() { EXECUTOR.execute(); diff --git a/src/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java b/src/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java index d55c324..103b5be 100644 --- a/src/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java +++ b/src/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java @@ -5,6 +5,7 @@ import com.jme3.renderer.ViewPort; import com.jme3.renderer.queue.RenderQueue; import com.jme3.texture.FrameBuffer; +import com.jme3x.jfx.injfx.input.JFXKeyInput; import com.jme3x.jfx.injfx.input.JFXMouseInput; import com.jme3x.jfx.util.JFXPlatform; @@ -123,6 +124,9 @@ protected void bindImageView(final JmeToJFXApplication application, final ImageV final JFXMouseInput mouseInput = context.getMouseInput(); mouseInput.bind(imageView); + final JFXKeyInput keyInput = context.getKeyInput(); + keyInput.bind(imageView); + this.imageView = imageView; this.imageView.fitWidthProperty().addListener(widthListener); this.imageView.fitHeightProperty().addListener(heightListener); @@ -154,6 +158,8 @@ protected void unbindImageView() { final JmeOffscreenSurfaceContext context = (JmeOffscreenSurfaceContext) application.getContext(); final JFXMouseInput mouseInput = context.getMouseInput(); mouseInput.unbind(); + final JFXKeyInput keyInput = context.getKeyInput(); + keyInput.unbind(); application = null; } diff --git a/src/com/jme3x/jfx/injfx/input/JFXInput.java b/src/com/jme3x/jfx/injfx/input/JFXInput.java index 3381dcb..fc47d99 100644 --- a/src/com/jme3x/jfx/injfx/input/JFXInput.java +++ b/src/com/jme3x/jfx/injfx/input/JFXInput.java @@ -5,6 +5,9 @@ import com.jme3x.jfx.injfx.ApplicationThreadExecutor; import com.jme3x.jfx.injfx.JmeOffscreenSurfaceContext; +import java.util.Objects; + +import javafx.scene.Scene; import javafx.scene.image.ImageView; /** @@ -22,6 +25,8 @@ public class JFXInput implements Input { protected ImageView imageView; + protected Scene scene; + protected boolean initialized; public JFXInput(final JmeOffscreenSurfaceContext context) { @@ -29,9 +34,15 @@ public JFXInput(final JmeOffscreenSurfaceContext context) { } public void bind(final ImageView imageView) { + this.imageView = imageView; + this.scene = imageView.getScene(); + Objects.requireNonNull(this.imageView, "ImageView can' be null"); + Objects.requireNonNull(this.scene, "The scene of the ImageView can' be null"); } public void unbind() { + this.imageView = null; + this.scene = null; } @Override @@ -52,12 +63,11 @@ public void update() { } protected void updateImpl() { - } @Override public void destroy() { - + unbind(); } @Override diff --git a/src/com/jme3x/jfx/injfx/input/JFXKeyInput.java b/src/com/jme3x/jfx/injfx/input/JFXKeyInput.java index 6ddfcc4..958692a 100644 --- a/src/com/jme3x/jfx/injfx/input/JFXKeyInput.java +++ b/src/com/jme3x/jfx/injfx/input/JFXKeyInput.java @@ -1,40 +1,192 @@ package com.jme3x.jfx.injfx.input; import com.jme3.input.KeyInput; -import com.jme3.input.RawInputListener; +import com.jme3.input.event.KeyInputEvent; +import com.jme3x.jfx.injfx.JmeOffscreenSurfaceContext; + +import java.util.HashMap; +import java.util.Map; + +import javafx.event.EventHandler; +import javafx.scene.image.ImageView; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; +import rlib.util.linkedlist.LinkedList; + +import static rlib.util.linkedlist.LinkedListFactory.newLinkedList; /** - * Created by ronn on 03.12.16. + * The implementation of the {@link KeyInput} for using in the {@link ImageView}. + * + * @author JavaSaBr. */ -public class JFXKeyInput implements KeyInput { +public class JFXKeyInput extends JFXInput implements KeyInput { - @Override - public void initialize() { + private static final Map KEY_CODE_TO_JME = new HashMap<>(); + static { + KEY_CODE_TO_JME.put(KeyCode.ESCAPE, KEY_ESCAPE); + KEY_CODE_TO_JME.put(KeyCode.DIGIT0, KEY_0); + KEY_CODE_TO_JME.put(KeyCode.DIGIT1, KEY_1); + KEY_CODE_TO_JME.put(KeyCode.DIGIT2, KEY_2); + KEY_CODE_TO_JME.put(KeyCode.DIGIT3, KEY_3); + KEY_CODE_TO_JME.put(KeyCode.DIGIT4, KEY_4); + KEY_CODE_TO_JME.put(KeyCode.DIGIT5, KEY_5); + KEY_CODE_TO_JME.put(KeyCode.DIGIT6, KEY_6); + KEY_CODE_TO_JME.put(KeyCode.DIGIT7, KEY_7); + KEY_CODE_TO_JME.put(KeyCode.DIGIT8, KEY_8); + KEY_CODE_TO_JME.put(KeyCode.DIGIT9, KEY_9); + KEY_CODE_TO_JME.put(KeyCode.MINUS, KEY_MINUS); + KEY_CODE_TO_JME.put(KeyCode.EQUALS, KEY_EQUALS); + KEY_CODE_TO_JME.put(KeyCode.BACK_SPACE, KEY_BACK); + KEY_CODE_TO_JME.put(KeyCode.TAB, KEY_TAB); + KEY_CODE_TO_JME.put(KeyCode.Q, KEY_Q); + KEY_CODE_TO_JME.put(KeyCode.W, KEY_W); + KEY_CODE_TO_JME.put(KeyCode.E, KEY_E); + KEY_CODE_TO_JME.put(KeyCode.R, KEY_R); + KEY_CODE_TO_JME.put(KeyCode.T, KEY_T); + KEY_CODE_TO_JME.put(KeyCode.U, KEY_U); + KEY_CODE_TO_JME.put(KeyCode.I, KEY_I); + KEY_CODE_TO_JME.put(KeyCode.O, KEY_O); + KEY_CODE_TO_JME.put(KeyCode.P, KEY_P); + KEY_CODE_TO_JME.put(KeyCode.OPEN_BRACKET, KEY_LBRACKET); + KEY_CODE_TO_JME.put(KeyCode.CLOSE_BRACKET, KEY_RBRACKET); + KEY_CODE_TO_JME.put(KeyCode.ENTER, KEY_RETURN); + KEY_CODE_TO_JME.put(KeyCode.CONTROL, KEY_LCONTROL); + KEY_CODE_TO_JME.put(KeyCode.A, KEY_A); + KEY_CODE_TO_JME.put(KeyCode.S, KEY_S); + KEY_CODE_TO_JME.put(KeyCode.D, KEY_D); + KEY_CODE_TO_JME.put(KeyCode.F, KEY_F); + KEY_CODE_TO_JME.put(KeyCode.G, KEY_G); + KEY_CODE_TO_JME.put(KeyCode.H, KEY_H); + KEY_CODE_TO_JME.put(KeyCode.J, KEY_J); + KEY_CODE_TO_JME.put(KeyCode.K, KEY_K); + KEY_CODE_TO_JME.put(KeyCode.L, KEY_L); + KEY_CODE_TO_JME.put(KeyCode.SEMICOLON, KEY_SEMICOLON); + KEY_CODE_TO_JME.put(KeyCode.QUOTE, KEY_APOSTROPHE); + KEY_CODE_TO_JME.put(KeyCode.DEAD_GRAVE, KEY_GRAVE); + KEY_CODE_TO_JME.put(KeyCode.SHIFT, KEY_LSHIFT); + KEY_CODE_TO_JME.put(KeyCode.BACK_SLASH, KEY_BACKSLASH); + KEY_CODE_TO_JME.put(KeyCode.Z, KEY_Z); + KEY_CODE_TO_JME.put(KeyCode.X, KEY_X); + KEY_CODE_TO_JME.put(KeyCode.C, KEY_C); + KEY_CODE_TO_JME.put(KeyCode.V, KEY_V); + KEY_CODE_TO_JME.put(KeyCode.B, KEY_B); + KEY_CODE_TO_JME.put(KeyCode.N, KEY_N); + KEY_CODE_TO_JME.put(KeyCode.M, KEY_M); + KEY_CODE_TO_JME.put(KeyCode.COMMA, KEY_COMMA); + KEY_CODE_TO_JME.put(KeyCode.PERIOD, KEY_PERIOD); + KEY_CODE_TO_JME.put(KeyCode.SLASH, KEY_SLASH); + KEY_CODE_TO_JME.put(KeyCode.MULTIPLY, KEY_MULTIPLY); + KEY_CODE_TO_JME.put(KeyCode.SPACE, KEY_SPACE); + KEY_CODE_TO_JME.put(KeyCode.CAPS, KEY_CAPITAL); + KEY_CODE_TO_JME.put(KeyCode.F1, KEY_F1); + KEY_CODE_TO_JME.put(KeyCode.F2, KEY_F2); + KEY_CODE_TO_JME.put(KeyCode.F3, KEY_F3); + KEY_CODE_TO_JME.put(KeyCode.F4, KEY_F4); + KEY_CODE_TO_JME.put(KeyCode.F5, KEY_F5); + KEY_CODE_TO_JME.put(KeyCode.F6, KEY_F6); + KEY_CODE_TO_JME.put(KeyCode.F7, KEY_F7); + KEY_CODE_TO_JME.put(KeyCode.F8, KEY_F8); + KEY_CODE_TO_JME.put(KeyCode.F9, KEY_F9); + KEY_CODE_TO_JME.put(KeyCode.F10, KEY_F10); + KEY_CODE_TO_JME.put(KeyCode.NUM_LOCK, KEY_NUMLOCK); + KEY_CODE_TO_JME.put(KeyCode.SCROLL_LOCK, KEY_SCROLL); + KEY_CODE_TO_JME.put(KeyCode.NUMPAD7, KEY_NUMPAD7); + KEY_CODE_TO_JME.put(KeyCode.NUMPAD8, KEY_NUMPAD8); + KEY_CODE_TO_JME.put(KeyCode.NUMPAD9, KEY_NUMPAD9); + KEY_CODE_TO_JME.put(KeyCode.SUBTRACT, KEY_SUBTRACT); + KEY_CODE_TO_JME.put(KeyCode.NUMPAD4, KEY_NUMPAD4); + KEY_CODE_TO_JME.put(KeyCode.NUMPAD5, KEY_NUMPAD5); + KEY_CODE_TO_JME.put(KeyCode.NUMPAD6, KEY_NUMPAD6); + KEY_CODE_TO_JME.put(KeyCode.ADD, KEY_ADD); + KEY_CODE_TO_JME.put(KeyCode.NUMPAD1, KEY_NUMPAD1); + KEY_CODE_TO_JME.put(KeyCode.NUMPAD2, KEY_NUMPAD2); + KEY_CODE_TO_JME.put(KeyCode.NUMPAD3, KEY_NUMPAD3); + KEY_CODE_TO_JME.put(KeyCode.NUMPAD0, KEY_NUMPAD0); + KEY_CODE_TO_JME.put(KeyCode.DECIMAL, KEY_DECIMAL); + KEY_CODE_TO_JME.put(KeyCode.F11, KEY_F11); + KEY_CODE_TO_JME.put(KeyCode.F12, KEY_F12); + KEY_CODE_TO_JME.put(KeyCode.F13, KEY_F13); + KEY_CODE_TO_JME.put(KeyCode.F14, KEY_F14); + KEY_CODE_TO_JME.put(KeyCode.F15, KEY_F15); + KEY_CODE_TO_JME.put(KeyCode.KANA, KEY_KANA); + KEY_CODE_TO_JME.put(KeyCode.CONVERT, KEY_CONVERT); + KEY_CODE_TO_JME.put(KeyCode.NONCONVERT, KEY_NOCONVERT); + KEY_CODE_TO_JME.put(KeyCode.CIRCUMFLEX, KEY_CIRCUMFLEX); + KEY_CODE_TO_JME.put(KeyCode.AT, KEY_AT); + KEY_CODE_TO_JME.put(KeyCode.COLON, KEY_COLON); + KEY_CODE_TO_JME.put(KeyCode.UNDERSCORE, KEY_UNDERLINE); + KEY_CODE_TO_JME.put(KeyCode.STOP, KEY_STOP); + KEY_CODE_TO_JME.put(KeyCode.DIVIDE, KEY_DIVIDE); + KEY_CODE_TO_JME.put(KeyCode.PAUSE, KEY_PAUSE); + KEY_CODE_TO_JME.put(KeyCode.HOME, KEY_HOME); + KEY_CODE_TO_JME.put(KeyCode.UP, KEY_UP); + KEY_CODE_TO_JME.put(KeyCode.PAGE_UP, KEY_PRIOR); + KEY_CODE_TO_JME.put(KeyCode.LEFT, KEY_LEFT); + KEY_CODE_TO_JME.put(KeyCode.RIGHT, KEY_RIGHT); + KEY_CODE_TO_JME.put(KeyCode.END, KEY_END); + KEY_CODE_TO_JME.put(KeyCode.DOWN, KEY_DOWN); + KEY_CODE_TO_JME.put(KeyCode.PAGE_DOWN, KEY_NEXT); + KEY_CODE_TO_JME.put(KeyCode.INSERT, KEY_INSERT); + KEY_CODE_TO_JME.put(KeyCode.DELETE, KEY_DELETE); + KEY_CODE_TO_JME.put(KeyCode.ALT, KEY_LMENU); + KEY_CODE_TO_JME.put(KeyCode.META, KEY_RCONTROL); } - @Override - public void update() { + private final EventHandler processKeyPressed = this::processKeyPressed; + private final EventHandler processKeyReleased = this::processKeyReleased; + + private final LinkedList keyInputEvents; + public JFXKeyInput(final JmeOffscreenSurfaceContext context) { + super(context); + keyInputEvents = newLinkedList(KeyInputEvent.class); } @Override - public void destroy() { - + public void bind(final ImageView imageView) { + super.bind(imageView); + scene.addEventHandler(KeyEvent.KEY_PRESSED, processKeyPressed); + scene.addEventHandler(KeyEvent.KEY_RELEASED, processKeyReleased); } @Override - public boolean isInitialized() { - return false; + public void unbind() { + scene.removeEventHandler(KeyEvent.KEY_PRESSED, processKeyPressed); + scene.removeEventHandler(KeyEvent.KEY_RELEASED, processKeyReleased); + super.unbind(); } - @Override - public void setInputListener(RawInputListener listener) { + private void processKeyReleased(final KeyEvent keyEvent) { + onKeyEvent(keyEvent, false); + } + + private void processKeyPressed(final KeyEvent keyEvent) { + onKeyEvent(keyEvent, true); + } + + private void onKeyEvent(final KeyEvent keyEvent, final boolean pressed) { + final int code = convertKeyCode(keyEvent.getCode()); + final String character = keyEvent.getText(); + final char keyChar = character.isEmpty() ? '\0' : character.charAt(0); + + final KeyInputEvent event = new KeyInputEvent(code, keyChar, pressed, false); + event.setTime(getInputTimeNanos()); + + EXECUTOR.addToExecute(() -> keyInputEvents.add(event)); } @Override - public long getInputTimeNanos() { - return System.nanoTime(); + protected void updateImpl() { + while (!keyInputEvents.isEmpty()) { + listener.onKeyEvent(keyInputEvents.poll()); + } + } + + private int convertKeyCode(final KeyCode keyCode) { + final Integer code = KEY_CODE_TO_JME.get(keyCode); + return code == null ? KEY_UNKNOWN : code; } } diff --git a/src/com/jme3x/jfx/injfx/input/JFXMouseInput.java b/src/com/jme3x/jfx/injfx/input/JFXMouseInput.java index bc75417..22228c4 100644 --- a/src/com/jme3x/jfx/injfx/input/JFXMouseInput.java +++ b/src/com/jme3x/jfx/injfx/input/JFXMouseInput.java @@ -6,6 +6,9 @@ import com.jme3.input.event.MouseMotionEvent; import com.jme3x.jfx.injfx.JmeOffscreenSurfaceContext; +import java.util.HashMap; +import java.util.Map; + import javafx.event.EventHandler; import javafx.scene.image.ImageView; import javafx.scene.input.MouseButton; @@ -16,12 +19,23 @@ import static rlib.util.linkedlist.LinkedListFactory.newLinkedList; /** - * The implementation of the {@link MouseInput} for using in the ImageView. + * The implementation of the {@link MouseInput} for using in the {@link ImageView}. * * @author JavaSaBr. */ public class JFXMouseInput extends JFXInput implements MouseInput { + private static final Map MOUSE_BUTTON_TO_JME = new HashMap<>(); + + static { + MOUSE_BUTTON_TO_JME.put(MouseButton.PRIMARY, BUTTON_LEFT); + MOUSE_BUTTON_TO_JME.put(MouseButton.SECONDARY, BUTTON_RIGHT); + MOUSE_BUTTON_TO_JME.put(MouseButton.MIDDLE, BUTTON_MIDDLE); + } + + /** + * The scale factor for scrolling. + */ private static final int WHEEL_SCALE = 10; private final EventHandler processMotion = this::processMotion; @@ -45,19 +59,19 @@ public JFXMouseInput(final JmeOffscreenSurfaceContext context) { @Override public void bind(final ImageView imageView) { super.bind(imageView); - imageView.setOnMouseMoved(processMotion); - imageView.setOnMousePressed(processPressed); - imageView.setOnMouseReleased(processReleased); - imageView.setOnScroll(processScroll); + scene.addEventHandler(MouseEvent.MOUSE_MOVED, processMotion); + scene.addEventHandler(MouseEvent.MOUSE_PRESSED, processPressed); + scene.addEventHandler(MouseEvent.MOUSE_RELEASED, processReleased); + scene.addEventHandler(ScrollEvent.ANY, processScroll); } @Override public void unbind() { + scene.removeEventHandler(MouseEvent.MOUSE_MOVED, processMotion); + scene.removeEventHandler(MouseEvent.MOUSE_PRESSED, processPressed); + scene.removeEventHandler(MouseEvent.MOUSE_RELEASED, processReleased); + scene.removeEventHandler(ScrollEvent.ANY, processScroll); super.unbind(); - imageView.setOnMouseMoved(null); - imageView.setOnMousePressed(null); - imageView.setOnMouseReleased(null); - imageView.setOnScroll(null); } @Override @@ -70,18 +84,30 @@ protected void updateImpl() { } } + /** + * Handle the scroll event. + */ private void processScroll(final ScrollEvent mouseEvent) { onWheelScroll(mouseEvent.getDeltaX() * WHEEL_SCALE, mouseEvent.getDeltaY() * WHEEL_SCALE); } + /** + * Handle the mouse released event. + */ private void processReleased(final MouseEvent mouseEvent) { onMouseButton(mouseEvent.getButton(), false); } + /** + * Handle the mouse pressed event. + */ private void processPressed(final MouseEvent mouseEvent) { onMouseButton(mouseEvent.getButton(), true); } + /** + * Handle the mouse motion event. + */ private void processMotion(final MouseEvent mouseEvent) { onCursorPos(mouseEvent.getSceneX(), mouseEvent.getSceneY()); } @@ -129,20 +155,8 @@ private void onMouseButton(final MouseButton button, final boolean pressed) { } private int convertButton(final MouseButton button) { - switch (button) { - case PRIMARY: { - return MouseInput.BUTTON_LEFT; - } - case MIDDLE: { - return MouseInput.BUTTON_MIDDLE; - } - case SECONDARY: { - return MouseInput.BUTTON_RIGHT; - } - default: { - return 0; - } - } + final Integer result = MOUSE_BUTTON_TO_JME.get(button); + return result == null ? 0 : result; } @Override diff --git a/test-src/com/jme3x/jfx/TestJmeToJFX.java b/test-src/com/jme3x/jfx/TestJmeToJFX.java index 3979b52..3e7d7a4 100644 --- a/test-src/com/jme3x/jfx/TestJmeToJFX.java +++ b/test-src/com/jme3x/jfx/TestJmeToJFX.java @@ -13,7 +13,6 @@ import com.jme3.scene.shape.Box; import com.jme3.system.AppSettings; import com.jme3.system.NativeLibraryLoader; -import com.jme3x.jfx.injfx.JmeOffscreenSurfaceContext; import com.jme3x.jfx.injfx.JmeToJFXApplication; import com.jme3x.jfx.injfx.JmeToJFXIntegrator; @@ -57,7 +56,7 @@ private static JmeToJFXApplication makeJmeApplication(Stage stage, int framerate final AppSettings settings = new AppSettings(true); JmeToJFXIntegrator.prepareSettings(settings, 60); - JmeToJFXApplication app = new JmeToJFXApplication() { + JmeToJFXApplication app = new JmeToJFXApplication(stage) { protected Geometry player; Boolean isRunning = true; @@ -75,12 +74,7 @@ public void start() { NativeLibraryLoader.loadNativeLibrary("jinput", true); NativeLibraryLoader.loadNativeLibrary("jinput-dx8", true); - JmeOffscreenSurfaceContext.setLocalStage(stage); - try { - super.start(); - } finally { - JmeOffscreenSurfaceContext.setLocalStage(null); - } + super.start(); } @Override From b2860a263e72e5055b905024eb7a2a4f3b466be8 Mon Sep 17 00:00:00 2001 From: javasabr Date: Sun, 4 Dec 2016 12:59:27 +0300 Subject: [PATCH 10/24] rebuilded and added dependences --- .../artifacts/{jfx_1_3_2.xml => jfx_1_4_0.xml} | 4 ++-- build/jfx-1.2.jar | Bin 86757 -> 0 bytes build/jfx-1.3.1.jar | Bin 83088 -> 0 bytes build/jfx-1.3.2.jar | Bin 84050 -> 0 bytes build/jfx-1.3.jar | Bin 83128 -> 0 bytes build/jfx-1.4.0.jar | Bin 0 -> 103815 bytes lib/rlib-4.0.0.jar | Bin 0 -> 426271 bytes lib/rlib-sources-4.0.0.jar | Bin 0 -> 281311 bytes 8 files changed, 2 insertions(+), 2 deletions(-) rename .idea/artifacts/{jfx_1_3_2.xml => jfx_1_4_0.xml} (67%) delete mode 100644 build/jfx-1.2.jar delete mode 100644 build/jfx-1.3.1.jar delete mode 100644 build/jfx-1.3.2.jar delete mode 100644 build/jfx-1.3.jar create mode 100644 build/jfx-1.4.0.jar create mode 100644 lib/rlib-4.0.0.jar create mode 100644 lib/rlib-sources-4.0.0.jar diff --git a/.idea/artifacts/jfx_1_3_2.xml b/.idea/artifacts/jfx_1_4_0.xml similarity index 67% rename from .idea/artifacts/jfx_1_3_2.xml rename to .idea/artifacts/jfx_1_4_0.xml index c7f3557..b63085e 100644 --- a/.idea/artifacts/jfx_1_3_2.xml +++ b/.idea/artifacts/jfx_1_4_0.xml @@ -1,7 +1,7 @@ - + $PROJECT_DIR$/build/ - + diff --git a/build/jfx-1.2.jar b/build/jfx-1.2.jar deleted file mode 100644 index 033ed0cc72a7029585f210b65475dba652dd851f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86757 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�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 V!5*_`2K;>itQm260V@EY{{wJeb?N{B diff --git a/build/jfx-1.3.1.jar b/build/jfx-1.3.1.jar deleted file mode 100644 index a8795d7380fed7ca0ca064f2e68d774001a59c50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83088 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ݪ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 diff --git a/build/jfx-1.3.2.jar b/build/jfx-1.3.2.jar deleted file mode 100644 index bd58fd99c8d32d4a97038930c9786f5e2a28693c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84050 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 diff --git a/build/jfx-1.3.jar b/build/jfx-1.3.jar deleted file mode 100644 index 8c9d2bb29d767c5e139072f936c21653bedcde8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83128 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

    jEw)JAH;dRXHB_6xtJ_YAU_N&!26Qtyb>OY>|S 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 diff --git a/build/jfx-1.4.0.jar b/build/jfx-1.4.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..8e7a21320b79367481ee5e22dff241c4ea7209ad GIT binary patch literal 103815 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 TyWjx)sRN>;VfX?1JD~pub7sOk literal 0 HcmV?d00001 diff --git a/lib/rlib-4.0.0.jar b/lib/rlib-4.0.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..4d54c78e170bb9ede653af80ad2636b8f3a798cf GIT binary patch literal 426271 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

    eGsL$j7*cgFj$L9+}vuuCRyf0Z=K-Xpm4N^d^ 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

    ;y+Urd{}u$>zVa>gTOwMC2wn~ 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≻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 z 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

    (1B8imT8EXb&bA$rHXcrjf*cUJ$O>Q%{ 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 U3>;fKoLi{$Bz!944K&dFAFEtT9RL6T literal 0 HcmV?d00001 diff --git a/lib/rlib-sources-4.0.0.jar b/lib/rlib-sources-4.0.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..ce2c2d0cee99245a5407839468bc2c63163d2224 GIT binary patch literal 281311 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%0D-jeHS`l$1>Lj{c&w$fc~t3k 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�I~aMLEJ^o3Lzg)9!?}|%1}Eh1V0qq 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%0DnZ+_PxQP#!tED> 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 literal 0 HcmV?d00001 From 056ab4b2ae0ea849f7e2aacf0cca7410e3ca193f Mon Sep 17 00:00:00 2001 From: javasabr Date: Tue, 6 Dec 2016 06:30:09 +0300 Subject: [PATCH 11/24] fixed some problems with mouse input --- .idea/compiler.xml | 19 +- build/jfx-1.4.0.jar | Bin 103815 -> 72963 bytes src/com/jme3x/jfx/JmeFxContainer.java | 836 ------------------ src/com/jme3x/jfx/JmeFxDNDHandler.java | 271 ------ src/com/jme3x/jfx/JmeFxInputListener.java | 426 --------- src/com/jme3x/jfx/JmeFxPanel.java | 133 --- src/com/jme3x/jfx/JmeFxPicture.java | 79 -- .../jme3x/jfx/injfx/JmeToJFXIntegrator.java | 8 +- .../injfx/SceneProcessorCopyToImageView.java | 9 +- .../jme3x/jfx/injfx/input/JFXKeyInput.java | 6 +- .../jme3x/jfx/injfx/input/JFXMouseInput.java | 18 +- src/com/jme3x/jfx/util/JFXDNDUtils.java | 114 --- src/com/jme3x/jfx/util/JFXEmbeddedUtils.java | 280 ------ src/com/jme3x/jfx/util/JFXPixels.java | 63 -- src/com/jme3x/jfx/util/JFXWindowUtils.java | 144 --- test-src/com/jme3x/jfx/TestJFXPanel.java | 69 -- test-src/com/jme3x/jfx/TestJmeToJFX.java | 2 +- 17 files changed, 29 insertions(+), 2448 deletions(-) delete mode 100644 src/com/jme3x/jfx/JmeFxContainer.java delete mode 100644 src/com/jme3x/jfx/JmeFxDNDHandler.java delete mode 100644 src/com/jme3x/jfx/JmeFxInputListener.java delete mode 100644 src/com/jme3x/jfx/JmeFxPanel.java delete mode 100644 src/com/jme3x/jfx/JmeFxPicture.java delete mode 100644 src/com/jme3x/jfx/util/JFXDNDUtils.java delete mode 100644 src/com/jme3x/jfx/util/JFXEmbeddedUtils.java delete mode 100644 src/com/jme3x/jfx/util/JFXPixels.java delete mode 100644 src/com/jme3x/jfx/util/JFXWindowUtils.java delete mode 100644 test-src/com/jme3x/jfx/TestJFXPanel.java diff --git a/.idea/compiler.xml b/.idea/compiler.xml index c355a4b..61a9130 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -1,23 +1,6 @@ - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/build/jfx-1.4.0.jar b/build/jfx-1.4.0.jar index 8e7a21320b79367481ee5e22dff241c4ea7209ad..8528d84e1a7eefd9fab395d5d1dcca982661ce6a 100644 GIT binary patch delta 37992 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

    xPsE&b|QpCmnL`o$` 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 Is4mI!ABThSqW}N^ delta 68843 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 PXboB%n^jl?SbeoWq)mkM diff --git a/src/com/jme3x/jfx/JmeFxContainer.java b/src/com/jme3x/jfx/JmeFxContainer.java deleted file mode 100644 index 9a26158..0000000 --- a/src/com/jme3x/jfx/JmeFxContainer.java +++ /dev/null @@ -1,836 +0,0 @@ -package com.jme3x.jfx; - -import com.jme3.app.Application; -import com.jme3.app.state.AbstractAppState; -import com.jme3.app.state.AppState; -import com.jme3.app.state.AppStateManager; -import com.jme3.asset.AssetManager; -import com.jme3.input.InputManager; -import com.jme3.input.RawInputListener; -import com.jme3.scene.Node; -import com.jme3.scene.Spatial; -import com.jme3.system.JmeContext; -import com.jme3.texture.Image; -import com.jme3.texture.Image.Format; -import com.jme3.texture.Texture2D; -import com.jme3.texture.image.ColorSpace; -import com.jme3.ui.Picture; -import com.jme3.util.BufferUtils; -import com.jme3x.jfx.cursor.CursorDisplayProvider; -import com.jme3x.jfx.util.JFXEmbeddedUtils; -import com.jme3x.jfx.util.JFXPixels; -import com.jme3x.jfx.util.JFXWindowUtils; - -import java.awt.*; -import java.awt.event.FocusEvent; -import java.nio.ByteBuffer; -import java.nio.IntBuffer; -import java.util.BitSet; -import java.util.concurrent.CompletableFuture; -import java.util.function.Consumer; -import java.util.function.Function; - -import javafx.application.Platform; -import javafx.scene.Scene; -import rlib.concurrent.atomic.AtomicInteger; -import rlib.concurrent.lock.AsyncReadSyncWriteLock; -import rlib.concurrent.lock.LockFactory; -import rlib.function.SafeRunnable; -import rlib.logging.Logger; -import rlib.logging.LoggerManager; -import rlib.util.Util; - -/** - * Need to pass -Dprism.dirtyopts=false on startup - * - * @author abies / Artur Biesiadowski - */ -public class JmeFxContainer { - - private static final Logger LOGGER = LoggerManager.getLogger(JmeFxContainer.class); - - public static final int PROP_MIN_RESIZE_INTERVAL = 100; - - /** - * Актитвировал ли дебаг. - */ - private static boolean debug; - - /** - * @param debug актитвировал ли дебаг. - */ - public static void setDebug(boolean debug) { - JmeFxContainer.debug = debug; - } - - /** - * @return актитвировал ли дебаг. - */ - public static boolean isDebug() { - return debug; - } - - // TODO benchmark - private static Void reorder_ARGB82ABGR8(final ByteBuffer data) { - - final int limit = data.limit() - 3; - - byte v; - - for (int i = 0; i < limit; i += 4) { - v = data.get(i + 1); - data.put(i + 1, data.get(i + 3)); - data.put(i + 3, v); - } - - return null; - } - - // TODO benchmark - private static Void reorder_BGRA82ABGR8(final ByteBuffer data) { - - final int limit = data.limit() - 3; - - byte v0, v1, v2, v3; - - for (int i = 0; i < limit; i += 4) { - v0 = data.get(i); - v1 = data.get(i + 1); - v2 = data.get(i + 2); - v3 = data.get(i + 3); - data.put(i, v3); - data.put(i + 1, v0); - data.put(i + 2, v1); - data.put(i + 3, v2); - } - - return null; - } - - public static JmeFxContainer install(final Application app, final Node guiNode, final CursorDisplayProvider cursorDisplayProvider) { - - final JmeFxContainer container = new JmeFxContainer(app.getAssetManager(), app, cursorDisplayProvider); - guiNode.attachChild(container.getJmeNode()); - - final JmeFxInputListener inputListener = new JmeFxInputListener(container); - - container.setInputListener(inputListener); - - final InputManager inputManager = app.getInputManager(); - inputManager.addRawInputListener(inputListener); - - return container; - } - - /** - * Игровая стадия FX UI. - */ - private final AppState fxAppState = new AbstractAppState() { - - @Override - public void cleanup() { - Platform.exit(); - super.cleanup(); - } - }; - - protected volatile CompletableFuture nativeFormat = new CompletableFuture<>(); - - /** - * Кол-во незаписанных в JME кадров. - */ - protected final AtomicInteger waitCount; - - /** - * Блокировщик доступа к данным изображений. - */ - protected final AsyncReadSyncWriteLock imageLock; - - /** - * Изображение для отрисовки UI. - */ - protected final Picture picture; - - /** - * Текстура на которой отрисовано UI. - */ - protected final Texture2D texture; - - /** - * Контейнер сцены JavaFX. - */ - protected volatile JmeFxPanel hostContainer; - - /** - * Слушатель ввода пользователя. - */ - protected volatile JmeFxInputListener inputListener; - - /** - * Текущая сцена UI. - */ - protected volatile Scene scene; - - /** - * Приложение JME. - */ - protected volatile Application application; - - /** - * Отрисованное изображение UI. - */ - protected volatile Image jmeImage; - - /** - * Данные кадра отрисованного в jME. - */ - protected volatile ByteBuffer jmeData; - - /** - * Данные кадра отрисованного в JavaFX. - */ - protected volatile ByteBuffer fxData; - - /** - * Временные данные кадра отрисованного в JavaFX. - */ - protected volatile ByteBuffer tempData; - - /** - * Провайдер по отображению нужных курсоров. - */ - protected volatile CursorDisplayProvider cursorDisplayProvider; - - /** - * Время последнего изменения размера. - */ - protected volatile long lastResized; - - /** - * Ширина картики для отрисовки UI. - */ - protected volatile int pictureWidth; - - /** - * Высота картики для отрисовки UI. - */ - protected volatile int pictureHeight; - - /** - * Предыдущее положение экрана по X. - */ - protected volatile int oldX = -1; - - /** - * Предыдущее положение экрана по Y. - */ - protected volatile int oldY = -1; - - /** - * Indent the window position to account for window decoration by Ronn - */ - private volatile int windowOffsetX; - private volatile int windowOffsetY; - - /** - * Есть ли сейчас фокус на FX UI. - */ - protected volatile boolean focus; - - /** - * Поддержка полноэкранного режима. - */ - protected volatile boolean fullScreenSupport; - - /** - * Отображается ли курсор. - */ - protected volatile boolean visibleCursor; - - /** - * Доступен ли сейчас JavaFX. - */ - protected volatile boolean enabled; - - /** - * Набор состояний клавиш. - */ - private final BitSet keyStateSet = new BitSet(0xFF); - - /** - * Контекст JME. - */ - private final JmeContext jmeContext; - - /** - * Функция реординга данных. - */ - protected volatile Function reorderData; - - protected JmeFxContainer(final AssetManager assetManager, final Application application, final CursorDisplayProvider cursorDisplayProvider) { - initFx(); - - final Point decorationSize = JFXWindowUtils.getWindowDecorationSize(); - - final AppStateManager stateManager = application.getStateManager(); - stateManager.attach(fxAppState); - - this.jmeContext = application.getContext(); - this.waitCount = new AtomicInteger(); - this.imageLock = LockFactory.newAtomicARSWLock(); - this.windowOffsetX = (int) decorationSize.getX(); - this.windowOffsetY = (int) decorationSize.getY(); - this.cursorDisplayProvider = cursorDisplayProvider; - this.application = application; - this.visibleCursor = true; - - this.hostContainer = new JmeFxPanel(this); - this.picture = new JmeFxPicture(this); - this.picture.move(0, 0, -1); - this.picture.setPosition(0, 0); - - handleResize(); - - this.texture = new Texture2D(jmeImage); - this.picture.setTexture(assetManager, texture, true); - } - - private void initFx() { - Platform.startup(this::checkPixelsFormat); - } - - private void checkPixelsFormat() { - - final int format = JFXPixels.getNativeFormat(); - - if (format == JFXPixels.BYTE_ARGB) { - Util.safeExecute((SafeRunnable) () -> nativeFormat.complete(Format.valueOf("ARGB8")), (Consumer) e -> { - nativeFormat.complete(Format.ABGR8); - reorderData = JmeFxContainer::reorder_ARGB82ABGR8; - }); - } else if (format == JFXPixels.BYTE_BGRA_PRE) { - Util.safeExecute((SafeRunnable) () -> nativeFormat.complete(Format.valueOf("BGRA8")), (Consumer) e -> { - nativeFormat.complete(Format.ABGR8); - reorderData = JmeFxContainer::reorder_BGRA82ABGR8; - }); - } else { - Util.safeExecute((SafeRunnable) () -> nativeFormat.complete(Format.valueOf("ARGB8")), (Consumer) e -> { - nativeFormat.complete(Format.ABGR8); - reorderData = JmeFxContainer::reorder_ARGB82ABGR8; - }); - } - } - - - /** - * @param lastResized время последнего изменения размера. - */ - private void setLastResized(final long lastResized) { - this.lastResized = lastResized; - } - - /** - * @return время последнего изменения размера. - */ - private long getLastResized() { - return lastResized; - } - - /** - * @return приложение JME. - */ - public Application getApplication() { - return application; - } - - /** - * @return контекст JME. - */ - public JmeContext getJmeContext() { - return jmeContext; - } - - /** - * @return провайдер по отображению нужных курсоров. - */ - public CursorDisplayProvider getCursorDisplayProvider() { - return cursorDisplayProvider; - } - - /** - * @return данные кадра отрисованного в JavaFX. - */ - public ByteBuffer getFxData() { - return fxData; - } - - /** - * @return блокировщик доступа к данным изображений. - */ - private AsyncReadSyncWriteLock getImageLock() { - return imageLock; - } - - /** - * @return слушатель ввода пользователя. - */ - public JmeFxInputListener getInputListener() { - return inputListener; - } - - /** - * @param inputListener слушатель ввода пользователя. - */ - public void setInputListener(final JmeFxInputListener inputListener) { - this.inputListener = inputListener; - } - - /** - * @return данные кадра отрисованного в jME. - */ - public ByteBuffer getJmeData() { - return jmeData; - } - - /** - * @return отрисованное изображение UI. - */ - public Image getJmeImage() { - return jmeImage; - } - - /** - * @return изображение для отрисовки UI. - */ - public Picture getJmeNode() { - return picture; - } - - /** - * @return набор состояний клавиш. - */ - public BitSet getKeyStateSet() { - return keyStateSet; - } - - /** - * @return предыдущее положение экрана по X. - */ - public int getOldX() { - return oldX; - } - - /** - * @param oldX предыдущее положение экрана по X. - */ - public void setOldX(final int oldX) { - this.oldX = oldX; - } - - /** - * @return предыдущее положение экрана по Y. - */ - public int getOldY() { - return oldY; - } - - /** - * @param oldY предыдущее положение экрана по Y. - */ - public void setOldY(final int oldY) { - this.oldY = oldY; - } - - /** - * @return изображение для отрисовки UI. - */ - public Picture getPicture() { - return picture; - } - - /** - * @return высота картики для отрисовки UI. - */ - public int getPictureHeight() { - return pictureHeight; - } - - /** - * @param pictureHeight высота картики для отрисовки UI. - */ - public void setPictureHeight(final int pictureHeight) { - this.pictureHeight = pictureHeight; - } - - /** - * @return ширина картики для отрисовки UI. - */ - public int getPictureWidth() { - return pictureWidth; - } - - /** - * @param pictureWidth ширина картики для отрисовки UI. - */ - public void setPictureWidth(final int pictureWidth) { - this.pictureWidth = pictureWidth; - } - - /** - * @return текущая сцена UI. - */ - public Scene getScene() { - return scene; - } - - /** - * @return временные данные кадра отрисованного в JavaFX. - */ - public ByteBuffer getTempData() { - return tempData; - } - - /** - * @return текстура на которой отрисовано UI. - */ - public Texture2D getTexture() { - return texture; - } - - /** - * @return кол-во незаписанных в JME кадров. - */ - public AtomicInteger getWaitCount() { - return waitCount; - } - - /** - * Indent the window position to account for window decoration. - */ - public int getWindowOffsetX() { - return windowOffsetX; - } - - /** - * Indent the window position to account for window decoration. - */ - public void setWindowOffsetX(final int windowOffsetX) { - this.windowOffsetX = windowOffsetX; - } - - /** - * Indent the window position to account for window decoration. - */ - public int getWindowOffsetY() { - return windowOffsetY; - } - - /** - * Indent the window position to account for window decoration. - */ - public void setWindowOffsetY(final int windowOffsetY) { - this.windowOffsetY = windowOffsetY; - } - - /** - * @return предыдущее положение экрана по X. - */ - public int getWindowX() { - return oldX; - } - - /** - * @return предыдущее положение экрана по Y. - */ - public int getWindowY() { - return oldY; - } - - /** - * Получение фокуса сценой FX UI. - */ - public void grabFocus() { - - final JmeFxPanel hostContainer = getHostContainer(); - hostContainer.handleEvent(new FocusEvent(hostContainer, FocusEvent.FOCUS_GAINED)); - - setFocus(true); - } - - /** - * Инициализация или обновление размеров изображения. - */ - public void handleResize() { - - final long time = System.currentTimeMillis(); - if (time - getLastResized() < PROP_MIN_RESIZE_INTERVAL) return; - - final JmeContext jmeContext = getJmeContext(); - - final int displayWidth = JFXWindowUtils.getWidth(jmeContext); - final int displayHeight = JFXWindowUtils.getHeight(jmeContext); - - final AsyncReadSyncWriteLock lock = getImageLock(); - lock.syncLock(); - try { - - final int pictureWidth = Math.max(displayWidth, 64); - final int pictureHeight = Math.max(displayHeight, 64); - - final Picture picture = getPicture(); - - if (isDebug()) { - LOGGER.debug("handle resize from [" + getPictureWidth() + "x" + getPictureHeight() + "] to [" + pictureWidth + "x" + pictureHeight + "]"); - } - - picture.setWidth(pictureWidth); - picture.setHeight(pictureHeight); - - if (fxData != null) BufferUtils.destroyDirectBuffer(fxData); - if (tempData != null) BufferUtils.destroyDirectBuffer(tempData); - if (jmeData != null) BufferUtils.destroyDirectBuffer(jmeData); - if (jmeImage != null) jmeImage.dispose(); - - fxData = BufferUtils.createByteBuffer(pictureWidth * pictureHeight * 4); - tempData = BufferUtils.createByteBuffer(pictureWidth * pictureHeight * 4); - jmeData = BufferUtils.createByteBuffer(pictureWidth * pictureHeight * 4); - jmeImage = new Image(nativeFormat.get(), pictureWidth, pictureHeight, jmeData, ColorSpace.sRGB); - - final Texture2D texture = getTexture(); - if (texture != null) texture.setImage(jmeImage); - - setPictureHeight(pictureHeight); - setPictureWidth(pictureWidth); - - hostContainer.handleResize(pictureWidth, pictureHeight); - - } catch (final Exception e) { - LOGGER.warning(e); - } finally { - lock.syncUnlock(); - } - - setLastResized(time); - } - - /** - * Есть ли по этим координатом элемент JavaFX на сцене. - */ - public boolean isCovered(final int x, final int y) { - - final int pictureWidth = getPictureWidth(); - - if (x < 0 || x >= pictureWidth) { - return false; - } else if (y < 0 || y >= getPictureHeight()) { - return false; - } - - final Image jmeImage = getJmeImage(); - - final ByteBuffer data = jmeImage.getData(0); - data.limit(data.capacity()); - - final int alpha = data.get(3 + 4 * (y * pictureWidth + x)); - - data.limit(0); - - if (isDebug()) { - LOGGER.debug("is covered " + x + ", " + y + " = " + (alpha != 0)); - } - - return alpha != 0; - } - - /** - * @return есть ли сейчас фокус на FX UI. - */ - public boolean isFocus() { - return focus; - } - - /** - * @param focus есть ли сейчас фокус на FX UI. - */ - public void setFocus(final boolean focus) { - this.focus = focus; - } - - /** - * @return поддержка полноэкранного режима. - */ - public boolean isFullScreenSupport() { - return fullScreenSupport; - } - - /** - * @return нужна ли отрисовка. - */ - public boolean isNeedWriteToJME() { - return waitCount.get() > 0; - } - - /** - * @return отображается ли курсор. - */ - public boolean isVisibleCursor() { - return visibleCursor; - } - - /** - * @param visibleCursor отображается ли курсор. - */ - public void setVisibleCursor(final boolean visibleCursor) { - this.visibleCursor = visibleCursor; - } - - /** - * Уберание фокуса из сцены. - */ - public void loseFocus() { - - final JmeFxPanel hostContainer = getHostContainer(); - hostContainer.handleEvent(new FocusEvent(hostContainer, FocusEvent.FOCUS_LOST)); - - setFocus(false); - } - - /** - * @return контейнер сцены JavaFX. - */ - public JmeFxPanel getHostContainer() { - return hostContainer; - } - - /** - * Отрисока контейнера. - */ - public void paintComponent() { - - long time = 0; - - if (isDebug()) { - time = System.currentTimeMillis(); - LOGGER.debug("started paint FX scene..."); - } - - final JmeFxPanel hostContainer = getHostContainer(); - if (hostContainer == null) return; - - final ByteBuffer tempData = getTempData(); - tempData.clear(); - - final IntBuffer intBuffer = tempData.asIntBuffer(); - - final int pictureWidth = getPictureWidth(); - final int pictureHeight = getPictureHeight(); - - if (!JFXEmbeddedUtils.getPixels(hostContainer, intBuffer, pictureWidth, pictureHeight)) - return; - - tempData.flip(); - tempData.limit(pictureWidth * pictureHeight * 4); - - final AsyncReadSyncWriteLock imageLock = getImageLock(); - imageLock.syncLock(); - try { - - final ByteBuffer fxData = getFxData(); - fxData.clear(); - fxData.put(tempData); - fxData.flip(); - - if (reorderData != null) { - reorderData.apply(fxData); - } - - } catch (final Exception exc) { - exc.printStackTrace(); - } finally { - imageLock.syncUnlock(); - } - - final AtomicInteger waitCount = getWaitCount(); - waitCount.incrementAndGet(); - - if (isDebug()) { - LOGGER.debug("finished paint FX scene(" + (System.currentTimeMillis() - time) + "ms.)."); - } - } - - /** - * call via gui manager! - */ - public void setEverListeningRawInputListener(final RawInputListener rawInputListenerAdapter) { - this.inputListener.setEverListeningRawInputListener(rawInputListenerAdapter); - } - - void setFxEnabled(final boolean enabled) { - } - - /** - * @param scene текущая сцена UI. - */ - public void setScene(final Scene scene) { - this.scene = scene; - this.hostContainer.setScene(scene); - application.enqueue(() -> { - picture.setCullHint(scene == null ? Spatial.CullHint.Always : Spatial.CullHint.Never); - return null; - }); - } - - /** - * Запись резульата FX UI на текстуру в JME. - */ - public Void writeToJME() { - - final AtomicInteger waitCount = getWaitCount(); - final int currentCount = waitCount.get(); - - long time = 0; - - if (isDebug()) { - time = System.currentTimeMillis(); - LOGGER.debug("started writing FX data to JME..."); - } - - final ByteBuffer jmeData = getJmeData(); - jmeData.clear(); - - final AsyncReadSyncWriteLock imageLock = getImageLock(); - imageLock.syncLock(); - try { - jmeData.put(getFxData()); - } finally { - imageLock.syncUnlock(); - } - - jmeData.flip(); - - final Image jmeImage = getJmeImage(); - jmeImage.setUpdateNeeded(); - - waitCount.subAndGet(currentCount); - - if (isDebug()) { - LOGGER.debug("finished writing FX data to JME(" + (System.currentTimeMillis() - time) + "ms.)."); - } - - return null; - } - - /** - * @param enabled доступен ли сейчас JavaFX. - */ - public void setEnabled(final boolean enabled) { - this.enabled = enabled; - } - - /** - * @return доступен ли сейчас JavaFX. - */ - public boolean isEnabled() { - return enabled; - } -} \ No newline at end of file diff --git a/src/com/jme3x/jfx/JmeFxDNDHandler.java b/src/com/jme3x/jfx/JmeFxDNDHandler.java deleted file mode 100644 index 62e56a6..0000000 --- a/src/com/jme3x/jfx/JmeFxDNDHandler.java +++ /dev/null @@ -1,271 +0,0 @@ -package com.jme3x.jfx; - -import com.jme3x.jfx.util.JFXDNDUtils; -import com.jme3x.jfx.util.JFXEmbeddedUtils; - -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.Method; -import java.lang.reflect.Proxy; -import java.nio.ByteBuffer; - -import javafx.collections.ObservableList; -import javafx.scene.Group; -import javafx.scene.Node; -import javafx.scene.Scene; -import javafx.scene.image.ImageView; -import javafx.scene.image.PixelFormat; -import javafx.scene.image.PixelWriter; -import javafx.scene.image.WritableImage; -import javafx.scene.input.TransferMode; -import rlib.logging.Logger; -import rlib.logging.LoggerManager; - -import static rlib.util.array.ArrayFactory.toArray; - -/** - * Реализация слушателя DND для обработки его в случае встраивания в jME. - * - * @author Ronn - */ -public class JmeFxDNDHandler implements InvocationHandler { - - private static final Logger LOGGER = LoggerManager.getLogger(InvocationHandler.class); - - public static final Class LISTENER_TYPE; - - static { - try { - LISTENER_TYPE = Class.forName("com.sun.javafx.embed.HostDragStartListener"); - } catch (final ClassNotFoundException e) { - throw new RuntimeException(e); - } - } - - - /** - * Контейнер. - */ - private final JmeFxContainer jmeFxContainer; - - /** - * Реализация слушателя DnD. - */ - private final Object handler; - - private Object dropTarget; - private Object dragSource; - - private TransferMode overTarget; - - /** - * Изображение для отображения перемещения элемента. - */ - private ImageView dragImage; - - public JmeFxDNDHandler(final JmeFxContainer jmeFxContainer) { - this.jmeFxContainer = jmeFxContainer; - this.handler = Proxy.newProxyInstance(LISTENER_TYPE.getClassLoader(), toArray(LISTENER_TYPE), this); - } - - @Override - public Object invoke(final Object proxy, final Method method, final Object[] args) throws Throwable { - dragStarted(args[0], (TransferMode) args[1]); - return null; - } - - /** - * @return реализация слушателя DnD. - */ - public Object getHandler() { - return handler; - } - - /** - * this is kinda ridiculous, but well at least it seems to work - */ - private void createDragImageProxy(final Object jmeJfxDragImage, final Object offset) { - if (!(jmeJfxDragImage instanceof ByteBuffer)) return; - - try { - - final ByteBuffer casted = (ByteBuffer) jmeJfxDragImage; - casted.position(0); - - final int width = casted.getInt(); - final int height = casted.getInt(); - - final byte[] imgdata = new byte[casted.remaining()]; - casted.get(imgdata); - - final WritableImage img = new WritableImage(width, height); - final PixelWriter writer = img.getPixelWriter(); - writer.setPixels(0, 0, width, height, PixelFormat.getByteBgraInstance(), imgdata, 0, width * 4); - - final ImageView dragImage = new ImageView(img); - dragImage.setStyle("dragimage:true;"); - dragImage.setMouseTransparent(true); - dragImage.setVisible(true); - - if (offset instanceof ByteBuffer) { - - ((ByteBuffer) offset).position(0); - - final int x = ((ByteBuffer) offset).getInt(); - final int y = ((ByteBuffer) offset).getInt(); - - if (LOGGER.isEnabledDebug()) LOGGER.debug("Img offset " + x + ", " + y); - } - - } catch (final Exception e) { - LOGGER.warning(e.getMessage(), e); - } - } - - /** - * Инициализациястарта перемещения какого-то элемента. - */ - private void dragStarted(final Object dragSource, final TransferMode dragAction) { - - final JmeFxContainer jmeFxContainer = getJmeFxContainer(); - final JmeFxInputListener inputListener = jmeFxContainer.getInputListener(); - final JmeFxPanel hostContainer = jmeFxContainer.getHostContainer(); - final Scene scene = jmeFxContainer.getScene(); - final Group rootNode = (Group) scene.getRoot(); - final ObservableList children = rootNode.getChildren(); - - final ImageView dragImage = getDragImage(); - - if (dragImage != null) { - children.remove(dragImage); - setDragImage(null); - } - - try { - - final Object dragImg = JFXDNDUtils.getData(dragSource, "application/x-java-drag-image"); - final Object offset = JFXDNDUtils.getData(dragSource, "application/x-java-drag-image-offset"); - - if (dragImg != null) createDragImageProxy(dragImg, offset); - inputListener.setMouseDNDListener(this); - - final Object dropTarget = JFXEmbeddedUtils.createDropTarget(hostContainer); - - setDragSource(dragSource); - setDropTarget(dropTarget); - - // pseudo enter, we only support inner events, so it stays always entered - JFXDNDUtils.handleDragEnter(dropTarget, 0, 0, TransferMode.COPY, dragSource); - - } catch (final Exception e) { - LOGGER.warning(e.getMessage(), e); - } - } - - private void setDragSource(final Object dragSource) { - this.dragSource = dragSource; - } - - private Object getDragSource() { - return dragSource; - } - - private void setDropTarget(final Object dropTarget) { - this.dropTarget = dropTarget; - } - - private Object getDropTarget() { - return dropTarget; - } - - private void setOverTarget(final TransferMode overTarget) { - this.overTarget = overTarget; - } - - private TransferMode getOverTarget() { - return overTarget; - } - - /** - * @param dragImage изображение для отображения перемещения элемента. - */ - private void setDragImage(final ImageView dragImage) { - this.dragImage = dragImage; - } - - /** - * @return изображение для отображения перемещения элемента. - */ - private ImageView getDragImage() { - return dragImage; - } - - private JmeFxContainer getJmeFxContainer() { - return jmeFxContainer; - } - - /** - * Обновление положения перемещаемого элемента в JavaFX. - * - * @param x координата перемещаемого элемента. - * @param y координата перемещаемого элемента. - * @param mousePressed зажата ли кнопка мыши. - */ - public void mouseUpdate(final int x, final int y, final boolean mousePressed) { - - final Object dropTarget = getDropTarget(); - final Object dragSource = getDragSource(); - - if (dragSource == null || dropTarget == null) return; - - final JmeFxContainer container = getJmeFxContainer(); - final JmeFxInputListener inputListener = container.getInputListener(); - final Scene scene = container.getScene(); - final Group rootNode = (Group) scene.getRoot(); - final ObservableList children = rootNode.getChildren(); - - final ImageView dragImage = getDragImage(); - - try { - - if (mousePressed) { - - if (dragImage != null) { - dragImage.relocate(x, y); - if (!children.contains(dragImage)) children.add(dragImage); - } - - setOverTarget(JFXDNDUtils.handleDragOver(dropTarget, x, y, TransferMode.COPY)); - - } else { - - if (dragImage != null) dragImage.setVisible(false); - - final TransferMode overTarget = getOverTarget(); - - if (overTarget != null) { - - // causes exceptions when done without a target - setOverTarget(JFXDNDUtils.handleDragOver(dropTarget, x, y, TransferMode.COPY)); - - final TransferMode acceptedMode = JFXDNDUtils.handleDragDrop(dropTarget, x, y, TransferMode.COPY); - - // Necessary to reset final the internal states, and allow final another drag drop - JFXDNDUtils.dragDropEnd(dragSource, acceptedMode); - - } else { - // // seems to be necessary if no dragdrop attempt is being made - JFXDNDUtils.handleDragLeave(dropTarget); - JFXDNDUtils.dragDropEnd(dragSource, null); - } - - inputListener.setMouseDNDListener(null); - - setDragSource(null); - setOverTarget(null); - } - - } catch (final Exception e) { - LOGGER.warning(e.getMessage(), e); - } - } -} diff --git a/src/com/jme3x/jfx/JmeFxInputListener.java b/src/com/jme3x/jfx/JmeFxInputListener.java deleted file mode 100644 index 8f9b511..0000000 --- a/src/com/jme3x/jfx/JmeFxInputListener.java +++ /dev/null @@ -1,426 +0,0 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package com.jme3x.jfx; - -import com.jme3.app.Application; -import com.jme3.input.InputManager; -import com.jme3.input.KeyInput; -import com.jme3.input.RawInputListener; -import com.jme3.input.awt.AwtKeyInput; -import com.jme3.input.event.JoyAxisEvent; -import com.jme3.input.event.JoyButtonEvent; -import com.jme3.input.event.KeyInputEvent; -import com.jme3.input.event.MouseButtonEvent; -import com.jme3.input.event.MouseMotionEvent; -import com.jme3.input.event.TouchEvent; - -import java.awt.event.KeyEvent; -import java.awt.event.MouseEvent; -import java.awt.event.MouseWheelEvent; -import java.util.BitSet; - -import javafx.scene.Scene; - -/** - * Converts JMEEvents to JFXEvents - * - * @author Heist - */ -public class JmeFxInputListener implements RawInputListener { - - /** - * Контейнер Java FX. - */ - private final JmeFxContainer jmeFxContainer; - - /** - * Набор зажатых кнопок. - */ - private final BitSet keyStateSet = new BitSet(0xFF); - - /** - * Таблица символов. - */ - private final char[] keyCharSet = new char[Character.MAX_CODE_POINT]; - - /** - * Состояние кнопок мыши. - */ - private final boolean[] mouseButtonState = new boolean[3]; - - /** - * Слушатель ввода пользователя. - */ - private volatile RawInputListener everListeningInputListenerAdapter; - - /** - * Обработчик DnD Java FX. - */ - private volatile JmeFxDNDHandler jfxdndHandler; - - public JmeFxInputListener(final JmeFxContainer listensOnContainer) { - this.jmeFxContainer = listensOnContainer; - } - - /** - * @return обработчик DnD Java FX. - */ - private JmeFxDNDHandler getJfxdndHandler() { - return jfxdndHandler; - } - - @Override - public void beginInput() { - final RawInputListener adapter = getEverListeningInputListenerAdapter(); - if (adapter != null) adapter.beginInput(); - } - - @Override - public void endInput() { - final RawInputListener adapter = getEverListeningInputListenerAdapter(); - if (adapter != null) adapter.endInput(); - } - - /** - * @return слушатель ввода пользователя. - */ - private RawInputListener getEverListeningInputListenerAdapter() { - return everListeningInputListenerAdapter; - } - - /** - * @return контейнер Java FX. - */ - private JmeFxContainer getJmeFxContainer() { - return jmeFxContainer; - } - - /** - * @return таблица символов. - */ - private char[] getKeyCharSet() { - return keyCharSet; - } - - /** - * @return набор зажатых кнопок. - */ - private BitSet getKeyStateSet() { - return keyStateSet; - } - - /** - * @return состояние кнопок мыши. - */ - private boolean[] getMouseButtonState() { - return mouseButtonState; - } - - @Override - public void onJoyAxisEvent(final JoyAxisEvent event) { - final RawInputListener adapter = getEverListeningInputListenerAdapter(); - if (adapter != null) adapter.onJoyAxisEvent(event); - } - - @Override - public void onJoyButtonEvent(final JoyButtonEvent event) { - final RawInputListener adapter = getEverListeningInputListenerAdapter(); - if (adapter != null) adapter.onJoyButtonEvent(event); - } - - @Override - public void onKeyEvent(final KeyInputEvent event) { - - final RawInputListener adapter = getEverListeningInputListenerAdapter(); - if (adapter != null) adapter.onKeyEvent(event); - - final JmeFxContainer jmeFxContainer = getJmeFxContainer(); - final JmeFxPanel container = jmeFxContainer.getHostContainer(); - if (container == null) return; - - final BitSet keyStateSet = getKeyStateSet(); - final char[] keyCharSet = getKeyCharSet(); - final char keyChar = event.getKeyChar(); - - final int keyCode = event.getKeyCode(); - - int awtKeyCode = keyCode == KeyInput.KEY_UNKNOWN ? KeyEvent.VK_UNDEFINED : AwtKeyInput.convertJmeCode(keyCode); - - final int keyState = getKeyMask(); - - if (awtKeyCode > keyCharSet.length) { - switch (keyChar) { - case '\\': { - awtKeyCode = KeyEvent.VK_BACK_SLASH; - break; - } - default: { - return; - } - } - } - - if (jmeFxContainer.isFocus()) event.setConsumed(); - - final long when = System.currentTimeMillis(); - - if (event.isRepeating()) { - - final char x = keyCharSet[awtKeyCode]; - - if (jmeFxContainer.isFocus()) { - container.handleEvent(new KeyEvent(container, KeyEvent.KEY_TYPED, when, keyState, KeyEvent.VK_UNDEFINED, x)); - } - - } else if (event.isPressed()) { - - keyCharSet[awtKeyCode] = keyChar; - keyStateSet.set(awtKeyCode); - - if (jmeFxContainer.isFocus()) { - container.handleEvent(new KeyEvent(container, KeyEvent.KEY_PRESSED, when, keyState, awtKeyCode, keyChar)); - container.handleEvent(new KeyEvent(container, KeyEvent.KEY_TYPED, when, keyState, KeyEvent.VK_UNDEFINED, keyChar)); - } - - } else { - - final char x = keyCharSet[awtKeyCode]; - - keyStateSet.clear(awtKeyCode); - - if (jmeFxContainer.isFocus()) { - container.handleEvent(new KeyEvent(container, KeyEvent.KEY_RELEASED, when, keyState, awtKeyCode, x)); - } - } - } - - @Override - public void onMouseButtonEvent(final MouseButtonEvent event) { - - final RawInputListener adapter = getEverListeningInputListenerAdapter(); - if (adapter != null) adapter.onMouseButtonEvent(event); - - final JmeFxContainer jmeFxContainer = getJmeFxContainer(); - final Application application = jmeFxContainer.getApplication(); - - final InputManager inputManager = application.getInputManager(); - if (!inputManager.isCursorVisible()) return; - - final JmeFxPanel container = jmeFxContainer.getHostContainer(); - if (container == null) return; - - final Scene scene = jmeFxContainer.getScene(); - - final int x = event.getX(); - final int y = (int) Math.round(scene.getHeight()) - event.getY(); - - int button; - - switch (event.getButtonIndex()) { - case 0: { - button = MouseEvent.BUTTON1; - break; - } - case 1: { - button = MouseEvent.BUTTON2; - break; - } - case 2: { - button = MouseEvent.BUTTON3; - break; - } - default: { - return; - } - } - - mouseButtonState[event.getButtonIndex()] = event.isPressed(); - - final boolean covered = jmeFxContainer.isCovered(x, y); - - if (!covered) { - jmeFxContainer.loseFocus(); - } else if (inputManager.isCursorVisible()) { - event.setConsumed(); - jmeFxContainer.grabFocus(); - } - - int eventId; - - if (event.isPressed()) { - eventId = MouseEvent.MOUSE_PRESSED; - } else if (event.isReleased()) { - eventId = MouseEvent.MOUSE_RELEASED; - } else { - return; - } - - onMouseButtonEventImpl(x, y, button, eventId); - } - - private void onMouseButtonEventImpl(final int x, final int y, final int button, final int eventId) { - - final JmeFxDNDHandler jfxdndHandler = getJfxdndHandler(); - - if (jfxdndHandler != null) { - jfxdndHandler.mouseUpdate(x, y, button == MouseEvent.BUTTON1 && eventId == MouseEvent.MOUSE_PRESSED); - } - - final JmeFxContainer fxContainer = getJmeFxContainer(); - final JmeFxPanel container = fxContainer.getHostContainer(); - - final long when = System.currentTimeMillis(); - final int mask = getMouseMask(); - final boolean popupTrigger = button == MouseEvent.BUTTON2 && eventId == MouseEvent.MOUSE_PRESSED; - - container.handleEvent(new MouseEvent(container, eventId, when, mask, x, y, 1, popupTrigger, button)); - } - - private int getMouseMask() { - - final BitSet keyStateSet = getKeyStateSet(); - final boolean[] mouseButtonState = getMouseButtonState(); - - int mask = 0; - - if (mouseButtonState[0]) { - mask |= MouseEvent.BUTTON1_DOWN_MASK; - } - - if (mouseButtonState[1]) { - mask |= MouseEvent.BUTTON2_DOWN_MASK; - } - - if (mouseButtonState[2]) { - mask |= MouseEvent.BUTTON3_DOWN_MASK; - } - - if (keyStateSet.get(KeyEvent.VK_SHIFT)) { - mask |= MouseEvent.SHIFT_DOWN_MASK; - } - - if (keyStateSet.get(KeyEvent.VK_CONTROL)) { - mask |= MouseEvent.CTRL_DOWN_MASK; - } - - if (keyStateSet.get(KeyEvent.VK_ALT)) { - mask |= MouseEvent.ALT_DOWN_MASK; - } - - if (keyStateSet.get(KeyEvent.VK_META)) { - mask |= MouseEvent.META_DOWN_MASK; - } - - return mask; - } - - @Override - public void onMouseMotionEvent(final MouseMotionEvent event) { - - final RawInputListener adapter = getEverListeningInputListenerAdapter(); - if (adapter != null) adapter.onMouseMotionEvent(event); - - final JmeFxContainer jmeFxContainer = getJmeFxContainer(); - final Application application = jmeFxContainer.getApplication(); - - final InputManager inputManager = application.getInputManager(); - if (!inputManager.isCursorVisible()) return; - - final JmeFxPanel container = jmeFxContainer.getHostContainer(); - if (container == null) return; - - final Scene scene = jmeFxContainer.getScene(); - - final int x = event.getX(); - final int y = (int) Math.round(scene.getHeight()) - event.getY(); - - final boolean covered = jmeFxContainer.isCovered(x, y); - if (covered) event.setConsumed(); - - final boolean[] mouseButtonState = getMouseButtonState(); - - int eventId = MouseEvent.MOUSE_DRAGGED; - int button = MouseEvent.NOBUTTON; - - final int wheelRotation = (int) Math.round(event.getDeltaWheel() / -120.0); - - if (wheelRotation != 0) { - eventId = MouseEvent.MOUSE_WHEEL; - } else if (mouseButtonState[0]) { - button = MouseEvent.BUTTON1; - } else if (mouseButtonState[1]) { - button = MouseEvent.BUTTON2; - } else if (mouseButtonState[2]) { - button = MouseEvent.BUTTON3; - } - - onMouseMotionEventImpl(x, y, button, eventId, wheelRotation); - } - - private void onMouseMotionEventImpl(final int x, final int y, final int button, final int eventId, final int wheelRotation) { - - final JmeFxContainer fxContainer = getJmeFxContainer(); - final JmeFxPanel container = fxContainer.getHostContainer(); - - final JmeFxDNDHandler dndHandler = getJfxdndHandler(); - - if (dndHandler != null) { - dndHandler.mouseUpdate(x, y, button == MouseEvent.BUTTON1 && eventId == MouseEvent.MOUSE_PRESSED); - } - - final long when = System.currentTimeMillis(); - final int mask = getMouseMask(); - - if (eventId == MouseEvent.MOUSE_WHEEL) { - container.handleEvent(new MouseWheelEvent(container, eventId, when, mask, x, y, 1, false, button, MouseWheelEvent.WHEEL_UNIT_SCROLL, wheelRotation)); - } else { - container.handleEvent(new MouseEvent(container, eventId, when, mask, x, y, 1, false, button)); - } - } - - @Override - public void onTouchEvent(final TouchEvent event) { - final RawInputListener adapter = getEverListeningInputListenerAdapter(); - if (adapter != null) adapter.onTouchEvent(event); - } - - private int getKeyMask() { - - int embedModifiers = 0; - - final BitSet keyStateSet = getKeyStateSet(); - - if (keyStateSet.get(KeyEvent.VK_SHIFT)) { - embedModifiers |= KeyEvent.SHIFT_DOWN_MASK; - } - - if (keyStateSet.get(KeyEvent.VK_CONTROL)) { - embedModifiers |= KeyEvent.CTRL_DOWN_MASK; - } - - if (keyStateSet.get(KeyEvent.VK_ALT)) { - embedModifiers |= KeyEvent.ALT_DOWN_MASK; - } - - if (keyStateSet.get(KeyEvent.VK_META)) { - embedModifiers |= KeyEvent.META_DOWN_MASK; - } - - return embedModifiers; - } - - public void setEverListeningRawInputListener(final RawInputListener rawInputListenerAdapter) { - this.everListeningInputListenerAdapter = rawInputListenerAdapter; - } - - /** - * set on drag start /nulled on end
    necessary so that the drag events can be generated - * appropiatly - */ - public void setMouseDNDListener(final JmeFxDNDHandler jfxdndHandler) { - assert this.jfxdndHandler == null || jfxdndHandler == null : "duplicate jfxdndn handler register? "; - this.jfxdndHandler = jfxdndHandler; - } -} diff --git a/src/com/jme3x/jfx/JmeFxPanel.java b/src/com/jme3x/jfx/JmeFxPanel.java deleted file mode 100644 index 13242a2..0000000 --- a/src/com/jme3x/jfx/JmeFxPanel.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.jme3x.jfx; - -import com.jme3x.jfx.cursor.CursorDisplayProvider; -import com.jme3x.jfx.util.JFXEmbeddedUtils; -import com.jme3x.jfx.util.JFXPlatform; - -import java.awt.*; -import java.awt.event.FocusEvent; -import java.awt.event.KeyEvent; -import java.awt.event.MouseEvent; - -import javafx.embed.swing.JFXPanel; -import javafx.scene.Scene; -import rlib.logging.Logger; -import rlib.logging.LoggerManager; - -/** - * Fakes a top level window - */ -public class JmeFxPanel extends JFXPanel { - - private static final Logger LOGGER = LoggerManager.getLogger(JmeFxPanel.class); - - private static final ThreadLocal LOCATION_LOCAL = ThreadLocal.withInitial(Point::new); - - /** - * Контейнер JavaFX UI. - */ - private final JmeFxContainer jmeFxContainer; - - /** - * Обработчик работы с DnD. - */ - private final JmeFxDNDHandler dndHandler; - - private volatile Object embeddedStage; - private volatile Object embeddedScene; - - public JmeFxPanel(final JmeFxContainer jmeFxContainer) { - this.jmeFxContainer = jmeFxContainer; - this.dndHandler = new JmeFxDNDHandler(jmeFxContainer); - } - - /** - * @return контейнер JavaFX UI. - */ - private JmeFxContainer getJmeFxContainer() { - return jmeFxContainer; - } - - @Override - public void repaint() { - final JmeFxContainer jmeFxContainer = getJmeFxContainer(); - jmeFxContainer.paintComponent(); - } - - @Override - public void setCursor(final Cursor cursor) { - - final JmeFxContainer jmeFxContainer = getJmeFxContainer(); - final CursorDisplayProvider cursorDisplayProvider = jmeFxContainer.getCursorDisplayProvider(); - - if (cursorDisplayProvider != null) { - cursorDisplayProvider.showCursor(cursor); - } - } - - @Override - public void setScene(final Scene scene) { - super.setScene(scene); - - this.embeddedStage = JFXEmbeddedUtils.getStage(this); - this.embeddedScene = JFXEmbeddedUtils.getScene(this); - - if (scene == null) return; - - JFXEmbeddedUtils.setPixelScaleFactors(this, 1F, 1F); - JFXEmbeddedUtils.setDragStartListener(this, dndHandler.getHandler()); - - final int width = jmeFxContainer.getPictureWidth(); - final int height = jmeFxContainer.getPictureHeight(); - - handleResize(width, height); - } - - public void handleEvent(final KeyEvent event) { - JFXPlatform.runInFXThread(() -> JFXEmbeddedUtils.sendKeyEventToFX(this, event)); - } - - public void handleEvent(final FocusEvent event) { - JFXPlatform.runInFXThread(() -> JFXEmbeddedUtils.sendFocusEventToFX(this, event)); - } - - public void handleEvent(final MouseEvent event) { - JFXPlatform.runInFXThread(() -> { - JFXEmbeddedUtils.setCapturingMouse(this, true); - JFXEmbeddedUtils.sendMouseEventToFX(this, event); - }); - } - - public void handleMove(final int x, final int y) { - JFXEmbeddedUtils.setScreenX(this, x); - JFXEmbeddedUtils.setScreenY(this, y); - JFXPlatform.runInFXThread(() -> JFXEmbeddedUtils.sendMoveEventToFX(this)); - } - - public void handleResize(final int width, final int height) { - if (width <= 0 || height <= 0) return; - JFXEmbeddedUtils.setPHeight(this, height); - JFXEmbeddedUtils.setPWidth(this, width); - JFXPlatform.runInFXThread(() -> JFXEmbeddedUtils.sendResizeEventToFX(this)); - } - - @Override - public Point getLocationOnScreen() { - final Point point = LOCATION_LOCAL.get(); - point.setLocation(jmeFxContainer.getOldX(), jmeFxContainer.getOldY()); - return point; - } - - /** - * @return встроенная в панель сцена FX. - */ - public Object getEmbeddedScene() { - return embeddedScene; - } - - @Override - public void setEnabled(final boolean enabled) { - final JmeFxContainer jmeFxContainer = getJmeFxContainer(); - jmeFxContainer.setEnabled(enabled); - } -} diff --git a/src/com/jme3x/jfx/JmeFxPicture.java b/src/com/jme3x/jfx/JmeFxPicture.java deleted file mode 100644 index aa987e7..0000000 --- a/src/com/jme3x/jfx/JmeFxPicture.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.jme3x.jfx; - -import com.jme3.system.JmeContext; -import com.jme3.ui.Picture; -import com.jme3x.jfx.util.JFXWindowUtils; - -import rlib.logging.Logger; -import rlib.logging.LoggerManager; - -/** - * Реализация картинки с UI для JME. - * - * @author Ronn - */ -public class JmeFxPicture extends Picture { - - private static final Logger LOGGER = LoggerManager.getLogger(JmeFxPicture.class); - - /** - * Контейнер UI Java FX. - */ - private final JmeFxContainer container; - - public JmeFxPicture(final JmeFxContainer container) { - super("JavaFXContainer", true); - this.container = container; - } - - /** - * @return контейнер UI Java FX. - */ - private JmeFxContainer getContainer() { - return container; - } - - @Override - public void updateLogicalState(float tpf) { - - final JmeFxContainer container = getContainer(); - final JmeContext jmeContext = container.getJmeContext(); - - try { - - final JmeFxPanel panel = container.getHostContainer(); - if (panel == null) return; - - final int currentWidth = JFXWindowUtils.getWidth(jmeContext); - final int currentHeight = JFXWindowUtils.getHeight(jmeContext); - - if (currentWidth != container.getPictureWidth() || currentHeight != container.getPictureHeight()) { - container.handleResize(); - } - - final int originalX = JFXWindowUtils.getX(jmeContext); - final int originalY = JFXWindowUtils.getY(jmeContext); - - final int offsetX = JFXWindowUtils.isFullscreen(jmeContext) ? 0 : container.getWindowOffsetX(); - final int offsetY = JFXWindowUtils.isFullscreen(jmeContext) ? 0 : container.getWindowOffsetY(); - - final int x = originalX + offsetX; - final int y = originalY + offsetY; - - if (container.getOldX() != x || container.getOldY() != y) { - - if (JmeFxContainer.isDebug()) { - LOGGER.debug("moved window to [original: " + originalX + ", " + originalY + " offset:" + offsetX + ", " + offsetY + "]"); - } - - container.setOldX(x); - container.setOldY(y); - - panel.handleMove(x, y); - } - - } finally { - super.updateLogicalState(tpf); - } - } -} diff --git a/src/com/jme3x/jfx/injfx/JmeToJFXIntegrator.java b/src/com/jme3x/jfx/injfx/JmeToJFXIntegrator.java index 11e8ad8..d1af161 100644 --- a/src/com/jme3x/jfx/injfx/JmeToJFXIntegrator.java +++ b/src/com/jme3x/jfx/injfx/JmeToJFXIntegrator.java @@ -21,10 +21,16 @@ public static void prepareSettings(final AppSettings settings, final int framera settings.setCustomRenderer(JmeOffscreenSurfaceContext.class); } - public static SceneProcessorCopyToImageView bind(final JmeToJFXApplication application, final ImageView imageView, final Function factory) { + public static SceneProcessorCopyToImageView startAndBind(final JmeToJFXApplication application, final ImageView imageView, final Function factory) { factory.apply(application::start).start(); final SceneProcessorCopyToImageView processor = new SceneProcessorCopyToImageView(); Platform.runLater(() -> application.enqueue(() -> processor.bind(imageView, application))); return processor; } + + public static SceneProcessorCopyToImageView bind(final JmeToJFXApplication application, final ImageView imageView, final Function factory) { + final SceneProcessorCopyToImageView processor = new SceneProcessorCopyToImageView(); + processor.bind(imageView, application); + return processor; + } } diff --git a/src/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java b/src/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java index 103b5be..1981d13 100644 --- a/src/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java +++ b/src/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java @@ -100,7 +100,9 @@ protected void notifyComponentResized(int newWidth, int newHeight, boolean fixAs } public void bind(final ImageView imageView, final JmeToJFXApplication application) { - unbind(); + if (this.application != null) throw new RuntimeException("This process is already bonded."); + + this.application = application; final RenderManager renderManager = application.getRenderManager(); final List postViews = renderManager.getPostViews(); @@ -118,8 +120,6 @@ protected void bindImageView(final JmeToJFXApplication application, final ImageV throw new RuntimeException("this call is not from JavaFX thread."); } - this.application = application; - final JmeOffscreenSurfaceContext context = (JmeOffscreenSurfaceContext) application.getContext(); final JFXMouseInput mouseInput = context.getMouseInput(); mouseInput.bind(imageView); @@ -207,14 +207,15 @@ public void postQueue(final RenderQueue renderQueue) { @Override public void postFrame(final FrameBuffer out) { + if (transferImage != null) { transferImage.copyFrameBufferToImage(renderManager); } // for the next frame if (reshapeNeeded.getAndSet(false)) { + if (transferImage != null) transferImage.dispose(); transferImage = reshapeInThread(askWidth, askHeight, askFixAspect); - //TODO dispose previous transferImage ASAP (when no longer used in JavafFX thread) } } diff --git a/src/com/jme3x/jfx/injfx/input/JFXKeyInput.java b/src/com/jme3x/jfx/injfx/input/JFXKeyInput.java index 958692a..88e53d9 100644 --- a/src/com/jme3x/jfx/injfx/input/JFXKeyInput.java +++ b/src/com/jme3x/jfx/injfx/input/JFXKeyInput.java @@ -153,8 +153,10 @@ public void bind(final ImageView imageView) { @Override public void unbind() { - scene.removeEventHandler(KeyEvent.KEY_PRESSED, processKeyPressed); - scene.removeEventHandler(KeyEvent.KEY_RELEASED, processKeyReleased); + if (scene != null) { + scene.removeEventHandler(KeyEvent.KEY_PRESSED, processKeyPressed); + scene.removeEventHandler(KeyEvent.KEY_RELEASED, processKeyReleased); + } super.unbind(); } diff --git a/src/com/jme3x/jfx/injfx/input/JFXMouseInput.java b/src/com/jme3x/jfx/injfx/input/JFXMouseInput.java index 22228c4..55e39f8 100644 --- a/src/com/jme3x/jfx/injfx/input/JFXMouseInput.java +++ b/src/com/jme3x/jfx/injfx/input/JFXMouseInput.java @@ -59,18 +59,22 @@ public JFXMouseInput(final JmeOffscreenSurfaceContext context) { @Override public void bind(final ImageView imageView) { super.bind(imageView); - scene.addEventHandler(MouseEvent.MOUSE_MOVED, processMotion); - scene.addEventHandler(MouseEvent.MOUSE_PRESSED, processPressed); - scene.addEventHandler(MouseEvent.MOUSE_RELEASED, processReleased); + scene.addEventFilter(MouseEvent.MOUSE_MOVED, processMotion); + scene.addEventFilter(MouseEvent.MOUSE_PRESSED, processPressed); + scene.addEventFilter(MouseEvent.MOUSE_RELEASED, processReleased); + scene.addEventFilter(MouseEvent.MOUSE_DRAGGED, processMotion); scene.addEventHandler(ScrollEvent.ANY, processScroll); } @Override public void unbind() { - scene.removeEventHandler(MouseEvent.MOUSE_MOVED, processMotion); - scene.removeEventHandler(MouseEvent.MOUSE_PRESSED, processPressed); - scene.removeEventHandler(MouseEvent.MOUSE_RELEASED, processReleased); - scene.removeEventHandler(ScrollEvent.ANY, processScroll); + if (scene != null) { + scene.removeEventFilter(MouseEvent.MOUSE_MOVED, processMotion); + scene.removeEventFilter(MouseEvent.MOUSE_DRAGGED, processMotion); + scene.removeEventFilter(MouseEvent.MOUSE_PRESSED, processPressed); + scene.removeEventFilter(MouseEvent.MOUSE_RELEASED, processReleased); + scene.removeEventHandler(ScrollEvent.ANY, processScroll); + } super.unbind(); } diff --git a/src/com/jme3x/jfx/util/JFXDNDUtils.java b/src/com/jme3x/jfx/util/JFXDNDUtils.java deleted file mode 100644 index 4d51804..0000000 --- a/src/com/jme3x/jfx/util/JFXDNDUtils.java +++ /dev/null @@ -1,114 +0,0 @@ -package com.jme3x.jfx.util; - -import java.lang.invoke.MethodHandle; -import java.lang.invoke.MethodHandles; -import java.lang.invoke.MethodType; -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; - -import javafx.scene.input.TransferMode; - -import static rlib.util.array.ArrayFactory.toArray; - -/** - * Набор утильных методов для работы с EmbeddedDND в JavaFX. - */ -public class JFXDNDUtils { - - public static final Class DRAG_SOURCE_TYPE; - public static final Class DRAG_TARGET_TYPE; - - private static final String METHOD_HANDLE_DRAG_OVER = "handleDragOver"; - private static final String METHOD_HANDLE_DRAG_DROP = "handleDragDrop"; - private static final String METHOD_HANDLE_DRAG_LEAVE = "handleDragLeave"; - private static final String METHOD_HANDLE_DRAG_ENTER = "handleDragEnter"; - - private static final String METHOD_DRAG_DROP_END = "dragDropEnd"; - private static final String METHOD_GET_DATA = "getData"; - - private static final MethodHandle DRAG_DROP_END_HANDLE; - private static final MethodHandle GET_DATA_HANDLE; - - private static final MethodHandle HANDLE_DRAG_OVER_HANDLE; - private static final MethodHandle HANDLE_DRAG_DROP_HANDLE; - private static final MethodHandle HANDLE_DRAG_LEAVE_HANDLE; - private static final MethodHandle HANDLE_DRAG_ENTER_HANDLE; - - static { - - try { - - DRAG_SOURCE_TYPE = Class.forName("com.sun.javafx.embed.EmbeddedSceneDSInterface"); - DRAG_TARGET_TYPE = Class.forName("com.sun.javafx.embed.EmbeddedSceneDTInterface"); - - final Constructor lookupConstructor = MethodHandles.Lookup.class.getDeclaredConstructor(Class.class); - lookupConstructor.setAccessible(true); - - final MethodHandles.Lookup sourceLookup = lookupConstructor.newInstance(DRAG_SOURCE_TYPE); - - DRAG_DROP_END_HANDLE = sourceLookup.findVirtual(DRAG_SOURCE_TYPE, METHOD_DRAG_DROP_END, MethodType.methodType(void.class, TransferMode.class)); - GET_DATA_HANDLE = sourceLookup.findVirtual(DRAG_SOURCE_TYPE, METHOD_GET_DATA, MethodType.methodType(Object.class, String.class)); - - final MethodHandles.Lookup targetLookup = lookupConstructor.newInstance(DRAG_TARGET_TYPE); - final MethodType handleDragOverMethodType = MethodType.methodType(TransferMode.class, toArray(int.class, int.class, int.class, int.class, TransferMode.class)); - final MethodType handleDragDropMethodType = MethodType.methodType(TransferMode.class, toArray(int.class, int.class, int.class, int.class, TransferMode.class)); - final MethodType handleDragEnterMethodType = MethodType.methodType(TransferMode.class, toArray(int.class, int.class, int.class, int.class, TransferMode.class, DRAG_SOURCE_TYPE)); - - HANDLE_DRAG_LEAVE_HANDLE = targetLookup.findVirtual(DRAG_TARGET_TYPE, METHOD_HANDLE_DRAG_LEAVE, MethodType.methodType(void.class)); - HANDLE_DRAG_OVER_HANDLE = targetLookup.findVirtual(DRAG_TARGET_TYPE, METHOD_HANDLE_DRAG_OVER, handleDragOverMethodType); - HANDLE_DRAG_DROP_HANDLE = targetLookup.findVirtual(DRAG_TARGET_TYPE, METHOD_HANDLE_DRAG_DROP, handleDragDropMethodType); - HANDLE_DRAG_ENTER_HANDLE = targetLookup.findVirtual(DRAG_TARGET_TYPE, METHOD_HANDLE_DRAG_ENTER, handleDragEnterMethodType); - - } catch (final ClassNotFoundException | InvocationTargetException | InstantiationException | IllegalAccessException | NoSuchMethodException e) { - throw new RuntimeException(e); - } - } - - public static TransferMode handleDragEnter(final Object target, final int x, final int y, final TransferMode transferMode, final Object source) { - try { - return (TransferMode) HANDLE_DRAG_ENTER_HANDLE.invoke(target, x, y, x, y, transferMode, source); - } catch (final Throwable throwable) { - throw new RuntimeException(throwable); - } - } - - public static TransferMode handleDragOver(final Object target, final int x, final int y, final TransferMode transferMode) { - try { - return (TransferMode) HANDLE_DRAG_OVER_HANDLE.invoke(target, x, y, x, y, transferMode); - } catch (final Throwable throwable) { - throw new RuntimeException(throwable); - } - } - - public static TransferMode handleDragDrop(final Object target, final int x, final int y, final TransferMode transferMode) { - try { - return (TransferMode) HANDLE_DRAG_DROP_HANDLE.invoke(target, x, y, x, y, transferMode); - } catch (final Throwable throwable) { - throw new RuntimeException(throwable); - } - } - - public static Object getData(final Object source, final String name) { - try { - return GET_DATA_HANDLE.invoke(source, name); - } catch (final Throwable throwable) { - throw new RuntimeException(throwable); - } - } - - public static void handleDragLeave(final Object target) { - try { - HANDLE_DRAG_LEAVE_HANDLE.invoke(target); - } catch (final Throwable throwable) { - throw new RuntimeException(throwable); - } - } - - public static void dragDropEnd(final Object source, final TransferMode transferMode) { - try { - DRAG_DROP_END_HANDLE.invoke(source, transferMode); - } catch (final Throwable throwable) { - throw new RuntimeException(throwable); - } - } -} diff --git a/src/com/jme3x/jfx/util/JFXEmbeddedUtils.java b/src/com/jme3x/jfx/util/JFXEmbeddedUtils.java deleted file mode 100644 index 3dc0f06..0000000 --- a/src/com/jme3x/jfx/util/JFXEmbeddedUtils.java +++ /dev/null @@ -1,280 +0,0 @@ -package com.jme3x.jfx.util; - -import com.jme3x.jfx.JmeFxDNDHandler; -import com.jme3x.jfx.JmeFxPanel; - -import java.awt.event.FocusEvent; -import java.awt.event.KeyEvent; -import java.awt.event.MouseEvent; -import java.lang.invoke.MethodHandle; -import java.lang.invoke.MethodHandles; -import java.lang.invoke.MethodType; -import java.lang.invoke.VarHandle; -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; -import java.nio.IntBuffer; - -import javafx.embed.swing.JFXPanel; -import rlib.util.array.ArrayFactory; - -/** - * Набор утильных методов по работе со встроенным окном JavaFX. - * - * @author Ronn - */ -public class JFXEmbeddedUtils { - - private static final Class STAGE_TYPE; - private static final Class SCENE_TYPE; - - private static final String FIELD_STAGE_PEER = "stagePeer"; - private static final String FIELD_SCENE_PEER = "scenePeer"; - - private static final String FIELD_P_WIDTH = "pWidth"; - private static final String FIELD_P_HEIGHT = "pHeight"; - - private static final String FIELD_SCENE_X = "screenX"; - private static final String FIELD_SCENE_Y = "screenY"; - - private static final String FIELD_IS_CAPTURING_MOUSE = "isCapturingMouse"; - - private static final String METHOD_GET_PIXELS = "getPixels"; - private static final String METHOD_SET_PIXEL_SCALE_FACTORS = "setPixelScaleFactors"; - private static final String METHOD_CREATE_DROP_TARGET = "createDropTarget"; - private static final String METHOD_SET_DRAG_START_LISTENER = "setDragStartListener"; - - private static final String METHOD_SEND_RESIZE_EVENT_TO_FX = "sendResizeEventToFX"; - private static final String METHOD_SEND_MOVE_EVENT_TO_FX = "sendMoveEventToFX"; - private static final String METHOD_SEND_MOUSE_EVENT_TO_FX = "sendMouseEventToFX"; - private static final String METHOD_SEND_FOCUS_EVENT_TO_FX = "sendFocusEventToFX"; - private static final String METHOD_SEND_KEY_EVENT_TO_FX = "sendKeyEventToFX"; - - private static final VarHandle STAGE_VAR_HANDLE; - private static final VarHandle SCENE_VAR_HANDLE; - - private static final VarHandle P_WIDTH_VAR_HANDLE; - private static final VarHandle P_HEIGHT_VAR_HANDLE; - - private static final VarHandle SCREEN_X_VAR_HANDLE; - private static final VarHandle SCREEN_Y_VAR_HANDLE; - - private static final VarHandle IS_CAPTURING_MOUSE_VAR_HANDLE; - - private static final MethodHandle SEND_RESIZE_EVENT_TO_FX_HANDLE; - private final static MethodHandle SEND_MOVE_EVENT_TO_FX_HANDLE; - private final static MethodHandle SEND_MOUSE_EVENT_TO_FX_HANDLE; - private final static MethodHandle SEND_FOCUS_EVENT_TO_FX_HANDLE; - private final static MethodHandle SEND_KEY_EVENT_TO_FX_HANDLE; - - private final static MethodHandle GET_PIXELS_HANDLE; - private final static MethodHandle SET_PIXEL_SCALE_FACTORS_HANDLE; - private final static MethodHandle CREATE_DROP_TARGET_HANDLE; - private final static MethodHandle SET_DRAG_START_LISTENER_HANDLE; - - static { - - try { - - STAGE_TYPE = Class.forName("com.sun.javafx.embed.EmbeddedStageInterface"); - SCENE_TYPE = Class.forName("com.sun.javafx.embed.EmbeddedSceneInterface"); - - final Constructor lookupConstructor = MethodHandles.Lookup.class.getDeclaredConstructor(Class.class); - lookupConstructor.setAccessible(true); - - final MethodHandles.Lookup panelLookup = lookupConstructor.newInstance(JFXPanel.class); - STAGE_VAR_HANDLE = panelLookup.findVarHandle(JFXPanel.class, FIELD_STAGE_PEER, STAGE_TYPE); - SCENE_VAR_HANDLE = panelLookup.findVarHandle(JFXPanel.class, FIELD_SCENE_PEER, SCENE_TYPE); - - P_WIDTH_VAR_HANDLE = panelLookup.findVarHandle(JFXPanel.class, FIELD_P_WIDTH, int.class); - P_HEIGHT_VAR_HANDLE = panelLookup.findVarHandle(JFXPanel.class, FIELD_P_HEIGHT, int.class); - - SCREEN_X_VAR_HANDLE = panelLookup.findVarHandle(JFXPanel.class, FIELD_SCENE_X, int.class); - SCREEN_Y_VAR_HANDLE = panelLookup.findVarHandle(JFXPanel.class, FIELD_SCENE_Y, int.class); - - IS_CAPTURING_MOUSE_VAR_HANDLE = panelLookup.findVarHandle(JFXPanel.class, FIELD_IS_CAPTURING_MOUSE, boolean.class); - - SEND_RESIZE_EVENT_TO_FX_HANDLE = panelLookup.findVirtual(JFXPanel.class, METHOD_SEND_RESIZE_EVENT_TO_FX, MethodType.methodType(void.class)); - SEND_MOVE_EVENT_TO_FX_HANDLE = panelLookup.findVirtual(JFXPanel.class, METHOD_SEND_MOVE_EVENT_TO_FX, MethodType.methodType(void.class)); - SEND_MOUSE_EVENT_TO_FX_HANDLE = panelLookup.findVirtual(JFXPanel.class, METHOD_SEND_MOUSE_EVENT_TO_FX, MethodType.methodType(void.class, MouseEvent.class)); - SEND_FOCUS_EVENT_TO_FX_HANDLE = panelLookup.findVirtual(JFXPanel.class, METHOD_SEND_FOCUS_EVENT_TO_FX, MethodType.methodType(void.class, FocusEvent.class)); - SEND_KEY_EVENT_TO_FX_HANDLE = panelLookup.findVirtual(JFXPanel.class, METHOD_SEND_KEY_EVENT_TO_FX, MethodType.methodType(void.class, KeyEvent.class)); - - final MethodType getPixelsMethodType = MethodType.methodType(boolean.class, ArrayFactory.toArray(IntBuffer.class, int.class, int.class)); - final MethodType setPixelScaleFactorsMethodType = MethodType.methodType(void.class, ArrayFactory.toArray(float.class, float.class)); - - final MethodHandles.Lookup sceneLookup = lookupConstructor.newInstance(SCENE_TYPE); - GET_PIXELS_HANDLE = sceneLookup.findVirtual(SCENE_TYPE, METHOD_GET_PIXELS, getPixelsMethodType); - SET_PIXEL_SCALE_FACTORS_HANDLE = sceneLookup.findVirtual(SCENE_TYPE, METHOD_SET_PIXEL_SCALE_FACTORS, setPixelScaleFactorsMethodType); - CREATE_DROP_TARGET_HANDLE = sceneLookup.findVirtual(SCENE_TYPE, METHOD_CREATE_DROP_TARGET, MethodType.methodType(JFXDNDUtils.DRAG_TARGET_TYPE)); - SET_DRAG_START_LISTENER_HANDLE = sceneLookup.findVirtual(SCENE_TYPE, METHOD_SET_DRAG_START_LISTENER, MethodType.methodType(void.class, JmeFxDNDHandler.LISTENER_TYPE)); - - } catch (final NoSuchFieldException | NoSuchMethodException | InvocationTargetException | InstantiationException | IllegalAccessException | ClassNotFoundException e) { - throw new RuntimeException(e); - } - } - - /** - * Установка слушателя DND в сцене JavaFX. - */ - public static void setDragStartListener(final JmeFxPanel panel, final Object listener) { - try { - SET_DRAG_START_LISTENER_HANDLE.invoke(panel.getEmbeddedScene(), listener); - } catch (final Throwable throwable) { - throw new RuntimeException(throwable); - } - } - - /** - * Создание целевого элемента для DND. - */ - public static Object createDropTarget(final JmeFxPanel panel) { - try { - return CREATE_DROP_TARGET_HANDLE.invoke(panel.getEmbeddedScene()); - } catch (final Throwable throwable) { - throw new RuntimeException(throwable); - } - } - - /** - * Вытащить из панели EmbeddedStage. - */ - public static Object getStage(final JmeFxPanel panel) { - return STAGE_VAR_HANDLE.get(panel); - } - - /** - * Вытащить из панели EmbeddedScene. - */ - public static Object getScene(final JmeFxPanel panel) { - return SCENE_VAR_HANDLE.get(panel); - } - - /** - * Установка новой высоты для EmbeddedScene. - */ - public static void setPHeight(final JmeFxPanel panel, final int value) { - P_HEIGHT_VAR_HANDLE.set(panel, value); - } - - /** - * Установка новой высоты для EmbeddedStage. - */ - public static void setPWidth(final JmeFxPanel panel, final int value) { - P_WIDTH_VAR_HANDLE.set(panel, value); - } - - /** - * Установка новой позиции по X для EmbeddedStage. - */ - public static void setScreenX(final JmeFxPanel panel, final int value) { - SCREEN_X_VAR_HANDLE.getAndSet(panel, value); - } - - /** - * Установка новой позиции по Y для EmbeddedStage. - */ - public static void setScreenY(final JmeFxPanel panel, final int value) { - SCREEN_Y_VAR_HANDLE.getAndSet(panel, value); - } - - /** - * Установить флаг захвата движения мышкой. - */ - public static void setCapturingMouse(final JmeFxPanel panel, final boolean value) { - IS_CAPTURING_MOUSE_VAR_HANDLE.set(panel, value); - } - - /** - * Обновить положение EmbeddedScene. - */ - public static void sendMoveEventToFX(final JmeFxPanel panel) { - try { - SEND_MOVE_EVENT_TO_FX_HANDLE.invoke(panel); - } catch (final Throwable e) { - throw new RuntimeException(e); - } - } - - /** - * Обновить размер EmbeddedScene. - */ - public static void sendResizeEventToFX(final JmeFxPanel panel) { - try { - SEND_RESIZE_EVENT_TO_FX_HANDLE.invoke(panel); - } catch (final Throwable e) { - throw new RuntimeException(e); - } - } - - /** - * Отправить на обработку событие связанное с мышью в EmbeddedScene. - */ - public static void sendMouseEventToFX(final JmeFxPanel panel, final MouseEvent event) { - try { - SEND_MOUSE_EVENT_TO_FX_HANDLE.invoke(panel, event); - } catch (final Throwable e) { - throw new RuntimeException(e); - } - } - - /** - * Отправить на обработку событие связанное с фокусом окна в EmbeddedScene. - */ - public static void sendFocusEventToFX(final JmeFxPanel panel, final FocusEvent event) { - try { - SEND_FOCUS_EVENT_TO_FX_HANDLE.invoke(panel, event); - } catch (final Throwable e) { - throw new RuntimeException(e); - } - } - - /** - * Отправить на обработку событие связанное с клавиатурой в EmbeddedScene. - */ - public static void sendKeyEventToFX(final JmeFxPanel panel, final KeyEvent event) { - try { - SEND_KEY_EVENT_TO_FX_HANDLE.invoke(panel, event); - } catch (final Throwable e) { - throw new RuntimeException(e); - } - } - - /** - * Запрос на получение данных об отрисованном UI. - * - * @param panel панель из которой надо изъять данные. - * @param buffer буффер для размещения данных. - * @param width ширина. - * @param height высота. - * @return были ли данные получены. - */ - public static boolean getPixels(final JmeFxPanel panel, final IntBuffer buffer, final int width, final int height) { - - final Object embeddedScene = panel.getEmbeddedScene(); - final Object result; - try { - result = GET_PIXELS_HANDLE.invokeWithArguments(embeddedScene, buffer, width, height); - } catch (final Throwable throwable) { - throw new RuntimeException(throwable); - } - - return (boolean) result; - } - - /** - * Установка маштабирования пикселей в сцене. - * - * @param panel панель в которй находится сцена. - * @param scaleX маштабирование по оси X. - * @param scaleY маштабирование по оси Y. - */ - public static void setPixelScaleFactors(final JmeFxPanel panel, final float scaleX, final float scaleY) { - - final Object embeddedScene = panel.getEmbeddedScene(); - try { - SET_PIXEL_SCALE_FACTORS_HANDLE.invokeWithArguments(embeddedScene, scaleX, scaleY); - } catch (final Throwable throwable) { - throw new RuntimeException(throwable); - } - } -} diff --git a/src/com/jme3x/jfx/util/JFXPixels.java b/src/com/jme3x/jfx/util/JFXPixels.java deleted file mode 100644 index b390bca..0000000 --- a/src/com/jme3x/jfx/util/JFXPixels.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.jme3x.jfx.util; - -import java.lang.invoke.MethodHandle; -import java.lang.invoke.MethodHandles; -import java.lang.invoke.MethodType; -import java.lang.invoke.VarHandle; -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; - -/** - * Набор утильных методов для работы с Pixels в JavaFX. - */ -public class JFXPixels { - - public static final int BYTE_BGRA_PRE; - public static final int BYTE_ARGB; - - private static final Class PIXELS_TYPE; - private static final Class FORMAT_TYPE; - - private static final String FIELD_BYTE_BGRA_PRE = "BYTE_BGRA_PRE"; - private static final String FIELD_BYTE_ARGB = "BYTE_ARGB"; - - private static final String METHOD_GET_NATIVE_FORMAT = "getNativeFormat"; - - private static final MethodHandle GET_NATIVE_FORMAT_HANDLE; - - static { - - try { - - PIXELS_TYPE = Class.forName("com.sun.glass.ui.Pixels"); - FORMAT_TYPE = PIXELS_TYPE.getDeclaredClasses()[0]; - - final Constructor lookupConstructor = MethodHandles.Lookup.class.getDeclaredConstructor(Class.class); - lookupConstructor.setAccessible(true); - - final MethodHandles.Lookup pixelsLookup = lookupConstructor.newInstance(PIXELS_TYPE); - GET_NATIVE_FORMAT_HANDLE = pixelsLookup.findStatic(PIXELS_TYPE, METHOD_GET_NATIVE_FORMAT, MethodType.methodType(int.class)); - - final MethodHandles.Lookup formatLookup = lookupConstructor.newInstance(FORMAT_TYPE); - final VarHandle bgraVarField = formatLookup.findStaticVarHandle(FORMAT_TYPE, FIELD_BYTE_BGRA_PRE, int.class); - final VarHandle argbVarField = formatLookup.findStaticVarHandle(FORMAT_TYPE, FIELD_BYTE_ARGB, int.class); - - BYTE_BGRA_PRE = (Integer) bgraVarField.get(); - BYTE_ARGB = (Integer) argbVarField.get(); - - } catch (final ClassNotFoundException | NoSuchFieldException | InvocationTargetException | InstantiationException | IllegalAccessException | NoSuchMethodException e) { - throw new RuntimeException(e); - } - } - - /** - * Получение формата изображения. - */ - public static int getNativeFormat() { - try { - return (Integer) GET_NATIVE_FORMAT_HANDLE.invoke(); - } catch (final Throwable throwable) { - throw new RuntimeException(throwable); - } - } -} diff --git a/src/com/jme3x/jfx/util/JFXWindowUtils.java b/src/com/jme3x/jfx/util/JFXWindowUtils.java deleted file mode 100644 index 411a96f..0000000 --- a/src/com/jme3x/jfx/util/JFXWindowUtils.java +++ /dev/null @@ -1,144 +0,0 @@ -package com.jme3x.jfx.util; - -import com.jme3.app.Application; -import com.jme3.system.AppSettings; -import com.jme3.system.JmeContext; -import com.jme3.system.lwjgl.LwjglWindow; -import com.jme3x.jfx.util.os.OperatingSystem; - -import org.lwjgl.glfw.GLFW; - -import java.awt.*; -import java.nio.IntBuffer; -import java.util.HashMap; -import java.util.Map; - -import static java.lang.ThreadLocal.withInitial; -import static org.lwjgl.BufferUtils.createIntBuffer; - -/** - * Набор методов по работе с окном в LWJGL3. - * - * @author Ronn - */ -public class JFXWindowUtils { - - private static final Map OFFSET_MAPPING = new HashMap<>(); - - static { - OFFSET_MAPPING.put("Ubuntu", new Point(0, 0)); - } - - private static final ThreadLocal LOCAL_FIRST_INT_BUFFER = withInitial(() -> createIntBuffer(1)); - private static final ThreadLocal LOCAL_SECOND_INT_BUFFER = withInitial(() -> createIntBuffer(1)); - - /** - * Получение размера декарации окна. - */ - public static Point getWindowDecorationSize() { - - final OperatingSystem system = new OperatingSystem(); - final String distribution = system.getDistribution(); - - if (OFFSET_MAPPING.containsKey(distribution)) { - return OFFSET_MAPPING.get(distribution); - } - - for (final Map.Entry entry : OFFSET_MAPPING.entrySet()) { - final String key = entry.getKey(); - if (distribution.startsWith(key)) { - return entry.getValue(); - } - } - - return new Point(0, 0); - } - - /** - * Получение текущей X координаты окна. - */ - public static int getX(final JmeContext context) { - - final LwjglWindow lwjglContext = (LwjglWindow) context; - final long windowHandle = lwjglContext.getWindowHandle(); - - final IntBuffer x = LOCAL_FIRST_INT_BUFFER.get(); - final IntBuffer y = LOCAL_SECOND_INT_BUFFER.get(); - x.clear(); - y.clear(); - - GLFW.glfwGetWindowPos(windowHandle, x, y); - - return x.get(0); - } - - /** - * Получение текущей Y координаты окна. - */ - public static int getY(final JmeContext context) { - - final LwjglWindow lwjglContext = (LwjglWindow) context; - final long windowHandle = lwjglContext.getWindowHandle(); - - final IntBuffer x = LOCAL_FIRST_INT_BUFFER.get(); - final IntBuffer y = LOCAL_SECOND_INT_BUFFER.get(); - x.clear(); - y.clear(); - - GLFW.glfwGetWindowPos(windowHandle, x, y); - - return y.get(0); - } - - /** - * Получение текущей ширины окна. - */ - public static int getWidth(final JmeContext context) { - - final LwjglWindow lwjglContext = (LwjglWindow) context; - final long windowHandle = lwjglContext.getWindowHandle(); - - final IntBuffer width = LOCAL_FIRST_INT_BUFFER.get(); - final IntBuffer height = LOCAL_SECOND_INT_BUFFER.get(); - width.clear(); - height.clear(); - - GLFW.glfwGetWindowSize(windowHandle, width, height); - - return width.get(0); - } - - /** - * Получение текущей высоты окна. - */ - public static int getHeight(final JmeContext context) { - - final LwjglWindow lwjglContext = (LwjglWindow) context; - final long windowHandle = lwjglContext.getWindowHandle(); - - final IntBuffer width = LOCAL_FIRST_INT_BUFFER.get(); - final IntBuffer height = LOCAL_SECOND_INT_BUFFER.get(); - width.clear(); - height.clear(); - - GLFW.glfwGetWindowSize(windowHandle, width, height); - - return height.get(0); - } - - /** - * Проверка находится ли окно в полноэкранном режиме. - */ - public static boolean isFullscreen(final JmeContext jmeContext) { - final AppSettings settings = jmeContext.getSettings(); - return settings.isFullscreen(); - } - - /** - * Запросить фокус на окне. - */ - public static void requestFocus(final Application application) { - final LwjglWindow lwjglContext = (LwjglWindow) application.getContext(); - GLFW.glfwShowWindow(lwjglContext.getWindowHandle()); - } -} diff --git a/test-src/com/jme3x/jfx/TestJFXPanel.java b/test-src/com/jme3x/jfx/TestJFXPanel.java deleted file mode 100644 index d07811d..0000000 --- a/test-src/com/jme3x/jfx/TestJFXPanel.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.jme3x.jfx; - -import com.jme3.app.SimpleApplication; -import com.jme3.scene.Node; -import com.jme3.system.AppSettings; - -import javafx.scene.Group; -import javafx.scene.Scene; -import javafx.scene.control.Button; -import javafx.scene.control.TextField; -import javafx.scene.layout.VBox; -import javafx.scene.web.HTMLEditor; - -/** - * Created by ronn on 22.07.16. - */ -public class TestJFXPanel extends SimpleApplication { - - private JmeFxContainer container; - - public static void main(String[] args) throws Throwable { - - // фикс рендера шрифтов в FX - System.setProperty("prism.lcdtext", "false"); - System.setProperty("prism.text", "t2k"); - - // настройки для JavaFX - System.setProperty("prism.vsync", "true"); - System.setProperty("javafx.animation.fullspeed", "false"); - System.setProperty("prism.cacheshapes", "true"); - - final AppSettings settings = new AppSettings(true); - settings.setRenderer("CUSTOM" + TestContext.class.getName()); - settings.setResizable(true); - settings.setFrameRate(90); - - TestJFXPanel test = new TestJFXPanel(); - test.setSettings(settings); - test.setShowSettings(false); - test.start(); - } - - @Override - public void simpleInitApp() { - - final Node guiNode = getGuiNode(); - guiNode.detachAllChildren(); - - flyCam.setDragToRotate(true); - flyCam.setEnabled(false); - - container = JmeFxContainer.install(this, guiNode, null); - - final Button button = new Button("WEFWEWEFWEFWE"); - final TextField textField = new TextField("TextField"); - final HTMLEditor htmlEditor = new HTMLEditor(); - - final Group group = new Group(new VBox(button, textField, htmlEditor)); - final Scene scene = new Scene(group); - - container.setScene(scene); - } - - @Override - public void update() { - if(container.isNeedWriteToJME()) container.writeToJME(); - super.update(); - } -} diff --git a/test-src/com/jme3x/jfx/TestJmeToJFX.java b/test-src/com/jme3x/jfx/TestJmeToJFX.java index 3e7d7a4..39d2c72 100644 --- a/test-src/com/jme3x/jfx/TestJmeToJFX.java +++ b/test-src/com/jme3x/jfx/TestJmeToJFX.java @@ -49,7 +49,7 @@ public void start(final Stage stage) throws Exception { final JmeToJFXApplication application = makeJmeApplication(stage, 80); - JmeToJFXIntegrator.bind(application, imageView, Thread::new); + JmeToJFXIntegrator.startAndBind(application, imageView, Thread::new); } private static JmeToJFXApplication makeJmeApplication(Stage stage, int framerate) { From a3a1547961e413db519a0af5f11cb4e08da66c12 Mon Sep 17 00:00:00 2001 From: javasabr Date: Sat, 10 Dec 2016 22:48:50 +0300 Subject: [PATCH 12/24] updated the jar file. --- build/jfx-1.4.0.jar | Bin 72963 -> 72878 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/build/jfx-1.4.0.jar b/build/jfx-1.4.0.jar index 8528d84e1a7eefd9fab395d5d1dcca982661ce6a..66bd48ecfcf5a785a5198d693c05aed67352a21f 100644 GIT binary patch delta 4162 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 delta 4342 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 K2j~IfR{saQ#FoVX From 1e25622cb71ced4243014369482eb5c8051c54c9 Mon Sep 17 00:00:00 2001 From: javasabr Date: Mon, 12 Dec 2016 16:10:21 +0300 Subject: [PATCH 13/24] implemented an input node. --- .idea/misc.xml | 5 +--- build/jfx-1.4.0.jar | Bin 72878 -> 73007 bytes .../jme3x/jfx/injfx/JmeToJFXIntegrator.java | 9 +++++- .../injfx/SceneProcessorCopyToImageView.java | 13 ++++++--- src/com/jme3x/jfx/injfx/input/JFXInput.java | 14 ++++----- .../jme3x/jfx/injfx/input/JFXKeyInput.java | 15 +++++----- .../jme3x/jfx/injfx/input/JFXMouseInput.java | 27 +++++++++--------- test-src/com/jme3x/jfx/HelloInput.java | 7 +++-- 8 files changed, 51 insertions(+), 39 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 667ebe2..f5aa250 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,9 +1,6 @@ - - - - + \ No newline at end of file diff --git a/build/jfx-1.4.0.jar b/build/jfx-1.4.0.jar index 66bd48ecfcf5a785a5198d693c05aed67352a21f..b9775b95fed5ef3f56cb6a0f4d1fd9cb62dffe5b 100644 GIT binary patch delta 31055 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%0DXuhzLQ^lcQwFD~K2TKR?CJo3po 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 factory) { + public static SceneProcessorCopyToImageView bind(final JmeToJFXApplication application, final ImageView imageView) { final SceneProcessorCopyToImageView processor = new SceneProcessorCopyToImageView(); processor.bind(imageView, application); return processor; } + + public static SceneProcessorCopyToImageView bind(final JmeToJFXApplication application, final ImageView imageView, final Node inputNode) { + final SceneProcessorCopyToImageView processor = new SceneProcessorCopyToImageView(); + processor.bind(imageView, application, inputNode); + return processor; + } } diff --git a/src/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java b/src/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java index 1981d13..3ffdb9e 100644 --- a/src/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java +++ b/src/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java @@ -14,6 +14,7 @@ import javafx.application.Platform; import javafx.beans.value.ChangeListener; +import javafx.scene.Node; import javafx.scene.image.ImageView; /** @@ -100,6 +101,10 @@ protected void notifyComponentResized(int newWidth, int newHeight, boolean fixAs } public void bind(final ImageView imageView, final JmeToJFXApplication application) { + bind(imageView, application, imageView); + } + + public void bind(final ImageView imageView, final JmeToJFXApplication application, final Node inputNode) { if (this.application != null) throw new RuntimeException("This process is already bonded."); this.application = application; @@ -111,10 +116,10 @@ public void bind(final ImageView imageView, final JmeToJFXApplication applicatio latestViewPorts = postViews.get(postViews.size() - 1); latestViewPorts.addProcessor(this); - JFXPlatform.runInFXThread(() -> bindImageView(application, imageView)); + JFXPlatform.runInFXThread(() -> bindImageView(application, imageView, inputNode)); } - protected void bindImageView(final JmeToJFXApplication application, final ImageView imageView) { + protected void bindImageView(final JmeToJFXApplication application, final ImageView imageView, final Node inputNode) { if (!Platform.isFxApplicationThread()) { throw new RuntimeException("this call is not from JavaFX thread."); @@ -122,10 +127,10 @@ protected void bindImageView(final JmeToJFXApplication application, final ImageV final JmeOffscreenSurfaceContext context = (JmeOffscreenSurfaceContext) application.getContext(); final JFXMouseInput mouseInput = context.getMouseInput(); - mouseInput.bind(imageView); + mouseInput.bind(inputNode); final JFXKeyInput keyInput = context.getKeyInput(); - keyInput.bind(imageView); + keyInput.bind(inputNode); this.imageView = imageView; this.imageView.fitWidthProperty().addListener(widthListener); diff --git a/src/com/jme3x/jfx/injfx/input/JFXInput.java b/src/com/jme3x/jfx/injfx/input/JFXInput.java index fc47d99..a9d18db 100644 --- a/src/com/jme3x/jfx/injfx/input/JFXInput.java +++ b/src/com/jme3x/jfx/injfx/input/JFXInput.java @@ -7,8 +7,8 @@ import java.util.Objects; +import javafx.scene.Node; import javafx.scene.Scene; -import javafx.scene.image.ImageView; /** * The base implementation of the {@link Input} for using in the ImageView. @@ -23,7 +23,7 @@ public class JFXInput implements Input { protected RawInputListener listener; - protected ImageView imageView; + protected Node node; protected Scene scene; @@ -33,15 +33,15 @@ public JFXInput(final JmeOffscreenSurfaceContext context) { this.context = context; } - public void bind(final ImageView imageView) { - this.imageView = imageView; - this.scene = imageView.getScene(); - Objects.requireNonNull(this.imageView, "ImageView can' be null"); + public void bind(final Node node) { + this.node = node; + this.scene = node.getScene(); + Objects.requireNonNull(this.node, "ImageView can' be null"); Objects.requireNonNull(this.scene, "The scene of the ImageView can' be null"); } public void unbind() { - this.imageView = null; + this.node = null; this.scene = null; } diff --git a/src/com/jme3x/jfx/injfx/input/JFXKeyInput.java b/src/com/jme3x/jfx/injfx/input/JFXKeyInput.java index 88e53d9..c02d4fb 100644 --- a/src/com/jme3x/jfx/injfx/input/JFXKeyInput.java +++ b/src/com/jme3x/jfx/injfx/input/JFXKeyInput.java @@ -8,6 +8,7 @@ import java.util.Map; import javafx.event.EventHandler; +import javafx.scene.Node; import javafx.scene.image.ImageView; import javafx.scene.input.KeyCode; import javafx.scene.input.KeyEvent; @@ -145,17 +146,17 @@ public JFXKeyInput(final JmeOffscreenSurfaceContext context) { } @Override - public void bind(final ImageView imageView) { - super.bind(imageView); - scene.addEventHandler(KeyEvent.KEY_PRESSED, processKeyPressed); - scene.addEventHandler(KeyEvent.KEY_RELEASED, processKeyReleased); + public void bind(final Node node) { + super.bind(node); + node.addEventHandler(KeyEvent.KEY_PRESSED, processKeyPressed); + node.addEventHandler(KeyEvent.KEY_RELEASED, processKeyReleased); } @Override public void unbind() { - if (scene != null) { - scene.removeEventHandler(KeyEvent.KEY_PRESSED, processKeyPressed); - scene.removeEventHandler(KeyEvent.KEY_RELEASED, processKeyReleased); + if (node != null) { + node.removeEventHandler(KeyEvent.KEY_PRESSED, processKeyPressed); + node.removeEventHandler(KeyEvent.KEY_RELEASED, processKeyReleased); } super.unbind(); } diff --git a/src/com/jme3x/jfx/injfx/input/JFXMouseInput.java b/src/com/jme3x/jfx/injfx/input/JFXMouseInput.java index 55e39f8..60eb83e 100644 --- a/src/com/jme3x/jfx/injfx/input/JFXMouseInput.java +++ b/src/com/jme3x/jfx/injfx/input/JFXMouseInput.java @@ -10,6 +10,7 @@ import java.util.Map; import javafx.event.EventHandler; +import javafx.scene.Node; import javafx.scene.image.ImageView; import javafx.scene.input.MouseButton; import javafx.scene.input.MouseEvent; @@ -57,23 +58,23 @@ public JFXMouseInput(final JmeOffscreenSurfaceContext context) { } @Override - public void bind(final ImageView imageView) { - super.bind(imageView); - scene.addEventFilter(MouseEvent.MOUSE_MOVED, processMotion); - scene.addEventFilter(MouseEvent.MOUSE_PRESSED, processPressed); - scene.addEventFilter(MouseEvent.MOUSE_RELEASED, processReleased); - scene.addEventFilter(MouseEvent.MOUSE_DRAGGED, processMotion); - scene.addEventHandler(ScrollEvent.ANY, processScroll); + public void bind(final Node node) { + super.bind(node); + node.addEventHandler(MouseEvent.MOUSE_MOVED, processMotion); + node.addEventHandler(MouseEvent.MOUSE_PRESSED, processPressed); + node.addEventHandler(MouseEvent.MOUSE_RELEASED, processReleased); + node.addEventHandler(MouseEvent.MOUSE_DRAGGED, processMotion); + node.addEventHandler(ScrollEvent.ANY, processScroll); } @Override public void unbind() { - if (scene != null) { - scene.removeEventFilter(MouseEvent.MOUSE_MOVED, processMotion); - scene.removeEventFilter(MouseEvent.MOUSE_DRAGGED, processMotion); - scene.removeEventFilter(MouseEvent.MOUSE_PRESSED, processPressed); - scene.removeEventFilter(MouseEvent.MOUSE_RELEASED, processReleased); - scene.removeEventHandler(ScrollEvent.ANY, processScroll); + if (node != null) { + node.removeEventHandler(MouseEvent.MOUSE_MOVED, processMotion); + node.removeEventHandler(MouseEvent.MOUSE_DRAGGED, processMotion); + node.removeEventHandler(MouseEvent.MOUSE_PRESSED, processPressed); + node.removeEventHandler(MouseEvent.MOUSE_RELEASED, processReleased); + node.removeEventHandler(ScrollEvent.ANY, processScroll); } super.unbind(); } diff --git a/test-src/com/jme3x/jfx/HelloInput.java b/test-src/com/jme3x/jfx/HelloInput.java index 25be166..25de1de 100644 --- a/test-src/com/jme3x/jfx/HelloInput.java +++ b/test-src/com/jme3x/jfx/HelloInput.java @@ -39,8 +39,8 @@ import com.jme3.input.controls.AnalogListener; import com.jme3.input.controls.KeyTrigger; import com.jme3.input.controls.MouseButtonTrigger; +import com.jme3.light.DirectionalLight; import com.jme3.material.Material; -import com.jme3.math.ColorRGBA; import com.jme3.math.Vector3f; import com.jme3.scene.Geometry; import com.jme3.scene.shape.Box; @@ -86,10 +86,11 @@ public void start() { public void simpleInitApp() { Box b = new Box(1, 1, 1); player = new Geometry("Player", b); - Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); - mat.setColor("Color", ColorRGBA.Blue); + Material mat = new Material(assetManager, "Common/MatDefs/Light/PBRLighting.j3md"); + // mat.setColor("Color", ColorRGBA.Blue); player.setMaterial(mat); rootNode.attachChild(player); + rootNode.addLight(new DirectionalLight()); initKeys(); // load my custom keybinding } From eecba325abd6e044c1e9b5611569d79cbf8aca1b Mon Sep 17 00:00:00 2001 From: javasabr Date: Wed, 14 Dec 2016 08:35:59 +0300 Subject: [PATCH 14/24] implemented binding to a viewport --- build/jfx-1.4.0.jar | Bin 73007 -> 74404 bytes .../jme3x/jfx/injfx/JmeToJFXIntegrator.java | 13 +++ .../injfx/SceneProcessorCopyToImageView.java | 108 +++++++++++++----- src/com/jme3x/jfx/injfx/TransferImage.java | 38 +++--- 4 files changed, 119 insertions(+), 40 deletions(-) diff --git a/build/jfx-1.4.0.jar b/build/jfx-1.4.0.jar index b9775b95fed5ef3f56cb6a0f4d1fd9cb62dffe5b..e4f8e6a7de684eb7bdb3eee8e7d8e9c99713dde2 100644 GIT binary patch delta 11282 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 z zWtV2<+AK4slJta0b8`%-UFNmqg5*fl6@i^)^>Nd8Pi{>+Wt7JE?K&?noDcRhR~Tf_ z*k0Fdaf^!bU0tD-+Q_!5ie>4q-J`fjai%sb z5kG@ZTB2MfKrX6%z7n8G>abvRiPf(3KR;=mS2sq#wlx!mp+bTRJ`#7!SR&0(X$j1V zF?Nw-#9^NN+_z)Q5ze)L)0C2K`8kC*wJ_fFg&NDEYrp!hR=z#H;@Qw(b=tz+tyBt8 zA*ON59ZRjvAEvP}`)?6|`CRWXqxwdky+F2L*l35fbHOh}zb9 z^m&cYd}*b+@#=nyzGUEMb+-?D^5Qg{lB_B3&9Ww@n6x-JzAzd1@ zYS~tPGzURuGkE*Agq#Poyk@hKqKnd!_+&Zy8Mc7M1eiJu3T`=g(rPs?qy%p+{`^S+ zcOWt6Na>lAs8i;r|5^p0FZyH^~xLxVuu2ovh$ln zmc!|d0qk?jU)3OGCBC<0ywuc_*zTF7;Mq};GlYiLT+F8S+;#OV$|9s@)s;gn4io;! z3ar)=jMCuj?3^*D)ihn3x*fu#*Gb$ortaEEd10Ep9 zZV6u1Vjj2T4NvS&NoEHn?&xK!cDWaYiB-yTOOn`rE2vCIo>o7T9?6)S4&TvF0lsml zlzP>}Uim%+!X4*O=i#dlaiRQ*MB(%13H|^!PLM{QDE?|c$2=*t7sI&=mQ>&P3iY&E4 z$g%C5i27okNa@ctR`xmT4+6*Q7MU%2zQ9i1>q7j`bC!Kybx<%>9OE`XzeU=FrqZ@S(*UYJ@Xnp;hDQ@PB;w1uD>@8*TwJHKE zoNMY+WL74gGkR7O*T*BYI%7Y;G2*o%5?MKilpz9k&&way`1biGqA`v&XiIN!zkh}$ zM`Z5xQ009ZF#et|tm;W(tRw=8F=Wm?T1FV%(76`BM#N^2@60{z3FOCq>DNLsfh8uH zvrAQRrOoZFn<0uO@#3=!cqc069c~Y?d!k$mhkO3TAnM$TMIOnI&VgvZFDlc_w$xh-@6+Hv|Df%L!z6AU zoviS6xZnp4%dx9NyY{hF!U^6BNTIw+*SH2G|BGGPdKrjrW%3I`KZl~NL6D3H+htXa zvctd!)1OTUR0u^LyIO!NQ65@+?*0h!0$X7B0f#=VK0j63F^t}%U-05$df71`TGXRy zTKnhI#DSxZ*NEmPOH^@9}_muxTkD z1b9nFRc036(t$B5yheZgYZJu(H8=cP`C9PN1KJG)l0noO$zUK28Af=FneQJUd|>Jy z1!sZ8e&&Tr5(3d-j6p|0#E178j3gKx<U zVPVnaEdRa}2sT@13^&8?4O43@`s@5a1+5|mqQJOYxc;vlt}U_c1tMJ1VkZh*+yBUh zR*?YFU=-cPaQpwju&Tc0zmtgl91b5myn=aQ@?SdOeh~DLTX+`GM>*lVBBNBuaKK=S z2R^~LDOSYC0Yp`X8d5n$0y~>+e)2bQ+w}13>^9p!5o8dG9a6ZnnJ*bkeaDIX@k`@F zW@+FYkE-|@Ns)mV|N5$n1}s5%^!sZS#02&tJn}(rv4MQ>0Ur)f06uWQ0Sdzh#W+9- zoChC;|J&4qUf=+A;6~LaKyri{0tk?nf?Zt+h(HMVd;EBKN(!6|F30g$0KiL10DuGV z@6Y~Y05v2V7Z)mo3xxLpp{I{bvriulP!3!m$|wDHJ$+2e04f{mCu9I11RDT&_OGNo z>;T~po>UN-U=Xx|@E?h7j}+0-keWJr=q(`-4=xdp=mDgBSg8-XUl9Qb;7{|iD8}uQ z835qs1pY5oEgv5|IpHb!R|P@4A6YP39;n%%=)^!QI17cnRExtub7T3Bx~w+12t8sT z0bGPL@k6+2CtSqC8pnr+Q>TY~e~S1wHUAAC>V~cp1OIMN8-2}1^p%XwL9kh`gh!0mhLJlNHWI+W&CxJlL z|7X@{fn@pn53{a)SOxzr5)}-nB*jCKJno@>6b~FR*l-RyXe-4-**(IOkMJAZe_(t{ NAPI^E!9!^P{tpIS9&G>s delta 9992 zcmaKS1yq$y*Y-Jp2uP=NgEUAtNH-Ev(hbrraR6xqgaaJ9ySq!eQ>D8l1nJW6aD3MH zK7Q}N{(HfinQQj7_nv+4nR{j+uMeTJ1p!S}0UiMb06+o&;-o&tqEW*?7M!%OLXQDf zgtEa8NPdiMmILV^duq(OiO6uK(4(n5gEJe#HUR*0V~wh+(JVMAn4f3He)MR?=x~|#of#sF<-@>~~ztg;rPkzQ!_{N6WZ-N?ct&=iJ^Ec1E7&<8W2)N&` zsC+#SbnW;O2#}tHs$rT-+StJD|1^&bZe<|%SQB2n)&M7!SB}N7Q_0XF!Ps!ZsjECZlC)$ zyUvfM@Aq}G24w!~9z*sa)&Os9en!%u0ukx1${=D^y9e$Y1#s5t?LlGd9EP}8a-A!~ z_q-xVHR9oDlo~VSM(L;VllYy4Y27Dd%{mdOc~-HY9L4 z^96i9F%scN{M7DWoXIsBKJ?b>>Q<4_%@A{n_kv_=8bmE$}q z27^ME)vF39vBn7Jmyl=pM9s{dbqX#~N+UAO!EX_5qKK1au`x{^HqQ4?2(9c2@<`lN zx=YNbTm_8#fA0D*u=$hW`u9#soi%jQGi5L0`?ZINWO2vmu zAhAnUy%R5zPFa$(;5=R2!G1cZzClyNTyl$eSet`7wf<%Mo7?W9?L_rVcIVg{g8-vh z6Hp3wepwp7-{+mzKH6nHUr5Tjs9)#PnWu?T_L}OxHb#-Q?839FW8{OJ!_9Jecs58z ze@#snXG(5R%lcjw%T10;cNZ8txSwM+zNO0*sW%%9nJBQQA&5#R4J(K&Amdc`=fi$G zC#yi05O&)28*ffANnBNSeKw`oRfM?nwpHovVZD@nO7vXwtJ4C~xLNr|cv#vFi#V|&eQx5%st{Y(YvMqL zR6&GF{=JHKfsu$`g2!J~gNFBwIqAR2sO5qQsUwa)49g_qs+3MFvTmii-WQIKO3UZ; zYsyLlmC9Lu>`>%lP{uvP0SYyr^W_+3_H=G~Nd!t(#aZlbrRHX)6mn@NGGMUVX-^AS za>~TjSB!17InjoGErh>0b)w(!WabBTM+eiR4AEq4&sgz)OG6gD!lc3qs8o;yo1R(~ zrn&F(^qLmN_zt2tVvlljuYLk9-)}7Al{d)6W)Z=w(Pvz z?Rx%x+d0r}yXY8k6{RFb`$lnekCS$=Oz#A7k;+qm_C@gwg3@<0d8d%^ZXF0Ht;$IF zscTEjvCMssHf!W4m9WtkUAbq&=K)({FZ~bw2gLg&$<3KzqhY z)|tr4s;penn*VsakLqTto98)Y6vhEbESexKKl0iy*+Kj!F#IMV6CocQ2=7iA(V20@ zXoA`Y_iE@u$};`VOKekoE;?pksCR&y?3-7R40ngjE{;#-IK7v~uDXxz=ACN?x%#Xm~fcA0)gq20J)iVlQTf{KFyT+24wQRTG@SW5vCYqXBYD`ZX z2ypYS=m3l+sd%4~VRKfxh0n<*-KTBdqj`3)ya~n<+Ysiat)3ZQN>YBK`~+Xwq&4y6 zdtCas0teb1bG+o5uDJA)2+z)}!d$pEJ@&DvjG3OScpy&$rUX`Sa)`lzGyyzDm~#=s>py z91m?}579dWvHyK{$Y$*b|L`;CO>X|!H)UK`}BShnPc8OQGy25n?n z^yaboFBcJL5T`fE^BvX@L@6QB=&Z)1Cmu~P0^UHfINYNVeg{$ujHc<8{*d?P*ERuBOd(3b}=4a>;pFBBf%8P4a!nHO~B9}Y?nVZ}fm-rQ#v-n;Ni-Z?7 zYK~xT(r3Ngf=&>Shh}EW^IebzKfOBq-Ub_@6@KLhfxE(xb(59K?hE9_cYXXTSwtm6 ziI^#->>m!W*0m81b?==DCn-Pw((vhZWVI5iscTA>n&jg0liiKHw@A+rAC`Z@z^V{& z8*fHRP9quNW)4m*W;iIrI@aRnt66#BT$YxA1xG(397X;aL|wUBGd@f$6O-pi(;jZc zW9v_0=rq9ebYeUcLq`2HDE6q1;5fzGWvo%v&$6jH<}&eF3pETZ4} zMsjZb4WCWq*1M*Kgj)x>+QfOlFVKe-MI1~0-YWaWp!J*U)-$e%=ck$`_3j()Y56Zt zx7xF8+62DvWq`y=c+!b5D8KLmaoA|$8O~S44eG)!Ln^RC+q8=0QDSgcCS5dqhrJVg zv}B(JSG-1>!YfHgG}Il*%U38puIX-6wa?SN0U>9FOfAS?xH6SzEn1^3i|f~=H%y@~ zNO-6b)w+6H3dj(CF&I`Gk7fL*+o2hnQE*!*zb3-%2?5zUxmk16SX!PsotLOKhM2hp z5Ro+=^bfQ?t7{WeGPi!P*)X=r4ui96AP~r!7Eqb-zmPXL?!w?dVWIWxs;F9IV#*>9 z?F-f4W1&6A&l1g>WP2mVmdhg|B6@3`wc3azu#$p)%Vrc!aFN0DgR{=Yqcz?eVDQyF z{EhswUpUD1%gR^Cpf~>)I#(+KfiipnA*GZ?u`#MZneZy*7r>XdVp61LO8~|Yv3~X< zPvXHQVh!A>SC<8}QoNqb=R$zcuO(x5?rAoY`byc{ReG(QjFfQI^ zCuYFa|2S`Wwf|MHRIfBMAH4uWu=ZP#PPq*qfN3Bzzh3hkuDtctK|q6uM%K8h%GHi- z6$;#s{*j1$a{{?Z=delC>_y7M_hGH1=i~@6Dr;-~Vy$(~=(GlM>DqGXNx9K=E6OqA zNA3ckyjLFxtnSw4egt{kCv7rZ4z{xY3?nMm{Ux!GHPy;}>ohuWHp4N9f6g`Pc}Tc$ z9+YdX$`$;z)gbGWU6g%w{|?-RtmT=qVJSvBi%HG<)M8_e`X>uESN7udWnWtHH1z`- zCOraWxTc%U{vccBkNUy&^}}-;x@5fqH1wi zCAU9?X5_Xihg&Z!R8EUHq0G04-92*^)7>CwS0iDbT;BeG*=WtCYG~`G7l2;>euNjK z7n-xPYdpcGN-V4*d`>%gGg5U@IW2zcrp3&s5qE>>I~tx7>WJu$E4(E+g;|! zKHosZDXI)1kwWJqC`&p#i3~eXiJLu3jvG3Ryfi1kJFp-T|61c)^UKn4hiBzT9tYu* zvsnX&fzz_mTWnGlw@FC~5wsL$xYMs7FNzF=T7->Vr}BBsjl7q(ndJ!xxjmPkCAWV5 z#N8VVO)y={H7tQ6MH}Ka2nLZgUsb66#uIqEGd?!FW7xCrLppkocz>2^blLdngU=%E z*N!-iyRP#IF{037B^IX1n|DK&GHICA(}~&HFW@KU>f~-NJgW9R#8-Y$f^ItwKs0a0 zQBi6>@2;s|B4W9XXs~arHnW;EVg(5{v==#5a!=x6jIZ>qu8VYp)J9_V^^e#Yv0 zwXFBCk~{xe*K|NDYZG}R3qwFBoDJdd^ZcCP+qn+xh8Vx#j5n*kjz`wPN9yw_Mw?OU z$aiz^4v!SN{EC7eK6U#Qyu6%zcc>{?K|l=3)OI&_0OaJU~2 z*kBYHTF4JPATmS-4~SXIg zq^Hx$WtS(s!RjrMvbB@ah!?41k;f)0x6YroIl6oB>pa?&5UqQtpLY2%YC%7?b9xZk zzPrM?o8~?Kcr0JmGU&X9^S`)GCAY=I!6L}MiG>F(KPA9^*OZQiNE}C{DC#3y-RDP+ z$kChF^X?LzM{sRGybbK@OF+Cb79uFwHV|{u1ZF|Uo3RLeXnHF1(-HToCOx`(T|{&x z=I+50fKh`%j_D*sfN@iefKkgvZq`HHhk5cM)i()^e5lXVFRg2H^ma%{D1bg0LxqD} z`Q{YFm4W4?EA}fo-Oet%!LHFQgt$lV2@>T7_rC6QJhuykM1g_zryPZamgx&2%E2Ul zIF!a90l@`9`f7bR6z0osEQA$${+$z_HsuQ$QX~9Z5`kWwB#Oy4%+IIlWrx{u$54k0 z$h4?GODn%hDL!YChA%F0Y8EX|88~{Ud~v}53h^IK3?sup?@e$MS0{X_9)kUD+=qVo zUR;8EJ0l6(ga?6nTks0)2^dRCJ#fjnYJ@>TKKL71&rYw%Gv-ikO$>{<(R#8_Rm#R4 zjWg7eb_)%E-jbq+*I+tgO(kw#WNrMx9V8DUNC_%W(5q5+WJlip_AOWA$Pxy-V$T>8 zP*8FvT!h|v7|9|nF{9q1Vk4m@*z7$VIC~9Xmu2$~mAEF6rf{0$_RF~eY9FC57RAfT zRJRB#If@T_+htlDxYSKO8C>j{E;H|d+nhsjW}PPPI)G-l(xP*p-Z^_}O`<8Bp6ItB zZh{}UXS^pFZJj%hq&wElkc%=jBVCL7K~#6T+XzoJdS&+8BCnr|GWxxd-Djlou#RjC z63FXCN^DX@w^XufsS$V?hh{Bx8RhjRL8+RWS{x-GJR_VYTX^5kZ{NaU`(STUe546R z7M5$sOCtHPpJ2;nUS+`o3HqQnk)`a{u*SNeV`h)`CfCaUuL2pqIM;gQt zhluu_g#-=}gGB8Gs>N+!kW$lYu_+6EUT^^=y)GVS$ratR_9pG1_FyVjxocDrri~}a zo7ZV!6AGSK5LzD~n_N?1RT!K6H3-|FAO(Da(!sp0=_A!;f^Mkz?e>G9T1s($Lb(JM zt#L_<^Z;f4(agDcIivC3mU5eoDtE4?g+}p)QW@jW0^Qk}Q zK@QZ+>w-uVW?@g?5n`X}Bd_*c(cS|@aZjm{Mf+7~&P^+WGB+%#{8-lsu0gcfpH7?G zEycnofeb@c-LECc>li(Umzo(RtI5vb<}%RH zgHh_GC-4KK7RKU=XG3NHq>+JnCeG`wOol{BQlU3{^KEuAn{J8jV6vI0I`{b?R?#Q; z-t08XzvaOlL z>rA)JT7~>mQ$0L-&1z#_S(fwU2iNT^$7@O*<5jVL8pG_dJUzbx`qE75nrpg{%wIl4 z7#AI)l#Ro6o)zq}WYS>QWOLcHr$<;z)Q1ATYtaomyv(4%31@gY6$kRiIpLb~%1d^t ziZioln;h1@N3U$zL&#@x+GPfsDP57s+XvtrD$l6a`;B|hs@2*0Qj{+5M~o~JsN zFLkqaKN^A@)MezCUxVTr=4m8?TU4!da~qh{<-YOURO;abzZ z6`6TW8#F|J$DzjYAT`F4V8KR()d@Ly+D1o-qSd&Te>{})|Ws^T%2 zy1*WFCOgdX4b`t#%MDVqSNYg*25#SS?7CVI8b@>;6y?5Y$Dx7L72E}+F2CLU7SYuk zFKe~=K1;`se~{P48+KjlzwHt+P?5dAt*T^cgZ6+mJYa%Qo%pM?J>VgoUg4#xm!t<>4cmwjZ>CNDoF&?`b24OJY@~}1Q{JVZ0qQ)6f zp{{4VPOEx?h}oAQZ08nXQ^%OD%_MKz5gCeaZ$45$nmUeuqFg<{ryeX74sF||h@x6e z!TXp~)zC)8C_RyDg>Xi4W-`zgR5nV_WU9>`IK9vksg0C2kW(u(jTuF(+VvaMiVUXe z&Pl5(qCI-Vjda_pgrmot^x_@$T zoiijfvgv5AYLem^|Gl08>9ak!Vdqay!xN(Qn0DK#@wz!Usaxy#hZGWU0z(`lMxQFh z9Wy?7T6D)lI0c&thp?;0CVgWy`L93;S7w?k!K{MS!UzGOp7gTwn@%w%r@8SYDKQ&F zr(0iV$EST(Kre<{ze~TK(w*2aCz0QHqS5l1W|^#_egiwvl|U;h`+eKk=kbXutr(on zrq&B7=_Dm-mOF)3=9QX?+mXWc)wPPww>xB&?O{ZM+pNqv2%JAm`2tNPW7dJn`a%m9 zqq(mOWW9?Nsc3}#8RPV$`Sxjx<{apc5L&_+Wv3ty>>!RXLH3{?4cq}IK+HOYOlibB zR(fw{6=n~5I%f~K)}cVLA~;}}b`tLCx8JG};rBS*nq@%>y^E4dj2lOoVRvl966m%W zJS!931ChrleFtu9M{aBSas36YeIYi@Qg6~Ey_U`CgprpLP~TQqg*&k;JWp~%u&}pX z-o8COI|uy+H|6JQf7SirTrFU_t!8N(ZgLK1-Frju-me<20hPC{v z(ntC!l9Mz6)^F5Z(b3}6-C{Iat`#{i0ZHso8T8c~iv zMBl~cDUx@6Fx%zJph@PGWW)4Dj#1oV3OA2`AbSP60aRq)U;P}_ujVYAv+RodUdySi z)U18&@OH$xK6Q84_tW4(yh`FE=)~n~rZTDWDJ!7vEO%qu%2UPgL2zO#&wS;@^QyD) z52Q&Zk@4ESn|N~Z=7Y9lBC6_{wqlhwqAznidIguEY&p$&zKGIKhM|`sKR%y~$wq znKNQ$TQMrAH}jM}{cOXWxhmKte(S z#7cdX1N`e@hSp6T?7*30&mK36h+sAuBygn|Hpo^BN9MU7k0gFKoSbCUN_~+WQbnV| zW`2r18e&z@Mt;4UES)jOe3ZAiRsE&k-E@ZEL1&d=PX6wBouT(_>igUA<2Xq)2DRwm zp2Op|Gm(k24$iajligLOP9R_Sk5|uo_c6!U-XS@xrCE(fPSkzm?K=y6&W@k|8S?&9 zUl8cy5axS!+D&Jqc0SVJpnXi|B&^IIVHP|QfQk@Dv{~~urcGhw^g=HE+6mdcus%y# zgc<1og}n(IflOCMm!&jg7xVAo7EwY>6ED?qR{bm|GiI5QtKY2@6+OfAGm+DO!CIWc zx^Rk;$jh~ zO8&)@^73xkxfz2-gyzAYT!bT3kfT6~x$h;~$n-q8(`%ch7R@a!&a8F0BHM%`ifqL* z(G|}i8tSW~Z9_VgZql-&*0kyK(Q-*3p_pd<#)hc!fVH$%#UJ)>UJ$FFJ``Bg*r(?$ z)QC$hrx>^$$~E%Y*#$5f>m_UMpuB4Wd39otgB^bmns~XJ|Bmx5(QofyU1orU##9vV zc21TFie=NsbCPgQ3~*JWg=Vl$%OE5KQoe&YNqoM$7VB4fg6e|uGl#*SB&JN9Uz1ta z3+y7io1|gsxj?Z-t0#^{`{ZnrCTM~<#BQFhRN2vc<%RY`x;B!j_iy|qHC1UTP)J3W zSVD+Mb0zLlzdQ0k2LFd%V-!aP#BisoqBXwbFpF@-k?!;Ck1@DQeK|oA2Z9r1IDFiV zU1tqJ>2~Avx@fL(QB(3Kaguk!?)r-IhVYhw^JlI^T3j{u;pQ(-KVF+CY`ma0bZSv* zE!1P*$%w-Gt|XXfr%}*sutrC(1A?zEh=^z99C0q}D3z4xBRI;|zAvVvTu$F* zc3}sNq{ohgnT*${h76uhDj7Y|Di!!9yS|-EZQ^Uy+Orh4^nHgEWyo(T^z*vrjuZ8> zgqA?!rrhjXyd!54?@GOfeT6FF49wnVkCq!xRNwH#)+&_{7uS>Y1>2ZP$JDet+*{kG zB#iKn?Jy9o%JVf_yS%z;yjV|E#D&>J*`i- zw?q&u)@%dL1uvf;_LCi6q&uiO_-C}@ka8nne|9vs^jzDab`^S6CH-k?oM;Qt3Rm3b z>7bkyAx#%0#Ap)!vxpk<)e*peCc++dlVTp>Ys{WwJ9wzKo~Wgw>=OvDlLEKv$6m4c z4PN^!S&qX?4uP6LzcsAxTnsB88Jsh8hy&XxU6=$ry^tbFw=sl2{P~7`lUz*{=9R%M zgf;wiH@})na8nBNd(B8Y!#FkMC+|mpgJIB1{*--i{{hcQEeHB() z5M-z}(rU@5hq7AAw?$!#e)2sI^-wQL0~|N1P_u?Rci)s=;fXVSvqK=WSXbSV@7goJ z3NyF@lKKzv`V8|}4jEwld zgyBg2Ki!PcDXH#)1ziC$3m@B8rp1^>~ zSq_+h2Q4{Rb&;S}VD9|SSU47cVEl>30S&B_KVbTYK?t#;1fqj84^UuKyG|HDSi5qd zNen~uwFw(lo&u5n*oL+s&=yf+6bcaKZwSIp1$^501r3<<=jHsbXc;E32ky}v#2E+3 z39A(00J&k6H5?#6tU`hd6h((#*U0_n`Uhf-3)G^3^8WgO6aDLB4gfG?f=?+(AotK~ zpU2A{$TK`3F`U^WNd9;`L_+bXvT1@zRulmMAcpP^Ui?K@C51{dLdx;}p|?HKw<%%t zYdjzk1vIDR{=KoF|BIf)0hPpu-Y4Ne^zebG6px#Yf2Zx^X5&9ki6A&ujFnkc0SJc+ z__I5CRL>Sov}XVZ0C+$>WciOYv=$}~S;q$oKE4JBIRVr&aY>lHJvnlW|Dy%s|JY9` z2em*5X&?YH{8!wdyP|(R_G)0@FagXL6u|%fTgzX8Ci#~*0FeDiAcGh^heirIjUW!s zq4pLZL25|lb097S6qIvJ>?|q)0stM*Df@S%G`wJvh=f3F7@e39N>}%WfzSy^0HgmF zQ=I$q51sKZ>npx6$$CN{9xNJTk8~7&C`blw4kr358js#_5JCI#Lmo*l?Oj++-JJg& zuSZw8hkIFMpizHx_3xZ03WM3|Cj#QYTwQw9B^3z+p);NU<&j>#2lN+)gNTs;ap4l` zV14eyKwKChiWo{@XoP`dP!Kk@;iQ#1ynpQd9h!q?2#^Fi9UlGWCxKEm+h9~LsBRee z=@A_5go0#{5fUIi@}mO+T%!1r5K$5!9^BV12#^#ATjn5wq)=JMUZ^b7Uy1feu~E4E z#s2>cZ$LlH;xs8VypL{tf7F6J_y~gA$DaMA=`m${K@~AM&=)if{bm2_Mct1;jLCo^ z|CN0>e@l&m#TN1YORa}RB4h$O3uvJU3BCON*TXWFNDh4YUt011B?15_PeZjnhuDxq zQ}l7lc#%U#5%>twL)yuK*s#eATGIE9h2Ab(k^=yof6*(yLM6HXzf%Ibe*Ejn-iD}B z0105rmkkBf*5EcIlmbXb`G1$Jzummt20#ocfdr6cihmqEgp%PIcVI9Tc;x``uY7(S ziZ~@yeH{>DKndi94Fk!SFn1rCPBqXEB*VXa0s!U^9;Ij?&;|M_WR3D46F(jmJV*M| m1zo6dU|LX88|Jg1T27!r|69uy${*2CDj)&kF&Z>$0RIE~@PKLn diff --git a/src/com/jme3x/jfx/injfx/JmeToJFXIntegrator.java b/src/com/jme3x/jfx/injfx/JmeToJFXIntegrator.java index 047cce7..46e75ae 100644 --- a/src/com/jme3x/jfx/injfx/JmeToJFXIntegrator.java +++ b/src/com/jme3x/jfx/injfx/JmeToJFXIntegrator.java @@ -1,5 +1,6 @@ package com.jme3x.jfx.injfx; +import com.jme3.renderer.ViewPort; import com.jme3.system.AppSettings; import java.util.function.Function; @@ -35,9 +36,21 @@ public static SceneProcessorCopyToImageView bind(final JmeToJFXApplication appli return processor; } + public static SceneProcessorCopyToImageView bind(final JmeToJFXApplication application, final ImageView imageView, final ViewPort viewPort) { + final SceneProcessorCopyToImageView processor = new SceneProcessorCopyToImageView(); + processor.bind(imageView, application, viewPort); + return processor; + } + public static SceneProcessorCopyToImageView bind(final JmeToJFXApplication application, final ImageView imageView, final Node inputNode) { final SceneProcessorCopyToImageView processor = new SceneProcessorCopyToImageView(); processor.bind(imageView, application, inputNode); return processor; } + + public static SceneProcessorCopyToImageView bind(final JmeToJFXApplication application, final ImageView imageView, final Node inputNode, final ViewPort viewPort, final boolean main) { + final SceneProcessorCopyToImageView processor = new SceneProcessorCopyToImageView(); + processor.bind(imageView, application, inputNode, viewPort, main); + return processor; + } } diff --git a/src/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java b/src/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java index 3ffdb9e..24d8ab9 100644 --- a/src/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java +++ b/src/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java @@ -1,10 +1,12 @@ package com.jme3x.jfx.injfx; import com.jme3.post.SceneProcessor; +import com.jme3.renderer.Camera; import com.jme3.renderer.RenderManager; import com.jme3.renderer.ViewPort; import com.jme3.renderer.queue.RenderQueue; import com.jme3.texture.FrameBuffer; +import com.jme3.texture.Image; import com.jme3x.jfx.injfx.input.JFXKeyInput; import com.jme3x.jfx.injfx.input.JFXMouseInput; import com.jme3x.jfx.util.JFXPlatform; @@ -33,7 +35,7 @@ public class SceneProcessorCopyToImageView implements SceneProcessor { private final AtomicBoolean reshapeNeeded; private RenderManager renderManager; - private ViewPort latestViewPorts; + private ViewPort viewPort; private TransferImage transferImage; @@ -44,12 +46,16 @@ public class SceneProcessorCopyToImageView implements SceneProcessor { */ private volatile ImageView imageView; + private volatile boolean main; + private int askWidth = 1; private int askHeight = 1; - private boolean askFixAspect = true; + private boolean askFixAspect; public SceneProcessorCopyToImageView() { + askFixAspect = true; + main = true; reshapeNeeded = new AtomicBoolean(true); widthListener = (view, oldValue, newValue) -> notifyChangedWidth(newValue); heightListener = (view, oldValue, newValue) -> notifyChangedHeight(newValue); @@ -104,17 +110,24 @@ public void bind(final ImageView imageView, final JmeToJFXApplication applicatio bind(imageView, application, imageView); } - public void bind(final ImageView imageView, final JmeToJFXApplication application, final Node inputNode) { - if (this.application != null) throw new RuntimeException("This process is already bonded."); - - this.application = application; + public void bind(final ImageView imageView, final JmeToJFXApplication application, final ViewPort viewPort) { + bind(imageView, application, imageView, viewPort, true); + } + public void bind(final ImageView imageView, final JmeToJFXApplication application, final Node inputNode) { final RenderManager renderManager = application.getRenderManager(); final List postViews = renderManager.getPostViews(); if (postViews.isEmpty()) throw new RuntimeException("the list of a post view is empty."); + bind(imageView, application, inputNode, postViews.get(postViews.size() - 1), true); + } + + public void bind(final ImageView imageView, final JmeToJFXApplication application, final Node inputNode, final ViewPort viewPort, final boolean main) { + if (this.application != null) throw new RuntimeException("This process is already bonded."); - latestViewPorts = postViews.get(postViews.size() - 1); - latestViewPorts.addProcessor(this); + this.main = main; + this.application = application; + this.viewPort = viewPort; + this.viewPort.addProcessor(this); JFXPlatform.runInFXThread(() -> bindImageView(application, imageView, inputNode)); } @@ -125,12 +138,13 @@ protected void bindImageView(final JmeToJFXApplication application, final ImageV throw new RuntimeException("this call is not from JavaFX thread."); } - final JmeOffscreenSurfaceContext context = (JmeOffscreenSurfaceContext) application.getContext(); - final JFXMouseInput mouseInput = context.getMouseInput(); - mouseInput.bind(inputNode); - - final JFXKeyInput keyInput = context.getKeyInput(); - keyInput.bind(inputNode); + if (isMain()) { + final JmeOffscreenSurfaceContext context = (JmeOffscreenSurfaceContext) application.getContext(); + final JFXMouseInput mouseInput = context.getMouseInput(); + mouseInput.bind(inputNode); + final JFXKeyInput keyInput = context.getKeyInput(); + keyInput.bind(inputNode); + } this.imageView = imageView; this.imageView.fitWidthProperty().addListener(widthListener); @@ -145,9 +159,9 @@ protected void bindImageView(final JmeToJFXApplication application, final ImageV public void unbind() { - if (latestViewPorts != null) { - latestViewPorts.removeProcessor(this); // call this.cleanup() - latestViewPorts = null; + if (viewPort != null) { + viewPort.removeProcessor(this); // call this.cleanup() + viewPort = null; } JFXPlatform.runInFXThread(this::unbindImageView); @@ -159,15 +173,16 @@ protected void unbindImageView() { throw new RuntimeException("this call is not from JavaFX thread."); } - if (application != null) { + if (application != null && isMain()) { final JmeOffscreenSurfaceContext context = (JmeOffscreenSurfaceContext) application.getContext(); final JFXMouseInput mouseInput = context.getMouseInput(); mouseInput.unbind(); final JFXKeyInput keyInput = context.getKeyInput(); keyInput.unbind(); - application = null; } + application = null; + if (imageView == null) return; imageView.fitWidthProperty().removeListener(widthListener); @@ -183,20 +198,59 @@ public void initialize(final RenderManager renderManager, final ViewPort viewPor } } - private TransferImage reshapeInThread(final int width, final int height, final boolean fixAspect) { + public boolean isMain() { + return main; + } - final TransferImage transferImage = new TransferImage(imageView, width, height); - transferImage.initFor(renderManager.getRenderer()); + private TransferImage reshapeInThread(final int width, final int height, final boolean fixAspect) { + reshapeCurrentViewPort(width, height); - renderManager.notifyReshape(transferImage.getWidth(), transferImage.getHeight()); + final FrameBuffer frameBuffer = viewPort.getOutputFrameBuffer(); + final TransferImage transferImage = new TransferImage(imageView, isMain() ? null : frameBuffer, width, height); + transferImage.initFor(renderManager.getRenderer(), isMain()); - final JmeOffscreenSurfaceContext context = (JmeOffscreenSurfaceContext) application.getContext(); - context.setHeight(height); - context.setWidth(width); + if (isMain()) { + final JmeOffscreenSurfaceContext context = (JmeOffscreenSurfaceContext) application.getContext(); + context.setHeight(height); + context.setWidth(width); + } return transferImage; } + private void reshapeCurrentViewPort(final int width, final int height) { + + if (isMain()) { + renderManager.notifyReshape(width, height); + return; + } + + final Camera cam = viewPort.getCamera(); + cam.resize(width, height, true); + + final FrameBuffer frameBuffer = new FrameBuffer(width, height, 1); + frameBuffer.setDepthBuffer(Image.Format.Depth); + frameBuffer.setColorBuffer(Image.Format.BGRA8); + + final FrameBuffer old = viewPort.getOutputFrameBuffer(); + + if (old != null) { + old.dispose(); + } + + viewPort.setOutputFrameBuffer(frameBuffer); + + final List processors = viewPort.getProcessors(); + + for (final SceneProcessor sceneProcessor : processors) { + if (!sceneProcessor.isInitialized()) { + sceneProcessor.initialize(renderManager, viewPort); + } else { + sceneProcessor.reshape(viewPort, width, height); + } + } + } + @Override public boolean isInitialized() { return transferImage != null; @@ -218,7 +272,7 @@ public void postFrame(final FrameBuffer out) { } // for the next frame - if (reshapeNeeded.getAndSet(false)) { + if (imageView != null && reshapeNeeded.getAndSet(false)) { if (transferImage != null) transferImage.dispose(); transferImage = reshapeInThread(askWidth, askHeight, askFixAspect); } diff --git a/src/com/jme3x/jfx/injfx/TransferImage.java b/src/com/jme3x/jfx/injfx/TransferImage.java index 1d11284..da58f98 100644 --- a/src/com/jme3x/jfx/injfx/TransferImage.java +++ b/src/com/jme3x/jfx/injfx/TransferImage.java @@ -6,8 +6,10 @@ import com.jme3.texture.Image; import com.jme3.util.BufferUtils; import com.jme3x.jfx.util.JFXPlatform; +import com.sun.istack.internal.NotNull; import java.nio.ByteBuffer; +import java.util.Objects; import java.util.concurrent.atomic.AtomicInteger; import javafx.scene.image.ImageView; @@ -49,20 +51,30 @@ public class TransferImage { */ private final int height; - public TransferImage(final ImageView imageView, final int width, final int height) { + public TransferImage(@NotNull final ImageView imageView, @NotNull int width, int height) { + this(imageView, null, width, height); + } + + public TransferImage(@NotNull final ImageView imageView, @NotNull final FrameBuffer frameBuffer, final int width, final int height) { + Objects.requireNonNull(imageView, "ImageView can't be null."); + this.frameState = new AtomicInteger(WAITING_STATE); this.imageState = new AtomicInteger(WAITING_STATE); - this.width = width; - this.height = height; - - frameBuffer = new FrameBuffer(width, height, 1); - frameBuffer.setDepthBuffer(Image.Format.Depth); - frameBuffer.setColorBuffer(Image.Format.BGRA8); + this.width = frameBuffer != null ? frameBuffer.getWidth() : width; + this.height = frameBuffer != null ? frameBuffer.getHeight() : height; + + if (frameBuffer != null) { + this.frameBuffer = frameBuffer; + } else { + this.frameBuffer = new FrameBuffer(width, height, 1); + this.frameBuffer.setDepthBuffer(Image.Format.Depth); + this.frameBuffer.setColorBuffer(Image.Format.BGRA8); + } - frameByteBuffer = BufferUtils.createByteBuffer(width * height * 4); - byteBuffer = BufferUtils.createByteBuffer(width * height * 4); - imageByteBuffer = BufferUtils.createByteBuffer(width * height * 4); - writableImage = new WritableImage(width, height); + frameByteBuffer = BufferUtils.createByteBuffer(getWidth() * getHeight() * 4); + byteBuffer = BufferUtils.createByteBuffer(getWidth() * getHeight() * 4); + imageByteBuffer = BufferUtils.createByteBuffer(getWidth() * getHeight() * 4); + writableImage = new WritableImage(getWidth(), getHeight()); JFXPlatform.runInFXThread(() -> imageView.setImage(writableImage)); } @@ -72,8 +84,8 @@ public TransferImage(final ImageView imageView, final int width, final int heigh * * @param renderer the render. */ - public void initFor(final Renderer renderer) { - renderer.setMainFrameBufferOverride(frameBuffer); + public void initFor(final Renderer renderer, final boolean main) { + if (main) renderer.setMainFrameBufferOverride(frameBuffer); } /** From a2a53fb23aba032d240e8b0abaec1df1fb512a91 Mon Sep 17 00:00:00 2001 From: javasabr Date: Thu, 15 Dec 2016 05:58:34 +0300 Subject: [PATCH 15/24] fixed some problems --- .idea/compiler.xml | 6 ++ .idea/misc.xml | 5 +- build/jfx-1.4.0.jar | Bin 74404 -> 43856 bytes .../injfx/SceneProcessorCopyToImageView.java | 58 ++++++++++++++---- 4 files changed, 55 insertions(+), 14 deletions(-) diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 61a9130..0fc6280 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -1,6 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index f5aa250..b969a3d 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,9 @@ - + + + + \ No newline at end of file diff --git a/build/jfx-1.4.0.jar b/build/jfx-1.4.0.jar index e4f8e6a7de684eb7bdb3eee8e7d8e9c99713dde2..3ad797bf52ca3d486d1a2a3836f8e9d96dbea86e 100644 GIT binary patch delta 6451 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%0AAMu!Q8Xd=yQAx?W8?%T!hce3MAq&{{CU zn$^_sq+HE70V0|acRgCTL)e>?wLJcLQmBA%jF^D_*d%P4{xduQ*EE#chnR%^Tp)bI zl760qd&B%!Dlr2cxfL=rT^2C}zAuOw=#ZVTCG)QE3|vcc@n12XjztJdFm#p2b9Lb3 zd}0QAXOCnJskH3|&#)yJ!Vtsh-H5ONI|q0;R{%a5AZDN!v_gjagF*&=4`)cMJjFAFf?CW8N#HE{qm=wiywx3vWGKq$P%tGUaAUy= zc&r1Tm<($>SjNFwe0fhrVG3%9f)faEeG~!WHqh*3)I68I{x*v4y3xp~p z4|hi3siM4-Wz=qDNrcxrSCL}e?Nq!O>kVqhX+@7U(sW4rkV*y`X11D3^ACy9q|hID zVM&*o4DZ$N`QFhh02tE)Aneo4Ubw$|Egb858W(iBiw#{L76PL`U5n;E*=k(L@N#+U z6sqJG%g_#%Dh2?%C7fqfw+w?Dy4lcEk(}vQ&NPQih0)lwNvZ`}pou~?mZ8Nu_zz}a B_T~Tp diff --git a/src/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java b/src/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java index 24d8ab9..3a5d7d5 100644 --- a/src/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java +++ b/src/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java @@ -12,6 +12,7 @@ import com.jme3x.jfx.util.JFXPlatform; import java.util.List; +import java.util.Optional; import java.util.concurrent.atomic.AtomicBoolean; import javafx.application.Platform; @@ -39,6 +40,9 @@ public class SceneProcessorCopyToImageView implements SceneProcessor { private TransferImage transferImage; + /** + * THe JME application. + */ private volatile JmeToJFXApplication application; /** @@ -46,14 +50,20 @@ public class SceneProcessorCopyToImageView implements SceneProcessor { */ private volatile ImageView imageView; + /** + * The main processor is it. + */ private volatile boolean main; - private int askWidth = 1; - private int askHeight = 1; + private int askWidth; + private int askHeight; private boolean askFixAspect; + private boolean enabled; public SceneProcessorCopyToImageView() { + askWidth = 1; + askHeight = 1; askFixAspect = true; main = true; reshapeNeeded = new AtomicBoolean(true); @@ -96,6 +106,9 @@ protected void notifyChangedWidth(final Number newValue) { notifyComponentResized(newValue.intValue(), (int) imageView.getFitHeight(), imageView.isPreserveRatio()); } + /** + * Handle resizing. + */ protected void notifyComponentResized(int newWidth, int newHeight, boolean fixAspect) { newWidth = Math.max(newWidth, 1); newHeight = Math.max(newHeight, 1); @@ -124,6 +137,7 @@ public void bind(final ImageView imageView, final JmeToJFXApplication applicatio public void bind(final ImageView imageView, final JmeToJFXApplication application, final Node inputNode, final ViewPort viewPort, final boolean main) { if (this.application != null) throw new RuntimeException("This process is already bonded."); + this.enabled = true; this.main = main; this.application = application; this.viewPort = viewPort; @@ -198,10 +212,27 @@ public void initialize(final RenderManager renderManager, final ViewPort viewPor } } - public boolean isMain() { + /** + * @return if this processor is main. + */ + private boolean isMain() { return main; } + /** + * @return true if this processor is enabled. + */ + public boolean isEnabled() { + return enabled; + } + + /** + * @param enabled true if this processor is enabled. + */ + public void setEnabled(final boolean enabled) { + this.enabled = enabled; + } + private TransferImage reshapeInThread(final int width, final int height, final boolean fixAspect) { reshapeCurrentViewPort(width, height); @@ -228,19 +259,19 @@ private void reshapeCurrentViewPort(final int width, final int height) { final Camera cam = viewPort.getCamera(); cam.resize(width, height, true); - final FrameBuffer frameBuffer = new FrameBuffer(width, height, 1); - frameBuffer.setDepthBuffer(Image.Format.Depth); - frameBuffer.setColorBuffer(Image.Format.BGRA8); - - final FrameBuffer old = viewPort.getOutputFrameBuffer(); + final List processors = viewPort.getProcessors(); + final Optional any = processors.stream() + .filter(sceneProcessor -> !(sceneProcessor instanceof SceneProcessorCopyToImageView)) + .findAny(); - if (old != null) { - old.dispose(); - } + if (!any.isPresent()) { - viewPort.setOutputFrameBuffer(frameBuffer); + final FrameBuffer frameBuffer = new FrameBuffer(width, height, 1); + frameBuffer.setDepthBuffer(Image.Format.Depth); + frameBuffer.setColorBuffer(Image.Format.BGRA8); - final List processors = viewPort.getProcessors(); + viewPort.setOutputFrameBuffer(frameBuffer); + } for (final SceneProcessor sceneProcessor : processors) { if (!sceneProcessor.isInitialized()) { @@ -266,6 +297,7 @@ public void postQueue(final RenderQueue renderQueue) { @Override public void postFrame(final FrameBuffer out) { + if (!isEnabled()) return; if (transferImage != null) { transferImage.copyFrameBufferToImage(renderManager); From c107221ca564d3b3191b1807650b447724607d1b Mon Sep 17 00:00:00 2001 From: javasabr Date: Fri, 16 Dec 2016 06:50:11 +0300 Subject: [PATCH 16/24] updated JFX --- build/jfx-1.4.0.jar | Bin 43856 -> 32120 bytes src/com/jme3/system/lwjgl/LwjglWindow.java | 665 ------------------ .../jfx/injfx/JmeOffscreenSurfaceContext.java | 15 - .../jme3x/jfx/injfx/JmeToJFXApplication.java | 18 +- test-src/com/jme3x/jfx/TestJmeToJFX.java | 2 +- 5 files changed, 2 insertions(+), 698 deletions(-) delete mode 100644 src/com/jme3/system/lwjgl/LwjglWindow.java diff --git a/build/jfx-1.4.0.jar b/build/jfx-1.4.0.jar index 3ad797bf52ca3d486d1a2a3836f8e9d96dbea86e..a534a6c58914550ac7e6a359a4a6d81220cb5259 100644 GIT binary patch delta 4483 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 diff --git a/src/com/jme3/system/lwjgl/LwjglWindow.java b/src/com/jme3/system/lwjgl/LwjglWindow.java deleted file mode 100644 index e133c0b..0000000 --- a/src/com/jme3/system/lwjgl/LwjglWindow.java +++ /dev/null @@ -1,665 +0,0 @@ -/* - * Copyright (c) 2009-2012 jMonkeyEngine - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * * Neither the name of 'jMonkeyEngine' nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -package com.jme3.system.lwjgl; - -import com.jme3.input.JoyInput; -import com.jme3.input.KeyInput; -import com.jme3.input.MouseInput; -import com.jme3.input.TouchInput; -import com.jme3.input.lwjgl.GlfwJoystickInput; -import com.jme3.input.lwjgl.GlfwKeyInput; -import com.jme3.input.lwjgl.GlfwMouseInput; -import com.jme3.system.AppSettings; -import com.jme3.system.JmeContext; -import com.jme3.system.JmeSystem; -import com.jme3.system.NanoTimer; -import com.jme3.util.BufferUtils; - -import org.lwjgl.Version; -import org.lwjgl.glfw.GLFWErrorCallback; -import org.lwjgl.glfw.GLFWImage; -import org.lwjgl.glfw.GLFWVidMode; -import org.lwjgl.glfw.GLFWWindowFocusCallback; -import org.lwjgl.glfw.GLFWWindowSizeCallback; - -import java.awt.*; -import java.awt.image.BufferedImage; -import java.nio.ByteBuffer; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.logging.Level; -import java.util.logging.Logger; - -import static org.lwjgl.glfw.GLFW.GLFW_ALPHA_BITS; -import static org.lwjgl.glfw.GLFW.GLFW_BLUE_BITS; -import static org.lwjgl.glfw.GLFW.GLFW_CONTEXT_VERSION_MAJOR; -import static org.lwjgl.glfw.GLFW.GLFW_CONTEXT_VERSION_MINOR; -import static org.lwjgl.glfw.GLFW.GLFW_DEPTH_BITS; -import static org.lwjgl.glfw.GLFW.GLFW_FALSE; -import static org.lwjgl.glfw.GLFW.GLFW_GREEN_BITS; -import static org.lwjgl.glfw.GLFW.GLFW_OPENGL_CORE_PROFILE; -import static org.lwjgl.glfw.GLFW.GLFW_OPENGL_DEBUG_CONTEXT; -import static org.lwjgl.glfw.GLFW.GLFW_OPENGL_FORWARD_COMPAT; -import static org.lwjgl.glfw.GLFW.GLFW_OPENGL_PROFILE; -import static org.lwjgl.glfw.GLFW.GLFW_RED_BITS; -import static org.lwjgl.glfw.GLFW.GLFW_REFRESH_RATE; -import static org.lwjgl.glfw.GLFW.GLFW_RESIZABLE; -import static org.lwjgl.glfw.GLFW.GLFW_SAMPLES; -import static org.lwjgl.glfw.GLFW.GLFW_SRGB_CAPABLE; -import static org.lwjgl.glfw.GLFW.GLFW_STENCIL_BITS; -import static org.lwjgl.glfw.GLFW.GLFW_STEREO; -import static org.lwjgl.glfw.GLFW.GLFW_TRUE; -import static org.lwjgl.glfw.GLFW.GLFW_VISIBLE; -import static org.lwjgl.glfw.GLFW.glfwCreateWindow; -import static org.lwjgl.glfw.GLFW.glfwDefaultWindowHints; -import static org.lwjgl.glfw.GLFW.glfwDestroyWindow; -import static org.lwjgl.glfw.GLFW.glfwGetPrimaryMonitor; -import static org.lwjgl.glfw.GLFW.glfwGetVideoMode; -import static org.lwjgl.glfw.GLFW.glfwInit; -import static org.lwjgl.glfw.GLFW.glfwMakeContextCurrent; -import static org.lwjgl.glfw.GLFW.glfwPollEvents; -import static org.lwjgl.glfw.GLFW.glfwSetErrorCallback; -import static org.lwjgl.glfw.GLFW.glfwSetWindowFocusCallback; -import static org.lwjgl.glfw.GLFW.glfwSetWindowIcon; -import static org.lwjgl.glfw.GLFW.glfwSetWindowPos; -import static org.lwjgl.glfw.GLFW.glfwSetWindowSizeCallback; -import static org.lwjgl.glfw.GLFW.glfwSetWindowTitle; -import static org.lwjgl.glfw.GLFW.glfwShowWindow; -import static org.lwjgl.glfw.GLFW.glfwSwapBuffers; -import static org.lwjgl.glfw.GLFW.glfwSwapInterval; -import static org.lwjgl.glfw.GLFW.glfwWindowHint; -import static org.lwjgl.glfw.GLFW.glfwWindowShouldClose; -import static org.lwjgl.opengl.GL11.GL_FALSE; -import static org.lwjgl.system.MemoryUtil.NULL; - -/** - * A wrapper class over the GLFW framework in LWJGL 3. - * - * @author Daniel Johansson - */ -public abstract class LwjglWindow extends LwjglContext implements Runnable { - - private static final Logger LOGGER = Logger.getLogger(LwjglWindow.class.getName()); - - protected final AtomicBoolean needClose = new AtomicBoolean(false); - protected final AtomicBoolean needRestart = new AtomicBoolean(false); - - private final JmeContext.Type type; - - private GLFWErrorCallback errorCallback; - private GLFWWindowSizeCallback windowSizeCallback; - private GLFWWindowFocusCallback windowFocusCallback; - - private Thread mainThread; - - private double frameSleepTime; - private long window = NULL; - private int frameRateLimit = -1; - - protected boolean wasActive = false; - protected boolean autoFlush = true; - protected boolean allowSwapBuffers = false; - - public LwjglWindow(final JmeContext.Type type) { - if (!JmeContext.Type.Display.equals(type) && !JmeContext.Type.OffscreenSurface.equals(type) && !JmeContext.Type.Canvas.equals(type)) { - throw new IllegalArgumentException("Unsupported type '" + type.name() + "' provided"); - } - - this.type = type; - } - - /** - * @return Type.Display or Type.Canvas - */ - public JmeContext.Type getType() { - return type; - } - - /** - * Set the title if its a windowed display - * - * @param title the title to set - */ - public void setTitle(final String title) { - if (created.get() && window != NULL) { - glfwSetWindowTitle(window, title); - } - } - - /** - * Restart if its a windowed or full-screen display. - */ - public void restart() { - if (created.get()) { - needRestart.set(true); - } else { - LOGGER.warning("Display is not created, cannot restart window."); - } - } - - /** - * Apply the settings, changing resolution, etc. - * - * @param settings the settings to apply when creating the context. - */ - protected void createContext(final AppSettings settings) { - glfwSetErrorCallback(errorCallback = new GLFWErrorCallback() { - @Override - public void invoke(int error, long description) { - final String message = GLFWErrorCallback.getDescription(description); - listener.handleError(message, new Exception(message)); - } - - @Override - public void close() { - super.close(); - } - - @Override - public void callback(long args) { - super.callback(args); - } - }); - - if (!glfwInit()) { - throw new IllegalStateException("Unable to initialize GLFW"); - } - - glfwDefaultWindowHints(); - - if (settings.getRenderer().equals(AppSettings.LWJGL_OPENGL3)) { - glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); - glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GLFW_TRUE); - glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); - glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2); - } else { - glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2); - glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0); - } - - if (settings.getBoolean("RendererDebug")) { - glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, GLFW_TRUE); - } - - if (settings.isGammaCorrection()) { - glfwWindowHint(GLFW_SRGB_CAPABLE, GLFW_TRUE); - } - - glfwWindowHint(GLFW_VISIBLE, GL_FALSE); - glfwWindowHint(GLFW_RESIZABLE, settings.isResizable() ? GLFW_TRUE : GLFW_FALSE); - glfwWindowHint(GLFW_DEPTH_BITS, settings.getDepthBits()); - glfwWindowHint(GLFW_STENCIL_BITS, settings.getStencilBits()); - glfwWindowHint(GLFW_SAMPLES, settings.getSamples()); - glfwWindowHint(GLFW_STEREO, settings.useStereo3D() ? GLFW_TRUE : GLFW_FALSE); - glfwWindowHint(GLFW_REFRESH_RATE, settings.getFrequency()); - - if (settings.getBitsPerPixel() == 24) { - glfwWindowHint(GLFW_RED_BITS, 8); - glfwWindowHint(GLFW_GREEN_BITS, 8); - glfwWindowHint(GLFW_BLUE_BITS, 8); - } else if (settings.getBitsPerPixel() == 16) { - glfwWindowHint(GLFW_RED_BITS, 5); - glfwWindowHint(GLFW_GREEN_BITS, 6); - glfwWindowHint(GLFW_BLUE_BITS, 5); - } - - glfwWindowHint(GLFW_ALPHA_BITS, settings.getAlphaBits()); - - // TODO: Add support for monitor selection - long monitor = NULL; - - if (settings.isFullscreen()) { - monitor = glfwGetPrimaryMonitor(); - } - - final GLFWVidMode videoMode = glfwGetVideoMode(glfwGetPrimaryMonitor()); - - if (settings.getWidth() <= 0 || settings.getHeight() <= 0) { - settings.setResolution(videoMode.width(), videoMode.height()); - } - - window = glfwCreateWindow(settings.getWidth(), settings.getHeight(), settings.getTitle(), monitor, NULL); - - if (window == NULL) { - throw new RuntimeException("Failed to create the GLFW window"); - } - - // Add a resize callback which delegates to the listener - glfwSetWindowSizeCallback(window, windowSizeCallback = new GLFWWindowSizeCallback() { - @Override - public void invoke(final long window, final int width, final int height) { - settings.setResolution(width, height); - listener.reshape(width, height); - } - - @Override - public void close() { - super.close(); - } - - @Override - public void callback(long args) { - super.callback(args); - } - }); - - glfwSetWindowFocusCallback(window, windowFocusCallback = new GLFWWindowFocusCallback() { - @Override - public void invoke(final long window, final boolean focus) { - if (wasActive != focus) { - if (!wasActive) { - listener.gainFocus(); - timer.reset(); - } else { - listener.loseFocus(); - } - - wasActive = !wasActive; - } - } - - @Override - public void close() { - super.close(); - } - - @Override - public void callback(long args) { - super.callback(args); - } - }); - - // Center the window - if (!settings.isFullscreen()) { - glfwSetWindowPos(window, - (videoMode.width() - settings.getWidth()) / 2, - (videoMode.height() - settings.getHeight()) / 2); - } - - // Make the OpenGL context current - glfwMakeContextCurrent(window); - - // Enable vsync - if (settings.isVSync()) { - glfwSwapInterval(1); - } else { - glfwSwapInterval(0); - } - - if (type != Type.OffscreenSurface) { - setWindowIcon(settings); - glfwShowWindow(window); - } - - allowSwapBuffers = settings.isSwapBuffers(); - } - - /** - * Set custom icons to the window of this application. - */ - private void setWindowIcon(final AppSettings settings) { - - final Object[] icons = settings.getIcons(); - if (icons == null) return; - - final GLFWImage[] images = imagesToGLFWImages(icons); - - try (final GLFWImage.Buffer iconSet = GLFWImage.malloc(images.length)) { - - for (int i = images.length - 1; i >= 0; i--) { - final GLFWImage image = images[i]; - iconSet.put(i, image); - } - - glfwSetWindowIcon(window, iconSet); - } - } - - /** - * Convert array of images to array of {@link GLFWImage}. - */ - private GLFWImage[] imagesToGLFWImages(final Object[] images) { - - final GLFWImage[] out = new GLFWImage[images.length]; - - for (int i = 0; i < images.length; i++) { - final BufferedImage image = (BufferedImage) images[i]; - out[i] = imageToGLFWImage(image); - } - - return out; - } - - /** - * Convert the {@link BufferedImage} to the {@link GLFWImage}. - */ - private GLFWImage imageToGLFWImage(BufferedImage image) { - - if (image.getType() != BufferedImage.TYPE_INT_ARGB_PRE) { - - final BufferedImage convertedImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_ARGB_PRE); - final Graphics2D graphics = convertedImage.createGraphics(); - - final int targetWidth = image.getWidth(); - final int targetHeight = image.getHeight(); - - graphics.drawImage(image, 0, 0, targetWidth, targetHeight, null); - graphics.dispose(); - - image = convertedImage; - } - - final ByteBuffer buffer = BufferUtils.createByteBuffer(image.getWidth() * image.getHeight() * 4); - - for (int i = 0; i < image.getHeight(); i++) { - for (int j = 0; j < image.getWidth(); j++) { - int colorSpace = image.getRGB(j, i); - buffer.put((byte) ((colorSpace << 8) >> 24)); - buffer.put((byte) ((colorSpace << 16) >> 24)); - buffer.put((byte) ((colorSpace << 24) >> 24)); - buffer.put((byte) (colorSpace >> 24)); - } - } - - buffer.flip(); - - final GLFWImage result = GLFWImage.create(); - result.set(image.getWidth(), image.getHeight(), buffer); - - return result; - } - - /** - * Destroy the context. - */ - protected void destroyContext() { - try { - if (renderer != null) { - renderer.cleanup(); - } - - if (errorCallback != null) { - errorCallback.close(); - errorCallback = null; - } - - if (windowSizeCallback != null) { - windowSizeCallback.close(); - windowSizeCallback = null; - } - - if (windowFocusCallback != null) { - windowFocusCallback.close(); - windowFocusCallback = null; - } - - if (window != NULL) { - glfwDestroyWindow(window); - window = NULL; - } - } catch (final Exception ex) { - listener.handleError("Failed to destroy context", ex); - } - } - - @Override - public void create(boolean waitFor) { - if (created.get()) { - LOGGER.warning("create() called when display is already created!"); - return; - } - - // NOTE: this is required for Mac OS X! - mainThread = Thread.currentThread(); - run(); - } - - /** - * Does LWJGL display initialization in the OpenGL thread - */ - protected boolean initInThread() { - try { - if (!JmeSystem.isLowPermissions()) { - // Enable uncaught exception handler only for current thread - Thread.currentThread().setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { - @Override - public void uncaughtException(Thread thread, Throwable thrown) { - listener.handleError("Uncaught exception thrown in " + thread.toString(), thrown); - if (needClose.get()) { - // listener.handleError() has requested the - // context to close. Satisfy request. - deinitInThread(); - } - } - }); - } - - timer = new NanoTimer(); - - // For canvas, this will create a pbuffer, - // allowing us to query information. - // When the canvas context becomes available, it will - // be replaced seamlessly. - createContext(settings); - printContextInitInfo(); - - created.set(true); - super.internalCreate(); - - //create OpenCL - //Must be done here because the window handle is needed - if (settings.isOpenCLSupport()) { - initOpenCL(window); - } - - } catch (Exception ex) { - try { - if (window != NULL) { - glfwDestroyWindow(window); - window = NULL; - } - } catch (Exception ex2) { - LOGGER.log(Level.WARNING, null, ex2); - } - - listener.handleError("Failed to create display", ex); - return false; // if we failed to create display, do not continue - } - - listener.initialize(); - return true; - } - - /** - * execute one iteration of the render loop in the OpenGL thread - */ - protected void runLoop() { - // If a restart is required, lets recreate the context. - if (needRestart.getAndSet(false)) { - try { - destroyContext(); - createContext(settings); - } catch (Exception ex) { - LOGGER.log(Level.SEVERE, "Failed to set display settings!", ex); - } - - LOGGER.fine("Display restarted."); - } - - if (!created.get()) { - throw new IllegalStateException(); - } - - listener.update(); - - // All this does is call swap buffers - // If the canvas is not active, there's no need to waste time - // doing that .. - if (renderable.get()) { - // calls swap buffers, etc. - try { - if (allowSwapBuffers && autoFlush) { - glfwSwapBuffers(window); - } - } catch (Throwable ex) { - listener.handleError("Error while swapping buffers", ex); - } - } - - // Subclasses just call GLObjectManager clean up objects here - // it is safe .. for now. - if (renderer != null) { - renderer.postFrame(); - } - - if (autoFlush) { - if (frameRateLimit != getSettings().getFrameRate()) { - setFrameRateLimit(getSettings().getFrameRate()); - } - } else if (frameRateLimit != 20) { - setFrameRateLimit(20); - } - - // If software frame rate limiting has been asked for, lets calculate sleep time based on a base value calculated - // from 1000 / frameRateLimit in milliseconds subtracting the time it has taken to render last frame. - // This gives an approximate limit within 3 fps of the given frame rate limit. - if (frameRateLimit > 0) { - final double sleep = frameSleepTime - (timer.getTimePerFrame() / 1000.0); - final long sleepMillis = (long) sleep; - final int additionalNanos = (int) ((sleep - sleepMillis) * 1000000.0); - - if (sleepMillis >= 0 && additionalNanos >= 0) { - try { - Thread.sleep(sleepMillis, additionalNanos); - } catch (InterruptedException ignored) { - } - } - } - - glfwPollEvents(); - } - - private void setFrameRateLimit(int frameRateLimit) { - this.frameRateLimit = frameRateLimit; - frameSleepTime = 1000.0 / this.frameRateLimit; - } - - /** - * De-initialize in the OpenGL thread. - */ - - protected void deinitInThread() { - listener.destroy(); - - destroyContext(); - super.internalDestroy(); - - LOGGER.fine("Display destroyed."); - } - - @Override - public void run() { - if (listener == null) { - throw new IllegalStateException("SystemListener is not set on context!" - + "Must set with JmeContext.setSystemListener()."); - } - - LOGGER.log(Level.FINE, "Using LWJGL {0}", Version.getVersion()); - - if (!initInThread()) { - LOGGER.log(Level.SEVERE, "Display initialization failed. Cannot continue."); - return; - } - - while (true) { - - runLoop(); - - if (needClose.get()) { - break; - } - - if (glfwWindowShouldClose(window)) { - listener.requestClose(false); - } - } - - deinitInThread(); - } - - public JoyInput getJoyInput() { - if (joyInput == null) { - joyInput = new GlfwJoystickInput(); - } - return joyInput; - } - - public MouseInput getMouseInput() { - if (mouseInput == null) { - mouseInput = new GlfwMouseInput(this); - } - return mouseInput; - } - - public KeyInput getKeyInput() { - if (keyInput == null) { - keyInput = new GlfwKeyInput(this); - } - - return keyInput; - } - - public TouchInput getTouchInput() { - return null; - } - - public void setAutoFlushFrames(boolean enabled) { - this.autoFlush = enabled; - } - - public void destroy(boolean waitFor) { - needClose.set(true); - - if (mainThread == Thread.currentThread()) { - // Ignore waitFor. - return; - } - - if (waitFor) { - waitFor(false); - } - } - - public long getWindowHandle() { - return window; - } -} diff --git a/src/com/jme3x/jfx/injfx/JmeOffscreenSurfaceContext.java b/src/com/jme3x/jfx/injfx/JmeOffscreenSurfaceContext.java index 22fa852..988be45 100644 --- a/src/com/jme3x/jfx/injfx/JmeOffscreenSurfaceContext.java +++ b/src/com/jme3x/jfx/injfx/JmeOffscreenSurfaceContext.java @@ -12,11 +12,6 @@ import com.jme3x.jfx.injfx.input.JFXKeyInput; import com.jme3x.jfx.injfx.input.JFXMouseInput; -import javafx.stage.Stage; - -import static com.jme3x.jfx.util.JFXPlatform.runInFXThread; -import static java.util.Objects.requireNonNull; - /** * The implementation of the {@link JmeContext} for integrating to JavaFX. * @@ -24,13 +19,6 @@ */ public class JmeOffscreenSurfaceContext implements JmeContext { - private static final ThreadLocal STAGE_LOCAL = new ThreadLocal<>(); - - public static void setLocalStage(final Stage stage) { - STAGE_LOCAL.set(stage); - } - - protected final Stage window; protected final AppSettings settings; protected final JFXKeyInput keyInput; @@ -52,10 +40,8 @@ public static void setLocalStage(final Stage stage) { protected JmeContext backgroundContext; public JmeOffscreenSurfaceContext() { - this.window = STAGE_LOCAL.get(); this.keyInput = new JFXKeyInput(this); this.mouseInput = new JFXMouseInput(this); - requireNonNull(window, "you have to set a Stage to thread local."); this.settings = createSettings(); this.backgroundContext = createBackgroundContext(); this.height = 1; @@ -159,7 +145,6 @@ public Timer getTimer() { @Override public void setTitle(final String title) { - runInFXThread(() -> window.setTitle(title)); } @Override diff --git a/src/com/jme3x/jfx/injfx/JmeToJFXApplication.java b/src/com/jme3x/jfx/injfx/JmeToJFXApplication.java index d8d3b8f..7d9525a 100644 --- a/src/com/jme3x/jfx/injfx/JmeToJFXApplication.java +++ b/src/com/jme3x/jfx/injfx/JmeToJFXApplication.java @@ -4,9 +4,6 @@ import com.jme3.app.SimpleApplication; import javafx.scene.image.ImageView; -import javafx.stage.Stage; - -import static com.jme3x.jfx.injfx.JmeOffscreenSurfaceContext.setLocalStage; /** * The base implementation of {@link Application} for using in the {@link ImageView}. @@ -17,20 +14,7 @@ public class JmeToJFXApplication extends SimpleApplication { private static final ApplicationThreadExecutor EXECUTOR = ApplicationThreadExecutor.getInstance(); - private final Stage stage; - - public JmeToJFXApplication(final Stage stage) { - this.stage = stage; - } - - @Override - public void start() { - setLocalStage(stage); - try { - super.start(); - } finally { - setLocalStage(null); - } + public JmeToJFXApplication() { } @Override diff --git a/test-src/com/jme3x/jfx/TestJmeToJFX.java b/test-src/com/jme3x/jfx/TestJmeToJFX.java index 39d2c72..b6a2ed4 100644 --- a/test-src/com/jme3x/jfx/TestJmeToJFX.java +++ b/test-src/com/jme3x/jfx/TestJmeToJFX.java @@ -56,7 +56,7 @@ private static JmeToJFXApplication makeJmeApplication(Stage stage, int framerate final AppSettings settings = new AppSettings(true); JmeToJFXIntegrator.prepareSettings(settings, 60); - JmeToJFXApplication app = new JmeToJFXApplication(stage) { + JmeToJFXApplication app = new JmeToJFXApplication() { protected Geometry player; Boolean isRunning = true; From ba1758fb38f313eb13a9c036f4c0086fdb52a477 Mon Sep 17 00:00:00 2001 From: javasabr Date: Sat, 17 Dec 2016 21:19:25 +0300 Subject: [PATCH 17/24] fixed the camera behavior for resizing. --- build/jfx-1.4.0.jar | Bin 32120 -> 32204 bytes .../jfx/cursor/CursorDisplayProvider.java | 2 +- .../cursor/proton/ProtonCursorProvider.java | 2 +- .../jme3x/jfx/injfx/JmeToJFXIntegrator.java | 6 +++--- .../injfx/SceneProcessorCopyToImageView.java | 5 ++++- .../jme3x/jfx/injfx/input/JFXKeyInput.java | 4 ++-- .../jme3x/jfx/injfx/input/JFXMouseInput.java | 4 ++-- .../jfx/util/os/OperatingSystemResolver.java | 6 +++--- 8 files changed, 16 insertions(+), 13 deletions(-) diff --git a/build/jfx-1.4.0.jar b/build/jfx-1.4.0.jar index a534a6c58914550ac7e6a359a4a6d81220cb5259..15bb9d87adac4b987141e551ac25f2b56a1a645e 100644 GIT binary patch delta 5886 zcmZWtbyO7Ix*cNZknUC*1Q}`s1c9MDrAxXy1_lJAg<()hX@+j31QZd;0R~V+I){`L zC7*Kdd+&GOJ8PY_&)#3G{jKxg_v;*Mo> zA?`j-M?4(ft`5V8W~?*7-gFL!53Uchk7NR{uq}F}Y z&6MWs;gM%l*zz%|Y5En}_r#Zq@}G>Fjla9P#l3xto&|5SdI-7Rj9rAcrVqcjW*WHY zIu6N~U6A>?TzC=hTwC*A+4kIt_4k%F`qDi6tn_y(0}6=(M(?`Z? zHPPbDQc;79UO%FwVk)>%K0kffV14IR*^n|-dq>Q!%*Rh+-&R+i$UJ<#NidE8Vk}a0 zd?qyIravKJhca7v`zyaOSO}nS?Q$&I{O%}&u$4R6YpK+C3fn4>7GD)hLh0ZvK*j6h zQ(ymfW>aD3>a+_+heh?2G5?7NR`>cq>UCq9JcVX(;I-N7aHH@w8&Rngq&4v#w=V}R@N12C4KZ|X-Jw$!QQ-M(ab6V^ zUQQv>tBEl7INd)8^ba#5^-sHOvI#VOM zVKOkw%oEV3%NjrfqIXV;{Rm;-K7>R^Sm!t;oZm%NO-2QB&0$D`TM4+Sj9Y+LZ)ze| z9a7uvVr1PWTbDHV$?_Zg0z{af@{cu!ceTLy$BS*pCv9VxE~NzAb=-gabO*L~M>g-E zC6^7mC8@WMTKHH+jh@Ojp}ne!YpWOQ@3t7>ZcyEM2AFKa)#373%2%lgW~AJi**ypg zj~vU9hf6l@2~ON0VFKWNq)~U&1fQRF@85%`O*}7j#C=y|+3Vz#a(^jF*sig&>I)9c z%(9+^nzrT$NMi7F$AQaWu+k={)vZf%7ttWT6(4xcsmbG1TBCf&iiPYg16)?oKZB~jFJEn&LUd|X{nI-UHQfODYJc*P5)QYlf{DW(Y>Bkr1Ijr!PIONrU7pqQ{|f1r=cV<~uY4#o z%(_beVoY@hn%U?W;fmqvv@~gbJKZed3!MznpPrNUPEwh*+Xo5glg&CFk7;6G9KI- zrmau-6-Sc^Vg4!HODwe7-T+@Nu&jk5F1I1lMMc?>Cq+Z}Fj~%wPV=QpL)bXrK_=>9 zI2^K`wQMSxkO+Bo4_Yf=r-Z6^r1NAxi&f2I@cGIU?Lc-wp-Ife@In^n zo#~VNpUF>lJ**y0sy&f1#ux0h(u>x$dqgs|PkJJfqAJ$4kyegub&JB7!g^@4_5ufm zHXNfs7}1oTg2Pxw>lj=ziS;DV-BX<2LDE>#Pl^;aUG<+>NdwsTznFJBYK^1~tfI

    L#!Fk=qDGP&JKofn7t&Fup3}&-xPIFD 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 delta 5848 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 processors = viewPort.getProcessors(); final Optional any = processors.stream() diff --git a/src/com/jme3x/jfx/injfx/input/JFXKeyInput.java b/src/com/jme3x/jfx/injfx/input/JFXKeyInput.java index c02d4fb..ebbe798 100644 --- a/src/com/jme3x/jfx/injfx/input/JFXKeyInput.java +++ b/src/com/jme3x/jfx/injfx/input/JFXKeyInput.java @@ -1,5 +1,7 @@ package com.jme3x.jfx.injfx.input; +import static rlib.util.linkedlist.LinkedListFactory.newLinkedList; + import com.jme3.input.KeyInput; import com.jme3.input.event.KeyInputEvent; import com.jme3x.jfx.injfx.JmeOffscreenSurfaceContext; @@ -14,8 +16,6 @@ import javafx.scene.input.KeyEvent; import rlib.util.linkedlist.LinkedList; -import static rlib.util.linkedlist.LinkedListFactory.newLinkedList; - /** * The implementation of the {@link KeyInput} for using in the {@link ImageView}. * diff --git a/src/com/jme3x/jfx/injfx/input/JFXMouseInput.java b/src/com/jme3x/jfx/injfx/input/JFXMouseInput.java index 60eb83e..148525a 100644 --- a/src/com/jme3x/jfx/injfx/input/JFXMouseInput.java +++ b/src/com/jme3x/jfx/injfx/input/JFXMouseInput.java @@ -1,5 +1,7 @@ package com.jme3x.jfx.injfx.input; +import static rlib.util.linkedlist.LinkedListFactory.newLinkedList; + import com.jme3.cursors.plugins.JmeCursor; import com.jme3.input.MouseInput; import com.jme3.input.event.MouseButtonEvent; @@ -17,8 +19,6 @@ import javafx.scene.input.ScrollEvent; import rlib.util.linkedlist.LinkedList; -import static rlib.util.linkedlist.LinkedListFactory.newLinkedList; - /** * The implementation of the {@link MouseInput} for using in the {@link ImageView}. * diff --git a/src/com/jme3x/jfx/util/os/OperatingSystemResolver.java b/src/com/jme3x/jfx/util/os/OperatingSystemResolver.java index 3be6a2b..1e89dda 100644 --- a/src/com/jme3x/jfx/util/os/OperatingSystemResolver.java +++ b/src/com/jme3x/jfx/util/os/OperatingSystemResolver.java @@ -1,5 +1,8 @@ package com.jme3x.jfx.util.os; +import static java.lang.Double.parseDouble; +import static java.lang.Integer.parseInt; + import java.io.File; import java.io.FileNotFoundException; import java.io.FilenameFilter; @@ -10,9 +13,6 @@ import java.util.Map; import java.util.Scanner; -import static java.lang.Double.parseDouble; -import static java.lang.Integer.parseInt; - /** * Name resolver OS distribution. * From 9adf89dce4b0d7201506fd36b2518f2ffc87e816 Mon Sep 17 00:00:00 2001 From: javasabr Date: Thu, 22 Dec 2016 06:53:57 +0300 Subject: [PATCH 18/24] fixed key input and added system property for choosing render. --- build/jfx-1.4.0.jar | Bin 32204 -> 32291 bytes .../jfx/injfx/JmeOffscreenSurfaceContext.java | 3 ++- .../jme3x/jfx/injfx/input/JFXKeyInput.java | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/build/jfx-1.4.0.jar b/build/jfx-1.4.0.jar index 15bb9d87adac4b987141e551ac25f2b56a1a645e..1fe8590402497563b56084003f4a9e8818671d53 100644 GIT binary patch delta 6261 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 AOaK4? diff --git a/src/com/jme3x/jfx/injfx/JmeOffscreenSurfaceContext.java b/src/com/jme3x/jfx/injfx/JmeOffscreenSurfaceContext.java index 988be45..e5e66b2 100644 --- a/src/com/jme3x/jfx/injfx/JmeOffscreenSurfaceContext.java +++ b/src/com/jme3x/jfx/injfx/JmeOffscreenSurfaceContext.java @@ -164,7 +164,8 @@ public void setAutoFlushFrames(final boolean enabled) { @Override public void create(final boolean waitFor) { - backgroundContext.getSettings().setRenderer(AppSettings.LWJGL_OPENGL3); + final String render = System.getProperty("jfx.background.render", AppSettings.LWJGL_OPENGL3); + backgroundContext.getSettings().setRenderer(render); backgroundContext.create(waitFor); } diff --git a/src/com/jme3x/jfx/injfx/input/JFXKeyInput.java b/src/com/jme3x/jfx/injfx/input/JFXKeyInput.java index ebbe798..44d971d 100644 --- a/src/com/jme3x/jfx/injfx/input/JFXKeyInput.java +++ b/src/com/jme3x/jfx/injfx/input/JFXKeyInput.java @@ -61,6 +61,7 @@ public class JFXKeyInput extends JFXInput implements KeyInput { KEY_CODE_TO_JME.put(KeyCode.G, KEY_G); KEY_CODE_TO_JME.put(KeyCode.H, KEY_H); KEY_CODE_TO_JME.put(KeyCode.J, KEY_J); + KEY_CODE_TO_JME.put(KeyCode.Y, KEY_Y); KEY_CODE_TO_JME.put(KeyCode.K, KEY_K); KEY_CODE_TO_JME.put(KeyCode.L, KEY_L); KEY_CODE_TO_JME.put(KeyCode.SEMICOLON, KEY_SEMICOLON); From 07505f29e4316edff5197232a79992fc209f56d8 Mon Sep 17 00:00:00 2001 From: javasabr Date: Tue, 27 Dec 2016 16:45:51 +0300 Subject: [PATCH 19/24] implemented integrating with canvas and refactoring --- .idea/misc.xml | 2 +- build/jfx-1.4.0.jar | Bin 32291 -> 32291 bytes .../jme3x/jfx/injfx/JmeToJFXIntegrator.java | 68 ++++- .../AbstractFrameTransferSceneProcessor.java} | 239 +++++++++++------- .../CanvasFrameTransferSceneProcessor.java | 59 +++++ .../FrameTransferSceneProcessor.java | 26 ++ .../ImageViewFrameTransferSceneProcessor.java | 59 +++++ .../jfx/injfx/transfer/FrameTransfer.java | 41 +++ .../impl/AbstractFrameTransfer.java} | 90 +++---- .../transfer/impl/CanvasFrameTransfer.java | 30 +++ .../transfer/impl/ImageFrameTransfer.java | 34 +++ .../com/jme3x/jfx/TestJmeToJFXCanvas.java | 136 ++++++++++ 12 files changed, 637 insertions(+), 147 deletions(-) rename src/com/jme3x/jfx/injfx/{SceneProcessorCopyToImageView.java => processor/AbstractFrameTransferSceneProcessor.java} (51%) create mode 100644 src/com/jme3x/jfx/injfx/processor/CanvasFrameTransferSceneProcessor.java create mode 100644 src/com/jme3x/jfx/injfx/processor/FrameTransferSceneProcessor.java create mode 100644 src/com/jme3x/jfx/injfx/processor/ImageViewFrameTransferSceneProcessor.java create mode 100644 src/com/jme3x/jfx/injfx/transfer/FrameTransfer.java rename src/com/jme3x/jfx/injfx/{TransferImage.java => transfer/impl/AbstractFrameTransfer.java} (68%) create mode 100644 src/com/jme3x/jfx/injfx/transfer/impl/CanvasFrameTransfer.java create mode 100644 src/com/jme3x/jfx/injfx/transfer/impl/ImageFrameTransfer.java create mode 100644 test-src/com/jme3x/jfx/TestJmeToJFXCanvas.java diff --git a/.idea/misc.xml b/.idea/misc.xml index b969a3d..dee66b1 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -3,7 +3,7 @@ - + \ No newline at end of file diff --git a/build/jfx-1.4.0.jar b/build/jfx-1.4.0.jar index 1fe8590402497563b56084003f4a9e8818671d53..0647d10bd735713e97ad0419f7abc57c5db6fd7b 100644 GIT binary patch delta 164 zcmZ4dhjH;AM&1B#W)?061`Y;>aEDnFd6k(#l(8z9iq-^C8{2n@fauLGqN$D`#^g0& z24I2vVb1JehH9KYE0|H993%`@a;D4}Of!|6f@!OAOE6tlz63;XmaULs1`F6!JAei1 St2r6L0^Kzezyfl$tc(C6CN`k} delta 164 zcmZ4dhjH;AM&1B#W)?061`Y;>Y_n+-d6k(#l(8z9iq-^C8{2n@fauLGqN$D`#^g0& z24I2vVb1JehH9KYE0|H993%`@a;D4}Of!|6f@!OAOE6tlz63;XmaULs1`F6!JAei1 St2r6L0^Kzezyfl$tc(CexHk;| diff --git a/src/com/jme3x/jfx/injfx/JmeToJFXIntegrator.java b/src/com/jme3x/jfx/injfx/JmeToJFXIntegrator.java index fcf39e4..c8197ec 100644 --- a/src/com/jme3x/jfx/injfx/JmeToJFXIntegrator.java +++ b/src/com/jme3x/jfx/injfx/JmeToJFXIntegrator.java @@ -5,11 +5,16 @@ import com.jme3.renderer.ViewPort; import com.jme3.system.AppSettings; +import com.jme3x.jfx.injfx.processor.CanvasFrameTransferSceneProcessor; +import com.jme3x.jfx.injfx.processor.FrameTransferSceneProcessor; +import com.jme3x.jfx.injfx.processor.ImageViewFrameTransferSceneProcessor; +import com.sun.istack.internal.NotNull; import java.util.function.Function; import javafx.application.Platform; import javafx.scene.Node; +import javafx.scene.canvas.Canvas; import javafx.scene.image.ImageView; /** @@ -23,34 +28,77 @@ public static void prepareSettings(final AppSettings settings, final int framera settings.setCustomRenderer(JmeOffscreenSurfaceContext.class); } - public static SceneProcessorCopyToImageView startAndBind(final JmeToJFXApplication application, final ImageView imageView, final Function factory) { + public static FrameTransferSceneProcessor startAndBind(@NotNull final JmeToJFXApplication application, + @NotNull final ImageView imageView, @NotNull final Function factory) { factory.apply(application::start).start(); - final SceneProcessorCopyToImageView processor = new SceneProcessorCopyToImageView(); + final ImageViewFrameTransferSceneProcessor processor = new ImageViewFrameTransferSceneProcessor(); Platform.runLater(() -> application.enqueue(() -> processor.bind(imageView, application))); return processor; } - public static SceneProcessorCopyToImageView bind(final JmeToJFXApplication application, final ImageView imageView) { - final SceneProcessorCopyToImageView processor = new SceneProcessorCopyToImageView(); + public static FrameTransferSceneProcessor startAndBind(@NotNull final JmeToJFXApplication application, + @NotNull final Canvas canvas, @NotNull final Function factory) { + factory.apply(application::start).start(); + final CanvasFrameTransferSceneProcessor processor = new CanvasFrameTransferSceneProcessor(); + Platform.runLater(() -> application.enqueue(() -> processor.bind(canvas, application))); + return processor; + } + + public static FrameTransferSceneProcessor bind(@NotNull final JmeToJFXApplication application, @NotNull final ImageView imageView) { + final ImageViewFrameTransferSceneProcessor processor = new ImageViewFrameTransferSceneProcessor(); processor.bind(imageView, application); return processor; } - public static SceneProcessorCopyToImageView bind(final JmeToJFXApplication application, final ImageView imageView, final ViewPort viewPort) { - final SceneProcessorCopyToImageView processor = new SceneProcessorCopyToImageView(); + public static FrameTransferSceneProcessor bind(@NotNull final JmeToJFXApplication application, @NotNull final Canvas canvas) { + final CanvasFrameTransferSceneProcessor processor = new CanvasFrameTransferSceneProcessor(); + processor.bind(canvas, application); + return processor; + } + + public static FrameTransferSceneProcessor bind(@NotNull final JmeToJFXApplication application, + @NotNull final ImageView imageView, @NotNull final ViewPort viewPort) { + final ImageViewFrameTransferSceneProcessor processor = new ImageViewFrameTransferSceneProcessor(); processor.bind(imageView, application, viewPort); return processor; } - public static SceneProcessorCopyToImageView bind(final JmeToJFXApplication application, final ImageView imageView, final Node inputNode) { - final SceneProcessorCopyToImageView processor = new SceneProcessorCopyToImageView(); + public static FrameTransferSceneProcessor bind(@NotNull final JmeToJFXApplication application, + @NotNull final Canvas canvas, @NotNull final ViewPort viewPort) { + final CanvasFrameTransferSceneProcessor processor = new CanvasFrameTransferSceneProcessor(); + processor.bind(canvas, application, viewPort); + return processor; + } + + public static FrameTransferSceneProcessor bind(@NotNull final JmeToJFXApplication application, + @NotNull final ImageView imageView, @NotNull final Node inputNode) { + final ImageViewFrameTransferSceneProcessor processor = new ImageViewFrameTransferSceneProcessor(); processor.bind(imageView, application, inputNode); return processor; } - public static SceneProcessorCopyToImageView bind(final JmeToJFXApplication application, final ImageView imageView, final Node inputNode, final ViewPort viewPort, final boolean main) { - final SceneProcessorCopyToImageView processor = new SceneProcessorCopyToImageView(); + public static FrameTransferSceneProcessor bind(@NotNull final JmeToJFXApplication application, + @NotNull final Canvas canvas, @NotNull final Node inputNode) { + final CanvasFrameTransferSceneProcessor processor = new CanvasFrameTransferSceneProcessor(); + processor.bind(canvas, application, inputNode); + return processor; + } + + public static FrameTransferSceneProcessor bind(@NotNull final JmeToJFXApplication application, + @NotNull final ImageView imageView, + @NotNull final Node inputNode, + @NotNull final ViewPort viewPort, final boolean main) { + final ImageViewFrameTransferSceneProcessor processor = new ImageViewFrameTransferSceneProcessor(); processor.bind(imageView, application, inputNode, viewPort, main); return processor; } + + public static FrameTransferSceneProcessor bind(@NotNull final JmeToJFXApplication application, + @NotNull final Canvas canvas, + @NotNull final Node inputNode, + @NotNull final ViewPort viewPort, final boolean main) { + final CanvasFrameTransferSceneProcessor processor = new CanvasFrameTransferSceneProcessor(); + processor.bind(canvas, application, inputNode, viewPort, main); + return processor; + } } diff --git a/src/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java b/src/com/jme3x/jfx/injfx/processor/AbstractFrameTransferSceneProcessor.java similarity index 51% rename from src/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java rename to src/com/jme3x/jfx/injfx/processor/AbstractFrameTransferSceneProcessor.java index 4dc835d..438afa9 100644 --- a/src/com/jme3x/jfx/injfx/SceneProcessorCopyToImageView.java +++ b/src/com/jme3x/jfx/injfx/processor/AbstractFrameTransferSceneProcessor.java @@ -1,4 +1,4 @@ -package com.jme3x.jfx.injfx; +package com.jme3x.jfx.injfx.processor; import com.jme3.post.SceneProcessor; import com.jme3.renderer.Camera; @@ -7,9 +7,13 @@ import com.jme3.renderer.queue.RenderQueue; import com.jme3.texture.FrameBuffer; import com.jme3.texture.Image; +import com.jme3x.jfx.injfx.JmeOffscreenSurfaceContext; +import com.jme3x.jfx.injfx.JmeToJFXApplication; import com.jme3x.jfx.injfx.input.JFXKeyInput; import com.jme3x.jfx.injfx.input.JFXMouseInput; +import com.jme3x.jfx.injfx.transfer.FrameTransfer; import com.jme3x.jfx.util.JFXPlatform; +import com.sun.istack.internal.NotNull; import java.util.List; import java.util.Optional; @@ -21,24 +25,24 @@ import javafx.scene.image.ImageView; /** - * The implementation of the {@link SceneProcessor} for transfering content between jME and - * ImageView. + * The base implementation of scene processor for transferring frames. + * + * @author JavaSaBr. */ -public class SceneProcessorCopyToImageView implements SceneProcessor { +public abstract class AbstractFrameTransferSceneProcessor implements FrameTransferSceneProcessor { /** * The listeners. */ - private final ChangeListener widthListener; - private final ChangeListener heightListener; - private final ChangeListener rationListener; + protected final ChangeListener widthListener; + protected final ChangeListener heightListener; + protected final ChangeListener rationListener; private final AtomicBoolean reshapeNeeded; private RenderManager renderManager; private ViewPort viewPort; - - private TransferImage transferImage; + private FrameTransfer frameTransfer; /** * THe JME application. @@ -48,7 +52,7 @@ public class SceneProcessorCopyToImageView implements SceneProcessor { /** * The {@link ImageView} for showing the content of jME. */ - private volatile ImageView imageView; + protected volatile T destination; /** * The main processor is it. @@ -61,10 +65,9 @@ public class SceneProcessorCopyToImageView implements SceneProcessor { private boolean askFixAspect; private boolean enabled; - public SceneProcessorCopyToImageView() { + public AbstractFrameTransferSceneProcessor() { askWidth = 1; askHeight = 1; - askFixAspect = true; main = true; reshapeNeeded = new AtomicBoolean(true); widthListener = (view, oldValue, newValue) -> notifyChangedWidth(newValue); @@ -72,20 +75,13 @@ public SceneProcessorCopyToImageView() { rationListener = (view, oldValue, newValue) -> notifyChangedRatio(newValue); } - /** - * @return the {@link ImageView} for showing the content of jME. - */ - protected ImageView getImageView() { - return imageView; - } - /** * Notify about that the ratio was changed. * * @param newValue the new value of the ratio. */ protected void notifyChangedRatio(final Boolean newValue) { - notifyComponentResized((int) imageView.getFitWidth(), (int) imageView.getFitHeight(), newValue); + notifyComponentResized(getDestinationWidth(), getDestinationHeight(), newValue); } /** @@ -93,8 +89,8 @@ protected void notifyChangedRatio(final Boolean newValue) { * * @param newValue the new value of the height. */ - protected void notifyChangedHeight(final Number newValue) { - notifyComponentResized((int) imageView.getFitWidth(), newValue.intValue(), imageView.isPreserveRatio()); + protected void notifyChangedHeight(@NotNull final Number newValue) { + notifyComponentResized(getDestinationWidth(), newValue.intValue(), isPreserveRatio()); } /** @@ -102,8 +98,8 @@ protected void notifyChangedHeight(final Number newValue) { * * @param newValue the new value of the width. */ - protected void notifyChangedWidth(final Number newValue) { - notifyComponentResized(newValue.intValue(), (int) imageView.getFitHeight(), imageView.isPreserveRatio()); + protected void notifyChangedWidth(@NotNull final Number newValue) { + notifyComponentResized(newValue.intValue(), getDestinationHeight(), isPreserveRatio()); } /** @@ -119,22 +115,71 @@ protected void notifyComponentResized(int newWidth, int newHeight, boolean fixAs reshapeNeeded.set(true); } - public void bind(final ImageView imageView, final JmeToJFXApplication application) { - bind(imageView, application, imageView); + /** + * @return is preserve ratio. + */ + protected boolean isPreserveRatio() { + throw new UnsupportedOperationException(); } - public void bind(final ImageView imageView, final JmeToJFXApplication application, final ViewPort viewPort) { - bind(imageView, application, imageView, viewPort, true); + /** + * @return the destination width. + */ + protected int getDestinationWidth() { + throw new UnsupportedOperationException(); } - public void bind(final ImageView imageView, final JmeToJFXApplication application, final Node inputNode) { + /** + * @return the destination height. + */ + protected int getDestinationHeight() { + throw new UnsupportedOperationException(); + } + + public void bind(@NotNull final T destination, @NotNull final JmeToJFXApplication application) { + bind(destination, application, destination); + } + + /** + * Bind this processor to the destination. + * + * @param destination the destination. + * @param application the application. + * @param viewPort the view port. + */ + public void bind(@NotNull final T destination, @NotNull final JmeToJFXApplication application, + @NotNull final ViewPort viewPort) { + bind(destination, application, destination, viewPort, true); + } + + + /** + * Bind this processor to the destination. + * + * @param destination the destination. + * @param application the application. + * @param inputNode the input node. + */ + public void bind(@NotNull final T destination, @NotNull final JmeToJFXApplication application, + @NotNull final Node inputNode) { final RenderManager renderManager = application.getRenderManager(); final List postViews = renderManager.getPostViews(); if (postViews.isEmpty()) throw new RuntimeException("the list of a post view is empty."); - bind(imageView, application, inputNode, postViews.get(postViews.size() - 1), true); + bind(destination, application, inputNode, postViews.get(postViews.size() - 1), true); } - public void bind(final ImageView imageView, final JmeToJFXApplication application, final Node inputNode, final ViewPort viewPort, final boolean main) { + /** + * Bind this processor to the destination. + * + * @param application the application. + * @param destination the destination. + * @param inputNode the input node. + * @param viewPort the view port. + * @param main true if this processor is main. + */ + public void bind(@NotNull final T destination, @NotNull final JmeToJFXApplication application, + @NotNull final Node inputNode, @NotNull final ViewPort viewPort, final boolean main) { + if (this.application != null) throw new RuntimeException("This process is already bonded."); this.enabled = true; @@ -143,10 +188,18 @@ public void bind(final ImageView imageView, final JmeToJFXApplication applicatio this.viewPort = viewPort; this.viewPort.addProcessor(this); - JFXPlatform.runInFXThread(() -> bindImageView(application, imageView, inputNode)); + JFXPlatform.runInFXThread(() -> bindDestination(application, destination, inputNode)); } - protected void bindImageView(final JmeToJFXApplication application, final ImageView imageView, final Node inputNode) { + /** + * Bind this processor to the destination. + * + * @param application the application. + * @param destination the destination. + * @param inputNode the input node. + */ + protected void bindDestination(@NotNull final JmeToJFXApplication application, @NotNull final T destination, + @NotNull final Node inputNode) { if (!Platform.isFxApplicationThread()) { throw new RuntimeException("this call is not from JavaFX thread."); @@ -160,28 +213,36 @@ protected void bindImageView(final JmeToJFXApplication application, final ImageV keyInput.bind(inputNode); } - this.imageView = imageView; - this.imageView.fitWidthProperty().addListener(widthListener); - this.imageView.fitHeightProperty().addListener(heightListener); - this.imageView.preserveRatioProperty().addListener(rationListener); - this.imageView.setPickOnBounds(true); + this.destination = destination; + bindListeners(); + this.destination.setPickOnBounds(true); - notifyComponentResized((int) imageView.getFitWidth(), (int) imageView.getFitHeight(), imageView.isPreserveRatio()); + notifyComponentResized(getDestinationWidth(), getDestinationHeight(), isPreserveRatio()); + } - this.imageView.setScaleY(-1.0); + /** + * Bind listeners to current destination. + */ + protected void bindListeners() { } + /** + * Unbind this processor from its current destination. + */ public void unbind() { if (viewPort != null) { - viewPort.removeProcessor(this); // call this.cleanup() + viewPort.removeProcessor(this); viewPort = null; } - JFXPlatform.runInFXThread(this::unbindImageView); + JFXPlatform.runInFXThread(this::unbindDestination); } - protected void unbindImageView() { + /** + * Unbind this processor from destination. + */ + protected void unbindDestination() { if (!Platform.isFxApplicationThread()) { throw new RuntimeException("this call is not from JavaFX thread."); @@ -197,48 +258,39 @@ protected void unbindImageView() { application = null; - if (imageView == null) return; - - imageView.fitWidthProperty().removeListener(widthListener); - imageView.fitHeightProperty().removeListener(heightListener); - imageView.preserveRatioProperty().removeListener(rationListener); - imageView = null; - } - - @Override - public void initialize(final RenderManager renderManager, final ViewPort viewPort) { - if (this.renderManager == null) { - this.renderManager = renderManager; - } + if (destination == null) return; + unbindListeners(); + destination = null; } /** - * @return if this processor is main. + * Unbind all listeners from destination. */ - private boolean isMain() { + protected void unbindListeners() { + } + + @Override + public boolean isMain() { return main; } - /** - * @return true if this processor is enabled. - */ + @Override public boolean isEnabled() { return enabled; } - /** - * @param enabled true if this processor is enabled. - */ + @Override public void setEnabled(final boolean enabled) { this.enabled = enabled; } - private TransferImage reshapeInThread(final int width, final int height, final boolean fixAspect) { + @NotNull + protected FrameTransfer reshapeInThread(final int width, final int height, final boolean fixAspect) { reshapeCurrentViewPort(width, height); final FrameBuffer frameBuffer = viewPort.getOutputFrameBuffer(); - final TransferImage transferImage = new TransferImage(imageView, isMain() ? null : frameBuffer, width, height); - transferImage.initFor(renderManager.getRenderer(), isMain()); + final FrameTransfer frameTransfer = createFrameTransfer(width, height, frameBuffer); + frameTransfer.initFor(renderManager.getRenderer(), isMain()); if (isMain()) { final JmeOffscreenSurfaceContext context = (JmeOffscreenSurfaceContext) application.getContext(); @@ -246,10 +298,16 @@ private TransferImage reshapeInThread(final int width, final int height, final b context.setWidth(width); } - return transferImage; + return frameTransfer; + } + + @NotNull + protected FrameTransfer createFrameTransfer(final int width, final int height, + @NotNull final FrameBuffer frameBuffer) { + throw new UnsupportedOperationException(); } - private void reshapeCurrentViewPort(final int width, final int height) { + protected void reshapeCurrentViewPort(final int width, final int height) { final Camera cam = viewPort.getCamera(); @@ -264,7 +322,7 @@ private void reshapeCurrentViewPort(final int width, final int height) { final List processors = viewPort.getProcessors(); final Optional any = processors.stream() - .filter(sceneProcessor -> !(sceneProcessor instanceof SceneProcessorCopyToImageView)) + .filter(sceneProcessor -> !(sceneProcessor instanceof FrameTransferSceneProcessor)) .findAny(); if (!any.isPresent()) { @@ -285,43 +343,50 @@ private void reshapeCurrentViewPort(final int width, final int height) { } } + @Override + public void initialize(@NotNull final RenderManager renderManager, @NotNull final ViewPort viewPort) { + this.renderManager = renderManager; + } + + @Override + public void reshape(@NotNull final ViewPort viewPort, final int w, final int h) { + } + @Override public boolean isInitialized() { - return transferImage != null; + return frameTransfer != null; } @Override - public void preFrame(float tpf) { + public void preFrame(final float tpf) { + } @Override - public void postQueue(final RenderQueue renderQueue) { + public void postQueue(@NotNull final RenderQueue renderQueue) { + } @Override - public void postFrame(final FrameBuffer out) { + public void postFrame(@NotNull final FrameBuffer out) { if (!isEnabled()) return; - if (transferImage != null) { - transferImage.copyFrameBufferToImage(renderManager); + if (frameTransfer != null) { + frameTransfer.copyFrameBufferToImage(renderManager); } // for the next frame - if (imageView != null && reshapeNeeded.getAndSet(false)) { - if (transferImage != null) transferImage.dispose(); - transferImage = reshapeInThread(askWidth, askHeight, askFixAspect); + if (destination != null && reshapeNeeded.getAndSet(false)) { + if (frameTransfer != null) frameTransfer.dispose(); + frameTransfer = reshapeInThread(askWidth, askHeight, askFixAspect); } } @Override public void cleanup() { - if (transferImage != null) { - transferImage.dispose(); - transferImage = null; + if (frameTransfer != null) { + frameTransfer.dispose(); + frameTransfer = null; } } - - @Override - public void reshape(final ViewPort viewPort, final int width, final int height) { - } -} \ No newline at end of file +} diff --git a/src/com/jme3x/jfx/injfx/processor/CanvasFrameTransferSceneProcessor.java b/src/com/jme3x/jfx/injfx/processor/CanvasFrameTransferSceneProcessor.java new file mode 100644 index 0000000..69ddcee --- /dev/null +++ b/src/com/jme3x/jfx/injfx/processor/CanvasFrameTransferSceneProcessor.java @@ -0,0 +1,59 @@ +package com.jme3x.jfx.injfx.processor; + +import com.jme3.post.SceneProcessor; +import com.jme3.texture.FrameBuffer; +import com.jme3x.jfx.injfx.JmeToJFXApplication; +import com.jme3x.jfx.injfx.transfer.FrameTransfer; +import com.jme3x.jfx.injfx.transfer.impl.CanvasFrameTransfer; +import com.sun.istack.internal.NotNull; + +import javafx.scene.Node; +import javafx.scene.canvas.Canvas; + +/** + * The implementation of the {@link SceneProcessor} for transferring content between jME and Canvas. + * + * @author JavaSaBr + */ +public class CanvasFrameTransferSceneProcessor extends AbstractFrameTransferSceneProcessor { + + @Override + protected int getDestinationWidth() { + return (int) destination.getWidth(); + } + + @Override + protected int getDestinationHeight() { + return (int) destination.getHeight(); + } + + @Override + protected boolean isPreserveRatio() { + return false; + } + + @Override + protected void bindDestination(@NotNull final JmeToJFXApplication application, @NotNull final Canvas destination, @NotNull final Node inputNode) { + super.bindDestination(application, destination, inputNode); + destination.setScaleY(-1.0); + } + + @Override + protected void bindListeners() { + destination.widthProperty().addListener(widthListener); + destination.heightProperty().addListener(heightListener); + super.bindListeners(); + } + + @Override + protected void unbindListeners() { + destination.widthProperty().removeListener(widthListener); + destination.heightProperty().removeListener(heightListener); + super.unbindListeners(); + } + + @Override + protected FrameTransfer createFrameTransfer(final int width, final int height, @NotNull final FrameBuffer frameBuffer) { + return new CanvasFrameTransfer(destination, isMain() ? null : frameBuffer, width, height); + } +} \ No newline at end of file diff --git a/src/com/jme3x/jfx/injfx/processor/FrameTransferSceneProcessor.java b/src/com/jme3x/jfx/injfx/processor/FrameTransferSceneProcessor.java new file mode 100644 index 0000000..7c31ec9 --- /dev/null +++ b/src/com/jme3x/jfx/injfx/processor/FrameTransferSceneProcessor.java @@ -0,0 +1,26 @@ +package com.jme3x.jfx.injfx.processor; + +import com.jme3.post.SceneProcessor; + +/** + * The interface for implementing frame transfer processor. + * + * @author JavaSaBr + */ +public interface FrameTransferSceneProcessor extends SceneProcessor { + + /** + * @return if this processor is main. + */ + boolean isMain(); + + /** + * @return true if this processor is enabled. + */ + boolean isEnabled(); + + /** + * @param enabled true if this processor is enabled. + */ + void setEnabled(final boolean enabled); +} diff --git a/src/com/jme3x/jfx/injfx/processor/ImageViewFrameTransferSceneProcessor.java b/src/com/jme3x/jfx/injfx/processor/ImageViewFrameTransferSceneProcessor.java new file mode 100644 index 0000000..4dd227d --- /dev/null +++ b/src/com/jme3x/jfx/injfx/processor/ImageViewFrameTransferSceneProcessor.java @@ -0,0 +1,59 @@ +package com.jme3x.jfx.injfx.processor; + +import com.jme3.post.SceneProcessor; +import com.jme3.texture.FrameBuffer; +import com.jme3x.jfx.injfx.JmeToJFXApplication; +import com.jme3x.jfx.injfx.transfer.FrameTransfer; +import com.jme3x.jfx.injfx.transfer.impl.ImageFrameTransfer; +import com.sun.istack.internal.NotNull; + +import javafx.scene.Node; +import javafx.scene.image.ImageView; + +/** + * The implementation of the {@link SceneProcessor} for transferring content between jME and ImageView. + */ +public class ImageViewFrameTransferSceneProcessor extends AbstractFrameTransferSceneProcessor { + + @Override + protected int getDestinationHeight() { + return (int) destination.getFitHeight(); + } + + @Override + protected int getDestinationWidth() { + return (int) destination.getFitWidth(); + } + + @Override + protected boolean isPreserveRatio() { + return destination.isPreserveRatio(); + } + + @Override + protected void bindDestination(@NotNull final JmeToJFXApplication application, @NotNull final ImageView destination, @NotNull final Node inputNode) { + super.bindDestination(application, destination, inputNode); + destination.setScaleY(-1.0); + } + + @Override + protected void bindListeners() { + destination.fitWidthProperty().addListener(widthListener); + destination.fitHeightProperty().addListener(heightListener); + destination.preserveRatioProperty().addListener(rationListener); + super.bindListeners(); + } + + @Override + protected void unbindDestination() { + destination.fitWidthProperty().removeListener(widthListener); + destination.fitHeightProperty().removeListener(heightListener); + destination.preserveRatioProperty().removeListener(rationListener); + super.unbindDestination(); + } + + @Override + protected FrameTransfer createFrameTransfer(final int width, final int height, @NotNull final FrameBuffer frameBuffer) { + return new ImageFrameTransfer(destination, isMain() ? null : frameBuffer, width, height); + } +} \ No newline at end of file diff --git a/src/com/jme3x/jfx/injfx/transfer/FrameTransfer.java b/src/com/jme3x/jfx/injfx/transfer/FrameTransfer.java new file mode 100644 index 0000000..d2c055e --- /dev/null +++ b/src/com/jme3x/jfx/injfx/transfer/FrameTransfer.java @@ -0,0 +1,41 @@ +package com.jme3x.jfx.injfx.transfer; + +import com.jme3.renderer.RenderManager; +import com.jme3.renderer.Renderer; +import com.sun.istack.internal.NotNull; + +/** + * The class for transferring content from a jME frame buffer to somewhere. + * + * @author JavaSaBr + */ +public interface FrameTransfer { + + /** + * Init this transfer for the render. + * + * @param renderer the render. + */ + default void initFor(@NotNull final Renderer renderer, final boolean main) { + } + + /** + * @return the width. + */ + int getWidth(); + + /** + * @return the height. + */ + int getHeight(); + + /** + * Copy the content from render to the frameByteBuffer and write this content to image view. + */ + void copyFrameBufferToImage(@NotNull final RenderManager renderManager); + + /** + * Dispose this transfer. + */ + void dispose(); +} diff --git a/src/com/jme3x/jfx/injfx/TransferImage.java b/src/com/jme3x/jfx/injfx/transfer/impl/AbstractFrameTransfer.java similarity index 68% rename from src/com/jme3x/jfx/injfx/TransferImage.java rename to src/com/jme3x/jfx/injfx/transfer/impl/AbstractFrameTransfer.java index da58f98..cd847fb 100644 --- a/src/com/jme3x/jfx/injfx/TransferImage.java +++ b/src/com/jme3x/jfx/injfx/transfer/impl/AbstractFrameTransfer.java @@ -1,45 +1,43 @@ -package com.jme3x.jfx.injfx; +package com.jme3x.jfx.injfx.transfer.impl; import com.jme3.renderer.RenderManager; import com.jme3.renderer.Renderer; import com.jme3.texture.FrameBuffer; import com.jme3.texture.Image; import com.jme3.util.BufferUtils; +import com.jme3x.jfx.injfx.transfer.FrameTransfer; import com.jme3x.jfx.util.JFXPlatform; import com.sun.istack.internal.NotNull; import java.nio.ByteBuffer; -import java.util.Objects; import java.util.concurrent.atomic.AtomicInteger; -import javafx.scene.image.ImageView; import javafx.scene.image.PixelFormat; import javafx.scene.image.PixelWriter; -import javafx.scene.image.WritableImage; import javafx.scene.image.WritablePixelFormat; /** - * The class for transferring content from the jME to {@link ImageView}. + * The base implementation of a frame transfer. * - * @author JavaSaBr. + * @author JavaSaBr */ -public class TransferImage { +public abstract class AbstractFrameTransfer implements FrameTransfer { - private static final int RUNNING_STATE = 1; - private static final int WAITING_STATE = 2; - private static final int DISPOSING_STATE = 3; - private static final int DISPOSED_STATE = 4; + protected static final int RUNNING_STATE = 1; + protected static final int WAITING_STATE = 2; + protected static final int DISPOSING_STATE = 3; + protected static final int DISPOSED_STATE = 4; - private final AtomicInteger frameState; - private final AtomicInteger imageState; + protected final AtomicInteger frameState; + protected final AtomicInteger imageState; - private final FrameBuffer frameBuffer; + protected final FrameBuffer frameBuffer; - private final WritableImage writableImage; + protected final PixelWriter pixelWriter; - private final ByteBuffer frameByteBuffer; - private final ByteBuffer byteBuffer; - private final ByteBuffer imageByteBuffer; + protected final ByteBuffer frameByteBuffer; + protected final ByteBuffer byteBuffer; + protected final ByteBuffer imageByteBuffer; /** * The width. @@ -51,13 +49,11 @@ public class TransferImage { */ private final int height; - public TransferImage(@NotNull final ImageView imageView, @NotNull int width, int height) { - this(imageView, null, width, height); + public AbstractFrameTransfer(@NotNull final T destination, final int width, final int height) { + this(destination, null, width, height); } - public TransferImage(@NotNull final ImageView imageView, @NotNull final FrameBuffer frameBuffer, final int width, final int height) { - Objects.requireNonNull(imageView, "ImageView can't be null."); - + public AbstractFrameTransfer(@NotNull final T destination, @NotNull final FrameBuffer frameBuffer, final int width, final int height) { this.frameState = new AtomicInteger(WAITING_STATE); this.imageState = new AtomicInteger(WAITING_STATE); this.width = frameBuffer != null ? frameBuffer.getWidth() : width; @@ -74,38 +70,31 @@ public TransferImage(@NotNull final ImageView imageView, @NotNull final FrameBuf frameByteBuffer = BufferUtils.createByteBuffer(getWidth() * getHeight() * 4); byteBuffer = BufferUtils.createByteBuffer(getWidth() * getHeight() * 4); imageByteBuffer = BufferUtils.createByteBuffer(getWidth() * getHeight() * 4); - writableImage = new WritableImage(getWidth(), getHeight()); - - JFXPlatform.runInFXThread(() -> imageView.setImage(writableImage)); + pixelWriter = getPixelWriter(destination, frameBuffer, width, height); } - /** - * Init this transfer for the render. - * - * @param renderer the render. - */ - public void initFor(final Renderer renderer, final boolean main) { + @Override + public void initFor(@NotNull final Renderer renderer, final boolean main) { if (main) renderer.setMainFrameBufferOverride(frameBuffer); } - /** - * @return the width. - */ + protected PixelWriter getPixelWriter(@NotNull final T destination, @NotNull final FrameBuffer frameBuffer, final int width, final int height) { + throw new UnsupportedOperationException(); + } + + @Override public int getWidth() { return width; } - /** - * @return the height. - */ + @Override public int getHeight() { return height; } - /** - * Copy the content from render to the frameByteBuffer and write this content to image view. - */ + @Override public void copyFrameBufferToImage(final RenderManager renderManager) { + while (!frameState.compareAndSet(WAITING_STATE, RUNNING_STATE)) { if (frameState.get() == DISPOSED_STATE) { return; @@ -132,13 +121,14 @@ public void copyFrameBufferToImage(final RenderManager renderManager) { byteBuffer.flip(); } - JFXPlatform.runInFXThread(this::writeImage); + JFXPlatform.runInFXThread(this::writeFrame); } /** * Write content to image. */ - private void writeImage() { + protected void writeFrame() { + while (!imageState.compareAndSet(WAITING_STATE, RUNNING_STATE)) { if (imageState.get() == DISPOSED_STATE) return; } @@ -154,8 +144,8 @@ private void writeImage() { } final WritablePixelFormat pixelFormat = PixelFormat.getByteBgraInstance(); - final PixelWriter pixelWriter = writableImage.getPixelWriter(); pixelWriter.setPixels(0, 0, width, height, pixelFormat, imageByteBuffer, width * 4); + } finally { if (!imageState.compareAndSet(RUNNING_STATE, WAITING_STATE)) { throw new RuntimeException("unknown problem with the image state"); @@ -163,17 +153,19 @@ private void writeImage() { } } - /** - * Dispose this transfer. - */ + @Override public void dispose() { while (!frameState.compareAndSet(WAITING_STATE, DISPOSING_STATE)) ; while (!imageState.compareAndSet(WAITING_STATE, DISPOSING_STATE)) ; + disposeImpl(); + frameState.compareAndSet(DISPOSING_STATE, DISPOSED_STATE); + imageState.compareAndSet(DISPOSING_STATE, DISPOSED_STATE); + } + + protected void disposeImpl() { frameBuffer.dispose(); BufferUtils.destroyDirectBuffer(frameByteBuffer); BufferUtils.destroyDirectBuffer(byteBuffer); BufferUtils.destroyDirectBuffer(imageByteBuffer); - frameState.compareAndSet(DISPOSING_STATE, DISPOSED_STATE); - imageState.compareAndSet(DISPOSING_STATE, DISPOSED_STATE); } } diff --git a/src/com/jme3x/jfx/injfx/transfer/impl/CanvasFrameTransfer.java b/src/com/jme3x/jfx/injfx/transfer/impl/CanvasFrameTransfer.java new file mode 100644 index 0000000..2ba6550 --- /dev/null +++ b/src/com/jme3x/jfx/injfx/transfer/impl/CanvasFrameTransfer.java @@ -0,0 +1,30 @@ +package com.jme3x.jfx.injfx.transfer.impl; + +import com.jme3.texture.FrameBuffer; +import com.sun.istack.internal.NotNull; + +import javafx.scene.canvas.Canvas; +import javafx.scene.image.PixelWriter; + +/** + * The class for transferring content from the jME to {@link Canvas}. + * + * @author JavaSaBr + */ +public class CanvasFrameTransfer extends AbstractFrameTransfer { + + public CanvasFrameTransfer(@NotNull final Canvas canvas, @NotNull int width, int height) { + this(canvas, null, width, height); + } + + public CanvasFrameTransfer(@NotNull final Canvas canvas, @NotNull final FrameBuffer frameBuffer, + final int width, final int height) { + super(canvas, frameBuffer, width, height); + } + + @Override + protected PixelWriter getPixelWriter(@NotNull final Canvas destination, @NotNull final FrameBuffer frameBuffer, + final int width, final int height) { + return destination.getGraphicsContext2D().getPixelWriter(); + } +} diff --git a/src/com/jme3x/jfx/injfx/transfer/impl/ImageFrameTransfer.java b/src/com/jme3x/jfx/injfx/transfer/impl/ImageFrameTransfer.java new file mode 100644 index 0000000..c869830 --- /dev/null +++ b/src/com/jme3x/jfx/injfx/transfer/impl/ImageFrameTransfer.java @@ -0,0 +1,34 @@ +package com.jme3x.jfx.injfx.transfer.impl; + +import com.jme3.texture.FrameBuffer; +import com.jme3x.jfx.util.JFXPlatform; +import com.sun.istack.internal.NotNull; + +import javafx.scene.image.ImageView; +import javafx.scene.image.PixelWriter; +import javafx.scene.image.WritableImage; + +/** + * The class for transferring a frame from jME to {@link ImageView}. + * + * @author JavaSaBr + */ +public class ImageFrameTransfer extends AbstractFrameTransfer { + + private WritableImage writableImage; + + public ImageFrameTransfer(@NotNull final ImageView imageView, @NotNull int width, int height) { + this(imageView, null, width, height); + } + + public ImageFrameTransfer(@NotNull final ImageView imageView, @NotNull final FrameBuffer frameBuffer, final int width, final int height) { + super(imageView, frameBuffer, width, height); + JFXPlatform.runInFXThread(() -> imageView.setImage(writableImage)); + } + + @Override + protected PixelWriter getPixelWriter(@NotNull final ImageView destination, @NotNull final FrameBuffer frameBuffer, final int width, final int height) { + writableImage = new WritableImage(width, height); + return writableImage.getPixelWriter(); + } +} diff --git a/test-src/com/jme3x/jfx/TestJmeToJFXCanvas.java b/test-src/com/jme3x/jfx/TestJmeToJFXCanvas.java new file mode 100644 index 0000000..2bdcb37 --- /dev/null +++ b/test-src/com/jme3x/jfx/TestJmeToJFXCanvas.java @@ -0,0 +1,136 @@ +package com.jme3x.jfx; + +import com.jme3.input.KeyInput; +import com.jme3.input.MouseInput; +import com.jme3.input.controls.ActionListener; +import com.jme3.input.controls.AnalogListener; +import com.jme3.input.controls.KeyTrigger; +import com.jme3.input.controls.MouseButtonTrigger; +import com.jme3.material.Material; +import com.jme3.math.ColorRGBA; +import com.jme3.math.Vector3f; +import com.jme3.scene.Geometry; +import com.jme3.scene.shape.Box; +import com.jme3.system.AppSettings; +import com.jme3.system.NativeLibraryLoader; +import com.jme3x.jfx.injfx.JmeToJFXApplication; +import com.jme3x.jfx.injfx.JmeToJFXIntegrator; + +import javafx.application.Application; +import javafx.scene.Scene; +import javafx.scene.canvas.Canvas; +import javafx.scene.control.Button; +import javafx.scene.layout.StackPane; +import javafx.stage.Stage; + +/** + * Created by ronn on 03.12.16. + */ +public class TestJmeToJFXCanvas extends Application { + + public static void main(final String[] args) { + launch(args); + } + + @Override + public void start(final Stage stage) throws Exception { + + final Canvas canvas = new Canvas(); + final Button button = new Button("BUTTON"); + final StackPane stackPane = new StackPane(canvas, button); + final Scene scene = new Scene(stackPane, 600, 600); + + canvas.widthProperty().bind(stackPane.widthProperty()); + canvas.heightProperty().bind(stackPane.heightProperty()); + + stage.setTitle("Test"); + stage.setScene(scene); + stage.show(); + + final JmeToJFXApplication application = makeJmeApplication(stage, 80); + + JmeToJFXIntegrator.startAndBind(application, canvas, Thread::new); + } + + private static JmeToJFXApplication makeJmeApplication(Stage stage, int framerate) { + final AppSettings settings = new AppSettings(true); + JmeToJFXIntegrator.prepareSettings(settings, 60); + + JmeToJFXApplication app = new JmeToJFXApplication() { + + protected Geometry player; + Boolean isRunning = true; + + @Override + public void start() { + + if ("LWJGL".equals(settings.getAudioRenderer())) { + NativeLibraryLoader.loadNativeLibrary("openal-lwjgl3", true); + } + + NativeLibraryLoader.loadNativeLibrary("lwjgl3", true); + NativeLibraryLoader.loadNativeLibrary("glfw-lwjgl3", true); + NativeLibraryLoader.loadNativeLibrary("jemalloc-lwjgl3", true); + NativeLibraryLoader.loadNativeLibrary("jinput", true); + NativeLibraryLoader.loadNativeLibrary("jinput-dx8", true); + + super.start(); + } + + @Override + public void simpleInitApp() { + Box b = new Box(1, 1, 1); + player = new Geometry("Player", b); + Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); + mat.setColor("Color", ColorRGBA.Blue); + player.setMaterial(mat); + rootNode.attachChild(player); + initKeys(); // load my custom keybinding + } + + /** Custom Keybinding: Map named actions to inputs. */ + private void initKeys() { + /** You can map one or several inputs to one named mapping. */ + inputManager.addMapping("Pause", new KeyTrigger(keyInput.KEY_P)); + inputManager.addMapping("Left", new KeyTrigger(KeyInput.KEY_J)); + inputManager.addMapping("Right", new KeyTrigger(KeyInput.KEY_K)); + inputManager.addMapping("Rotate", new KeyTrigger(KeyInput.KEY_SPACE), // spacebar! + new MouseButtonTrigger(MouseInput.BUTTON_LEFT)); // left click! + /** Add the named mappings to the action listeners. */ + inputManager.addListener(actionListener, "Pause"); + inputManager.addListener(analogListener, "Left", "Right", "Rotate"); + } + + /** Use this listener for KeyDown/KeyUp events */ + private ActionListener actionListener = new ActionListener() { + public void onAction(String name, boolean keyPressed, float tpf) { + if (name.equals("Pause") && !keyPressed) { + isRunning = !isRunning; + } + } + }; + + /** Use this listener for continuous events */ + private AnalogListener analogListener = new AnalogListener() { + public void onAnalog(String name, float value, float tpf) { + if (isRunning) { + if (name.equals("Rotate")) { + player.rotate(0, value, 0); + } + if (name.equals("Right")) { + player.move((new Vector3f(value, 0, 0))); + } + if (name.equals("Left")) { + player.move(new Vector3f(-value, 0, 0)); + } + } else { + System.out.println("Press P to unpause."); + } + } + }; + }; + app.setSettings(settings); + app.setShowSettings(false); + return app; + } +} From 3d1e6f0763fe17bf3afd8f9cd905d7b3800d7ace Mon Sep 17 00:00:00 2001 From: javasabr Date: Tue, 27 Dec 2016 16:48:15 +0300 Subject: [PATCH 20/24] updated tests --- test-src/com/jme3x/jfx/TestJmeToJFXCanvas.java | 1 + .../jfx/{TestJmeToJFX.java => TestJmeToJFXImageView.java} | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) rename test-src/com/jme3x/jfx/{TestJmeToJFX.java => TestJmeToJFXImageView.java} (97%) diff --git a/test-src/com/jme3x/jfx/TestJmeToJFXCanvas.java b/test-src/com/jme3x/jfx/TestJmeToJFXCanvas.java index 2bdcb37..bac4da4 100644 --- a/test-src/com/jme3x/jfx/TestJmeToJFXCanvas.java +++ b/test-src/com/jme3x/jfx/TestJmeToJFXCanvas.java @@ -46,6 +46,7 @@ public void start(final Stage stage) throws Exception { stage.setTitle("Test"); stage.setScene(scene); stage.show(); + stage.setOnCloseRequest(event -> System.exit(0)); final JmeToJFXApplication application = makeJmeApplication(stage, 80); diff --git a/test-src/com/jme3x/jfx/TestJmeToJFX.java b/test-src/com/jme3x/jfx/TestJmeToJFXImageView.java similarity index 97% rename from test-src/com/jme3x/jfx/TestJmeToJFX.java rename to test-src/com/jme3x/jfx/TestJmeToJFXImageView.java index b6a2ed4..81dffbf 100644 --- a/test-src/com/jme3x/jfx/TestJmeToJFX.java +++ b/test-src/com/jme3x/jfx/TestJmeToJFXImageView.java @@ -26,7 +26,7 @@ /** * Created by ronn on 03.12.16. */ -public class TestJmeToJFX extends Application { +public class TestJmeToJFXImageView extends Application { public static void main(final String[] args) { launch(args); @@ -46,6 +46,7 @@ public void start(final Stage stage) throws Exception { stage.setTitle("Test"); stage.setScene(scene); stage.show(); + stage.setOnCloseRequest(event -> System.exit(0)); final JmeToJFXApplication application = makeJmeApplication(stage, 80); From 2eedb16d3461d814ec6ee26c922acc8fd3c71145 Mon Sep 17 00:00:00 2001 From: javasabr Date: Tue, 27 Dec 2016 16:57:02 +0300 Subject: [PATCH 21/24] builded result jar --- build/jfx-1.4.0.jar | Bin 32291 -> 39466 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/build/jfx-1.4.0.jar b/build/jfx-1.4.0.jar index 0647d10bd735713e97ad0419f7abc57c5db6fd7b..1e28d23cc8aab4acfe6302af7209c7b8340d7fe7 100644 GIT binary patch delta 17310 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 delta 10483 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 From 5cf19f08a6dc9d290ddff4b4905f1261bec3f2d4 Mon Sep 17 00:00:00 2001 From: javasabr Date: Tue, 3 Jan 2017 09:27:26 +0300 Subject: [PATCH 22/24] small updates --- build/jfx-1.4.0.jar | Bin 39466 -> 39463 bytes .../jme3x/jfx/injfx/JmeToJFXApplication.java | 4 +--- .../jme3x/jfx/injfx/JmeToJFXIntegrator.java | 4 ++-- .../com/jme3x/jfx/TestJmeToJFXCanvas.java | 4 ++-- 4 files changed, 5 insertions(+), 7 deletions(-) diff --git a/build/jfx-1.4.0.jar b/build/jfx-1.4.0.jar index 1e28d23cc8aab4acfe6302af7209c7b8340d7fe7..339ec7d97944075ef6b5c685aea8aa93139b2c4b 100644 GIT binary patch delta 3096 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 System.exit(0)); - final JmeToJFXApplication application = makeJmeApplication(stage, 80); + final JmeToJFXApplication application = makeJmeApplication(stage, 1); JmeToJFXIntegrator.startAndBind(application, canvas, Thread::new); } private static JmeToJFXApplication makeJmeApplication(Stage stage, int framerate) { final AppSettings settings = new AppSettings(true); - JmeToJFXIntegrator.prepareSettings(settings, 60); + JmeToJFXIntegrator.prepareSettings(settings, framerate); JmeToJFXApplication app = new JmeToJFXApplication() { From 60ed9188c028d580696b98f58d43f1d8f7ab56c9 Mon Sep 17 00:00:00 2001 From: javasabr Date: Tue, 3 Jan 2017 09:38:41 +0300 Subject: [PATCH 23/24] updated --- build/jfx-1.4.0.jar | Bin 39463 -> 40121 bytes .../jfx/injfx/ApplicationThreadExecutor.java | 7 +- .../jfx/injfx/JmeOffscreenSurfaceContext.java | 40 +++++++++-- .../jme3x/jfx/injfx/JmeToJFXIntegrator.java | 12 +++- src/com/jme3x/jfx/injfx/input/JFXInput.java | 23 +++++-- .../jme3x/jfx/injfx/input/JFXKeyInput.java | 16 +++-- .../jme3x/jfx/injfx/input/JFXMouseInput.java | 30 ++++++--- .../CanvasFrameTransferSceneProcessor.java | 3 +- .../ImageViewFrameTransferSceneProcessor.java | 3 +- src/com/jme3x/jfx/util/JFXPlatform.java | 5 +- .../jme3x/jfx/util/os/OperatingSystem.java | 2 +- .../jfx/util/os/OperatingSystemResolver.java | 63 ++++++------------ .../com/jme3x/jfx/TestJmeToJFXCanvas.java | 2 +- 13 files changed, 136 insertions(+), 70 deletions(-) diff --git a/build/jfx-1.4.0.jar b/build/jfx-1.4.0.jar index 339ec7d97944075ef6b5c685aea8aa93139b2c4b..2b35877b42e0ae5c45a485ca20873305baa7503a 100644 GIT binary patch delta 23102 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 Y0H`UV+{!{gpuYVq-@dr)5qEe02bN$~eE waitTasks; /** * THe list of tasks to execute. */ + @NotNull private final Array execute; public ApplicationThreadExecutor() { @@ -38,7 +43,7 @@ public ApplicationThreadExecutor() { * * @param task the new task. */ - public void addToExecute(final Runnable task) { + public void addToExecute(@NotNull final Runnable task) { ArrayUtils.runInWriteLock(waitTasks, task, Array::add); } diff --git a/src/com/jme3x/jfx/injfx/JmeOffscreenSurfaceContext.java b/src/com/jme3x/jfx/injfx/JmeOffscreenSurfaceContext.java index e5e66b2..7f75546 100644 --- a/src/com/jme3x/jfx/injfx/JmeOffscreenSurfaceContext.java +++ b/src/com/jme3x/jfx/injfx/JmeOffscreenSurfaceContext.java @@ -11,6 +11,9 @@ import com.jme3.system.Timer; import com.jme3x.jfx.injfx.input.JFXKeyInput; import com.jme3x.jfx.injfx.input.JFXMouseInput; +import com.sun.istack.internal.NotNull; + +import javax.annotation.Nullable; /** * The implementation of the {@link JmeContext} for integrating to JavaFX. @@ -19,9 +22,21 @@ */ public class JmeOffscreenSurfaceContext implements JmeContext { + /** + * The settings. + */ protected final AppSettings settings; + /** + * The key input. + */ + @NotNull protected final JFXKeyInput keyInput; + + /** + * The mouse input. + */ + @NotNull protected final JFXMouseInput mouseInput; /** @@ -76,75 +91,92 @@ public void setWidth(final int width) { this.width = width; } + /** + * @return new settings. + */ + @NotNull protected AppSettings createSettings() { final AppSettings settings = new AppSettings(true); settings.setRenderer(AppSettings.LWJGL_OPENGL3); return settings; } + /** + * @return new context/ + */ + @NotNull protected JmeContext createBackgroundContext() { return JmeSystem.newContext(settings, Type.OffscreenSurface); } + @NotNull @Override public Type getType() { return Type.OffscreenSurface; } @Override - public void setSettings(final AppSettings settings) { + public void setSettings(@NotNull final AppSettings settings) { this.settings.copyFrom(settings); this.settings.setRenderer(AppSettings.LWJGL_OPENGL3); this.backgroundContext.setSettings(settings); } @Override - public void setSystemListener(final SystemListener listener) { + public void setSystemListener(@NotNull final SystemListener listener) { backgroundContext.setSystemListener(listener); } + @NotNull @Override public AppSettings getSettings() { return settings; } + @NotNull @Override public Renderer getRenderer() { return backgroundContext.getRenderer(); } + @Nullable @Override public Context getOpenCLContext() { return null; } + @NotNull @Override public JFXMouseInput getMouseInput() { return mouseInput; } + @NotNull @Override public JFXKeyInput getKeyInput() { return keyInput; } + @Nullable @Override public JoyInput getJoyInput() { return null; } + @Nullable @Override public TouchInput getTouchInput() { return null; } + @NotNull @Override public Timer getTimer() { return backgroundContext.getTimer(); } @Override - public void setTitle(final String title) { + public void setTitle(@NotNull final String title) { } @Override @@ -174,7 +206,7 @@ public void restart() { } @Override - public void destroy(boolean waitFor) { + public void destroy(final boolean waitFor) { if (backgroundContext == null) throw new IllegalStateException("Not created"); // destroy wrapped context backgroundContext.destroy(waitFor); diff --git a/src/com/jme3x/jfx/injfx/JmeToJFXIntegrator.java b/src/com/jme3x/jfx/injfx/JmeToJFXIntegrator.java index 7cfbed6..3fdce45 100644 --- a/src/com/jme3x/jfx/injfx/JmeToJFXIntegrator.java +++ b/src/com/jme3x/jfx/injfx/JmeToJFXIntegrator.java @@ -22,12 +22,13 @@ */ public class JmeToJFXIntegrator { - public static void prepareSettings(final AppSettings settings, final int frameRate) { + public static void prepareSettings(@NotNull final AppSettings settings, final int frameRate) { settings.setFullscreen(false); settings.setFrameRate(max(1, min(100, frameRate))); settings.setCustomRenderer(JmeOffscreenSurfaceContext.class); } + @NotNull public static FrameTransferSceneProcessor startAndBind(@NotNull final JmeToJFXApplication application, @NotNull final ImageView imageView, @NotNull final Function factory) { factory.apply(application::start).start(); @@ -36,6 +37,7 @@ public static FrameTransferSceneProcessor startAndBind(@NotNull final JmeToJFXAp return processor; } + @NotNull public static FrameTransferSceneProcessor startAndBind(@NotNull final JmeToJFXApplication application, @NotNull final Canvas canvas, @NotNull final Function factory) { factory.apply(application::start).start(); @@ -44,18 +46,21 @@ public static FrameTransferSceneProcessor startAndBind(@NotNull final JmeToJFXAp return processor; } + @NotNull public static FrameTransferSceneProcessor bind(@NotNull final JmeToJFXApplication application, @NotNull final ImageView imageView) { final ImageViewFrameTransferSceneProcessor processor = new ImageViewFrameTransferSceneProcessor(); processor.bind(imageView, application); return processor; } + @NotNull public static FrameTransferSceneProcessor bind(@NotNull final JmeToJFXApplication application, @NotNull final Canvas canvas) { final CanvasFrameTransferSceneProcessor processor = new CanvasFrameTransferSceneProcessor(); processor.bind(canvas, application); return processor; } + @NotNull public static FrameTransferSceneProcessor bind(@NotNull final JmeToJFXApplication application, @NotNull final ImageView imageView, @NotNull final ViewPort viewPort) { final ImageViewFrameTransferSceneProcessor processor = new ImageViewFrameTransferSceneProcessor(); @@ -63,6 +68,7 @@ public static FrameTransferSceneProcessor bind(@NotNull final JmeToJFXApplicatio return processor; } + @NotNull public static FrameTransferSceneProcessor bind(@NotNull final JmeToJFXApplication application, @NotNull final Canvas canvas, @NotNull final ViewPort viewPort) { final CanvasFrameTransferSceneProcessor processor = new CanvasFrameTransferSceneProcessor(); @@ -70,6 +76,7 @@ public static FrameTransferSceneProcessor bind(@NotNull final JmeToJFXApplicatio return processor; } + @NotNull public static FrameTransferSceneProcessor bind(@NotNull final JmeToJFXApplication application, @NotNull final ImageView imageView, @NotNull final Node inputNode) { final ImageViewFrameTransferSceneProcessor processor = new ImageViewFrameTransferSceneProcessor(); @@ -77,6 +84,7 @@ public static FrameTransferSceneProcessor bind(@NotNull final JmeToJFXApplicatio return processor; } + @NotNull public static FrameTransferSceneProcessor bind(@NotNull final JmeToJFXApplication application, @NotNull final Canvas canvas, @NotNull final Node inputNode) { final CanvasFrameTransferSceneProcessor processor = new CanvasFrameTransferSceneProcessor(); @@ -84,6 +92,7 @@ public static FrameTransferSceneProcessor bind(@NotNull final JmeToJFXApplicatio return processor; } + @NotNull public static FrameTransferSceneProcessor bind(@NotNull final JmeToJFXApplication application, @NotNull final ImageView imageView, @NotNull final Node inputNode, @@ -93,6 +102,7 @@ public static FrameTransferSceneProcessor bind(@NotNull final JmeToJFXApplicatio return processor; } + @NotNull public static FrameTransferSceneProcessor bind(@NotNull final JmeToJFXApplication application, @NotNull final Canvas canvas, @NotNull final Node inputNode, diff --git a/src/com/jme3x/jfx/injfx/input/JFXInput.java b/src/com/jme3x/jfx/injfx/input/JFXInput.java index a9d18db..75ebb68 100644 --- a/src/com/jme3x/jfx/injfx/input/JFXInput.java +++ b/src/com/jme3x/jfx/injfx/input/JFXInput.java @@ -4,6 +4,7 @@ import com.jme3.input.RawInputListener; import com.jme3x.jfx.injfx.ApplicationThreadExecutor; import com.jme3x.jfx.injfx.JmeOffscreenSurfaceContext; +import com.sun.istack.internal.NotNull; import java.util.Objects; @@ -19,21 +20,36 @@ public class JFXInput implements Input { protected static final ApplicationThreadExecutor EXECUTOR = ApplicationThreadExecutor.getInstance(); + /** + * The context. + */ protected final JmeOffscreenSurfaceContext context; + /** + * The raw listener. + */ protected RawInputListener listener; + /** + * The input node. + */ protected Node node; + /** + * The scene. + */ protected Scene scene; + /** + * Initializes is it. + */ protected boolean initialized; - public JFXInput(final JmeOffscreenSurfaceContext context) { + public JFXInput(@NotNull final JmeOffscreenSurfaceContext context) { this.context = context; } - public void bind(final Node node) { + public void bind(@NotNull final Node node) { this.node = node; this.scene = node.getScene(); Objects.requireNonNull(this.node, "ImageView can' be null"); @@ -53,7 +69,6 @@ public void initialize() { } protected void initializeImpl() { - } @Override @@ -76,7 +91,7 @@ public boolean isInitialized() { } @Override - public void setInputListener(final RawInputListener listener) { + public void setInputListener(@NotNull final RawInputListener listener) { this.listener = listener; } diff --git a/src/com/jme3x/jfx/injfx/input/JFXKeyInput.java b/src/com/jme3x/jfx/injfx/input/JFXKeyInput.java index 44d971d..707d9b3 100644 --- a/src/com/jme3x/jfx/injfx/input/JFXKeyInput.java +++ b/src/com/jme3x/jfx/injfx/input/JFXKeyInput.java @@ -5,6 +5,7 @@ import com.jme3.input.KeyInput; import com.jme3.input.event.KeyInputEvent; import com.jme3x.jfx.injfx.JmeOffscreenSurfaceContext; +import com.sun.istack.internal.NotNull; import java.util.HashMap; import java.util.Map; @@ -23,6 +24,7 @@ */ public class JFXKeyInput extends JFXInput implements KeyInput { + @NotNull private static final Map KEY_CODE_TO_JME = new HashMap<>(); static { @@ -136,9 +138,13 @@ public class JFXKeyInput extends JFXInput implements KeyInput { KEY_CODE_TO_JME.put(KeyCode.META, KEY_RCONTROL); } + @NotNull private final EventHandler processKeyPressed = this::processKeyPressed; + + @NotNull private final EventHandler processKeyReleased = this::processKeyReleased; + @NotNull private final LinkedList keyInputEvents; public JFXKeyInput(final JmeOffscreenSurfaceContext context) { @@ -147,7 +153,7 @@ public JFXKeyInput(final JmeOffscreenSurfaceContext context) { } @Override - public void bind(final Node node) { + public void bind(@NotNull final Node node) { super.bind(node); node.addEventHandler(KeyEvent.KEY_PRESSED, processKeyPressed); node.addEventHandler(KeyEvent.KEY_RELEASED, processKeyReleased); @@ -162,15 +168,15 @@ public void unbind() { super.unbind(); } - private void processKeyReleased(final KeyEvent keyEvent) { + private void processKeyReleased(@NotNull final KeyEvent keyEvent) { onKeyEvent(keyEvent, false); } - private void processKeyPressed(final KeyEvent keyEvent) { + private void processKeyPressed(@NotNull final KeyEvent keyEvent) { onKeyEvent(keyEvent, true); } - private void onKeyEvent(final KeyEvent keyEvent, final boolean pressed) { + private void onKeyEvent(@NotNull final KeyEvent keyEvent, final boolean pressed) { final int code = convertKeyCode(keyEvent.getCode()); final String character = keyEvent.getText(); @@ -189,7 +195,7 @@ protected void updateImpl() { } } - private int convertKeyCode(final KeyCode keyCode) { + private int convertKeyCode(@NotNull final KeyCode keyCode) { final Integer code = KEY_CODE_TO_JME.get(keyCode); return code == null ? KEY_UNKNOWN : code; } diff --git a/src/com/jme3x/jfx/injfx/input/JFXMouseInput.java b/src/com/jme3x/jfx/injfx/input/JFXMouseInput.java index 148525a..86c70a8 100644 --- a/src/com/jme3x/jfx/injfx/input/JFXMouseInput.java +++ b/src/com/jme3x/jfx/injfx/input/JFXMouseInput.java @@ -7,6 +7,7 @@ import com.jme3.input.event.MouseButtonEvent; import com.jme3.input.event.MouseMotionEvent; import com.jme3x.jfx.injfx.JmeOffscreenSurfaceContext; +import com.sun.istack.internal.NotNull; import java.util.HashMap; import java.util.Map; @@ -26,6 +27,7 @@ */ public class JFXMouseInput extends JFXInput implements MouseInput { + @NotNull private static final Map MOUSE_BUTTON_TO_JME = new HashMap<>(); static { @@ -39,26 +41,36 @@ public class JFXMouseInput extends JFXInput implements MouseInput { */ private static final int WHEEL_SCALE = 10; + @NotNull private final EventHandler processMotion = this::processMotion; + + @NotNull private final EventHandler processPressed = this::processPressed; + + @NotNull private final EventHandler processReleased = this::processReleased; + + @NotNull private final EventHandler processScroll = this::processScroll; + @NotNull private final LinkedList mouseMotionEvents; + + @NotNull private final LinkedList mouseButtonEvents; private int mouseX; private int mouseY; private int mouseWheel; - public JFXMouseInput(final JmeOffscreenSurfaceContext context) { + public JFXMouseInput(@NotNull final JmeOffscreenSurfaceContext context) { super(context); mouseMotionEvents = newLinkedList(MouseMotionEvent.class); mouseButtonEvents = newLinkedList(MouseButtonEvent.class); } @Override - public void bind(final Node node) { + public void bind(@NotNull final Node node) { super.bind(node); node.addEventHandler(MouseEvent.MOUSE_MOVED, processMotion); node.addEventHandler(MouseEvent.MOUSE_PRESSED, processPressed); @@ -92,28 +104,28 @@ protected void updateImpl() { /** * Handle the scroll event. */ - private void processScroll(final ScrollEvent mouseEvent) { + private void processScroll(@NotNull final ScrollEvent mouseEvent) { onWheelScroll(mouseEvent.getDeltaX() * WHEEL_SCALE, mouseEvent.getDeltaY() * WHEEL_SCALE); } /** * Handle the mouse released event. */ - private void processReleased(final MouseEvent mouseEvent) { + private void processReleased(@NotNull final MouseEvent mouseEvent) { onMouseButton(mouseEvent.getButton(), false); } /** * Handle the mouse pressed event. */ - private void processPressed(final MouseEvent mouseEvent) { + private void processPressed(@NotNull final MouseEvent mouseEvent) { onMouseButton(mouseEvent.getButton(), true); } /** * Handle the mouse motion event. */ - private void processMotion(final MouseEvent mouseEvent) { + private void processMotion(@NotNull final MouseEvent mouseEvent) { onCursorPos(mouseEvent.getSceneX(), mouseEvent.getSceneY()); } @@ -151,7 +163,7 @@ private void onCursorPos(final double xpos, final double ypos) { EXECUTOR.addToExecute(() -> mouseMotionEvents.add(mouseMotionEvent)); } - private void onMouseButton(final MouseButton button, final boolean pressed) { + private void onMouseButton(@NotNull final MouseButton button, final boolean pressed) { final MouseButtonEvent mouseButtonEvent = new MouseButtonEvent(convertButton(button), pressed, mouseX, mouseY); mouseButtonEvent.setTime(getInputTimeNanos()); @@ -159,7 +171,7 @@ private void onMouseButton(final MouseButton button, final boolean pressed) { EXECUTOR.addToExecute(() -> mouseButtonEvents.add(mouseButtonEvent)); } - private int convertButton(final MouseButton button) { + private int convertButton(@NotNull final MouseButton button) { final Integer result = MOUSE_BUTTON_TO_JME.get(button); return result == null ? 0 : result; } @@ -174,6 +186,6 @@ public int getButtonCount() { } @Override - public void setNativeCursor(final JmeCursor cursor) { + public void setNativeCursor(@NotNull final JmeCursor cursor) { } } diff --git a/src/com/jme3x/jfx/injfx/processor/CanvasFrameTransferSceneProcessor.java b/src/com/jme3x/jfx/injfx/processor/CanvasFrameTransferSceneProcessor.java index 69ddcee..198f9df 100644 --- a/src/com/jme3x/jfx/injfx/processor/CanvasFrameTransferSceneProcessor.java +++ b/src/com/jme3x/jfx/injfx/processor/CanvasFrameTransferSceneProcessor.java @@ -33,7 +33,8 @@ protected boolean isPreserveRatio() { } @Override - protected void bindDestination(@NotNull final JmeToJFXApplication application, @NotNull final Canvas destination, @NotNull final Node inputNode) { + protected void bindDestination(@NotNull final JmeToJFXApplication application, @NotNull final Canvas destination, + @NotNull final Node inputNode) { super.bindDestination(application, destination, inputNode); destination.setScaleY(-1.0); } diff --git a/src/com/jme3x/jfx/injfx/processor/ImageViewFrameTransferSceneProcessor.java b/src/com/jme3x/jfx/injfx/processor/ImageViewFrameTransferSceneProcessor.java index 4dd227d..4d2712a 100644 --- a/src/com/jme3x/jfx/injfx/processor/ImageViewFrameTransferSceneProcessor.java +++ b/src/com/jme3x/jfx/injfx/processor/ImageViewFrameTransferSceneProcessor.java @@ -31,7 +31,8 @@ protected boolean isPreserveRatio() { } @Override - protected void bindDestination(@NotNull final JmeToJFXApplication application, @NotNull final ImageView destination, @NotNull final Node inputNode) { + protected void bindDestination(@NotNull final JmeToJFXApplication application, @NotNull final ImageView destination, + @NotNull final Node inputNode) { super.bindDestination(application, destination, inputNode); destination.setScaleY(-1.0); } diff --git a/src/com/jme3x/jfx/util/JFXPlatform.java b/src/com/jme3x/jfx/util/JFXPlatform.java index 80c69da..bc9ff0d 100644 --- a/src/com/jme3x/jfx/util/JFXPlatform.java +++ b/src/com/jme3x/jfx/util/JFXPlatform.java @@ -1,5 +1,7 @@ package com.jme3x.jfx.util; +import com.sun.istack.internal.NotNull; + import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodType; @@ -23,6 +25,7 @@ public class JFXPlatform { /** * The example of getting a method handle. */ + @NotNull private static final MethodHandle STARTUP_HANDLE; static { @@ -45,7 +48,7 @@ public class JFXPlatform { /** * Execute the task in JavaFX thread. */ - public static void runInFXThread(final Runnable task) { + public static void runInFXThread(@NotNull final Runnable task) { if (Platform.isFxApplicationThread()) { task.run(); } else { diff --git a/src/com/jme3x/jfx/util/os/OperatingSystem.java b/src/com/jme3x/jfx/util/os/OperatingSystem.java index f8948bc..abee3be 100644 --- a/src/com/jme3x/jfx/util/os/OperatingSystem.java +++ b/src/com/jme3x/jfx/util/os/OperatingSystem.java @@ -1,7 +1,7 @@ package com.jme3x.jfx.util.os; /** - * @author Ronn + * @author JavaSaBr */ public class OperatingSystem { diff --git a/src/com/jme3x/jfx/util/os/OperatingSystemResolver.java b/src/com/jme3x/jfx/util/os/OperatingSystemResolver.java index 1e89dda..0a06170 100644 --- a/src/com/jme3x/jfx/util/os/OperatingSystemResolver.java +++ b/src/com/jme3x/jfx/util/os/OperatingSystemResolver.java @@ -3,9 +3,10 @@ import static java.lang.Double.parseDouble; import static java.lang.Integer.parseInt; +import com.sun.istack.internal.NotNull; + import java.io.File; import java.io.FileNotFoundException; -import java.io.FilenameFilter; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -13,10 +14,12 @@ import java.util.Map; import java.util.Scanner; +import javax.annotation.Nullable; + /** * Name resolver OS distribution. * - * @author Ronn + * @author JavaSaBr */ public class OperatingSystemResolver { @@ -34,10 +37,10 @@ public class OperatingSystemResolver { private static final String VERSION = System.getProperty("os.version"); private static final String ARCH = System.getProperty("os.arch"); - private static final Map MAC_OS_VERSION_MAPPING = new HashMap(); - private static final Map DARWIN_VERSION_MAPPING = new HashMap(); + private static final Map MAC_OS_VERSION_MAPPING = new HashMap<>(); + private static final Map DARWIN_VERSION_MAPPING = new HashMap<>(); - private static final List LINUX_VERSION_NAMES = new ArrayList(); + private static final List LINUX_VERSION_NAMES = new ArrayList<>(); static { MAC_OS_VERSION_MAPPING.put(10.0, "Puma"); @@ -66,18 +69,13 @@ public class OperatingSystemResolver { LINUX_VERSION_NAMES.addAll(Arrays.asList("Linux", "SunOS")); } - private String findFile(final File dir, final String postfix) { - - final File[] files = dir.listFiles((FilenameFilter) (directory, filename) -> filename.endsWith(postfix)); - - if (files.length > 0) { - return files[0].getAbsolutePath(); - } - + private String findFile(@NotNull final File dir, @NotNull final String postfix) { + final File[] files = dir.listFiles((directory, filename) -> filename.endsWith(postfix)); + if (files.length > 0) return files[0].getAbsolutePath(); return null; } - protected void resolve(final OperatingSystem system) { + protected void resolve(@NotNull final OperatingSystem system) { system.setName(NAME); system.setArch(ARCH); @@ -103,28 +101,20 @@ else if (NAME.startsWith("Mac")) { } } - private void resolveDarwinOs(final OperatingSystem system) { - + private void resolveDarwinOs(@NotNull final OperatingSystem system) { final String[] versions = VERSION.split("\\."); - system.setDistribution("OS X " + DARWIN_VERSION_MAPPING.get(parseInt(versions[0])) + " (" + VERSION + ")"); } - private void resolveLinuxOs(final OperatingSystem system) { + private void resolveLinuxOs(@NotNull final OperatingSystem system) { // The most likely is to have a LSB compliant distro resolveNameFromLsbRelease(system); - - if (system.getDistribution() != null) { - return; - } + if (system.getDistribution() != null) return; // Generic Linux platform name resolveNameFromFile(system, FILE_ETC_SYSTEM_RELEASE); - - if (system.getDistribution() != null) { - return; - } + if (system.getDistribution() != null) return; final File dir = new File(FILE_ETC); @@ -166,7 +156,7 @@ private void resolveLinuxOs(final OperatingSystem system) { } } - private void resolveMacOs(final OperatingSystem system) { + private void resolveMacOs(@NotNull final OperatingSystem system) { final String[] versions = VERSION.split("\\."); @@ -179,17 +169,11 @@ private void resolveMacOs(final OperatingSystem system) { } } - private void resolveNameFromFile(final OperatingSystem system, final String filename) { - - if (filename == null) { - return; - } + private void resolveNameFromFile(@NotNull final OperatingSystem system, @Nullable final String filename) { + if (filename == null) return; final File file = new File(filename); - - if (!file.exists()) { - return; - } + if (!file.exists()) return; String lastLine = null; @@ -220,13 +204,10 @@ private void resolveNameFromFile(final OperatingSystem system, final String file } } - private void resolveNameFromLsbRelease(final OperatingSystem system) { + private void resolveNameFromLsbRelease(@NotNull final OperatingSystem system) { final File file = new File(FILE_ETC_LSB_RELEASE); - - if (!file.exists()) { - return; - } + if (!file.exists()) return; String description = null; String codename = null; diff --git a/test-src/com/jme3x/jfx/TestJmeToJFXCanvas.java b/test-src/com/jme3x/jfx/TestJmeToJFXCanvas.java index 09de6bf..6c30fa8 100644 --- a/test-src/com/jme3x/jfx/TestJmeToJFXCanvas.java +++ b/test-src/com/jme3x/jfx/TestJmeToJFXCanvas.java @@ -48,7 +48,7 @@ public void start(final Stage stage) throws Exception { stage.show(); stage.setOnCloseRequest(event -> System.exit(0)); - final JmeToJFXApplication application = makeJmeApplication(stage, 1); + final JmeToJFXApplication application = makeJmeApplication(stage, 40); JmeToJFXIntegrator.startAndBind(application, canvas, Thread::new); } From 5468ec5a56ea823b41ef956bb52b3f8e3807b032 Mon Sep 17 00:00:00 2001 From: MedvedevDmitry Date: Thu, 19 Jan 2017 15:34:53 +0300 Subject: [PATCH 24/24] Update README.md --- README.md | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/README.md b/README.md index bbf83d0..a7e4d98 100755 --- a/README.md +++ b/README.md @@ -5,3 +5,71 @@ JFX Gui bridge for JME with usefull utilities for common usecases License is the New BSD License (same as JME3) http://opensource.org/licenses/BSD-3-Clause + +How to use: +* 1. You need to create FXContainer inside the method simpleInitApp() of SimpleApplication. + +```` +final ProtonCursorProvider cursorProvider = new ProtonCursorProvider(this, assetManager, inputManager); + +for (final CursorType type : CursorType.values()) { + cursorProvider.setup(type); +} + +fxContainer = JmeFxContainer.install(this, guiNode, cursorProvider); +```` + +if you want to use simple default arrow cursor you should use this: +```` +fxContainer = JmeFxContainer.install(this, guiNode, null); +```` + +* 2. Then you must create javaFX scene and set it on the fx container to build your UI. +You can use FXML if you prefer it like this: +```` +FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/hud.fxml")); +BorderPane root = fxmlLoader.load(); +int width = app.getContext().getSettings().getWidth(); +int height = app.getContext().getSettings().getHeight(); +root.setPrefSize(width, height); +Hud hud = fxmlLoader.getController(); +Group group = new Group(root); +Scene scene = new Scene(group, Color.TRANSPARENT); +fxContainer.setScene(scene, group); +```` + +where Hud is controller class for example + +```` +public class Hud implements Initializable { + @FXML + public BorderPane root; + + @Override + public void initialize(URL location, ResourceBundle resources) { + } +} +```` +Ofc hud.fxml should be accessible in resources, valid and points to Hud class. +If you do not want to use FXML your code can be even simpler: + +```` +BorderPane root = new BorderPane(); +int width = app.getContext().getSettings().getWidth(); +int height = app.getContext().getSettings().getHeight(); +root.setPrefSize(width, height); +Group group = new Group(root); +Scene scene = new Scene(group, Color.TRANSPARENT); +fxContainer.setScene(scene, group); +```` + +* 3. From now you are able to get transparent JavaFX scene and use it as in classic JavaFX application. +```` +fxContainer.getScene(); +```` + +* 3. Also you need to add calling a draw method in the main loop(the method update() of your application) + +```` +if (fxContainer.isNeedWriteToJME()) fxContainer.writeToJME(); +````