diff --git a/example/build.gradle b/example/build.gradle index 8f3f5c3..a79cec1 100644 --- a/example/build.gradle +++ b/example/build.gradle @@ -8,8 +8,12 @@ repositories { application { mainClass = 'Main' - if (libPath) { - applicationDefaultJvmArgs = ["-Dimgui.library.path=$libPath"] + try { + if (libPath) { + applicationDefaultJvmArgs = ["-Dimgui.library.path=$libPath"] + } + } catch (ignored) { + // ignore } } diff --git a/imgui-binding/src/main/java/imgui/ImDrawData.java b/imgui-binding/src/main/java/imgui/ImDrawData.java index 822d035..fe67a63 100644 --- a/imgui-binding/src/main/java/imgui/ImDrawData.java +++ b/imgui-binding/src/main/java/imgui/ImDrawData.java @@ -71,7 +71,7 @@ public final class ImDrawData extends ImGuiStruct { * Ignore if never using images or multiple fonts atlas. */ public native int getCmdListCmdBufferTextureId(int cmdListIdx, int cmdBufferIdx); /* - return (intptr_t)IM_DRAW_DATA->CmdLists[cmdListIdx]->CmdBuffer[cmdBufferIdx].TextureId; + return (intptr_t)IM_DRAW_DATA->CmdLists[cmdListIdx]->CmdBuffer[cmdBufferIdx].GetTexID(); */ /** diff --git a/imgui-binding/src/main/java/imgui/ImGui.java b/imgui-binding/src/main/java/imgui/ImGui.java index 080c6b6..25abf8f 100644 --- a/imgui-binding/src/main/java/imgui/ImGui.java +++ b/imgui-binding/src/main/java/imgui/ImGui.java @@ -4718,24 +4718,24 @@ public class ImGui { // - Use DockSpace() to create an explicit dock node _within_ an existing window. See Docking demo for details. // - DockSpace() needs to be submitted _before_ any window they can host. If you use a dockspace, submit it early in your app. - public static void dockSpace(int imGuiID) { - nDockSpace(imGuiID, 0, 0, 0, 0); + public static int dockSpace(int imGuiID) { + return nDockSpace(imGuiID, 0, 0, 0, 0); } - public static void dockSpace(int imGuiID, float sizeX, float sizeY) { - nDockSpace(imGuiID, sizeX, sizeY, 0, 0); + public static int dockSpace(int imGuiID, float sizeX, float sizeY) { + return nDockSpace(imGuiID, sizeX, sizeY, 0, 0); } - public static void dockSpace(int imGuiID, float sizeX, float sizeY, int imGuiDockNodeFlags) { - nDockSpace(imGuiID, sizeX, sizeY, imGuiDockNodeFlags, 0); + public static int dockSpace(int imGuiID, float sizeX, float sizeY, int imGuiDockNodeFlags) { + return nDockSpace(imGuiID, sizeX, sizeY, imGuiDockNodeFlags, 0); } - public static void dockSpace(int imGuiID, float sizeX, float sizeY, int imGuiDockNodeFlags, ImGuiWindowClass imGuiWindowClass) { - nDockSpace(imGuiID, sizeX, sizeY, imGuiDockNodeFlags, imGuiWindowClass.ptr); + public static int dockSpace(int imGuiID, float sizeX, float sizeY, int imGuiDockNodeFlags, ImGuiWindowClass imGuiWindowClass) { + return nDockSpace(imGuiID, sizeX, sizeY, imGuiDockNodeFlags, imGuiWindowClass.ptr); } - private static native void nDockSpace(int imGuiID, float sizeX, float sizeY, int imGuiDockNodeFlags, long windowClassPtr); /* - ImGui::DockSpace(imGuiID, ImVec2(sizeX, sizeY), imGuiDockNodeFlags, windowClassPtr != 0 ? (ImGuiWindowClass*)windowClassPtr : NULL); + private static native int nDockSpace(int imGuiID, float sizeX, float sizeY, int imGuiDockNodeFlags, long windowClassPtr); /* + return ImGui::DockSpace(imGuiID, ImVec2(sizeX, sizeY), imGuiDockNodeFlags, windowClassPtr != 0 ? (ImGuiWindowClass*)windowClassPtr : NULL); */ public static int dockSpaceOverViewport() { diff --git a/imgui-binding/src/main/java/imgui/ImGuiIO.java b/imgui-binding/src/main/java/imgui/ImGuiIO.java index 8d90e91..19d790d 100644 --- a/imgui-binding/src/main/java/imgui/ImGuiIO.java +++ b/imgui-binding/src/main/java/imgui/ImGuiIO.java @@ -593,20 +593,6 @@ public final class ImGuiIO extends ImGuiStruct { IO->ConfigDockingNoSplit = value; */ - /** - * Enable docking with holding Shift key (reduce visual noise, allows dropping in wider space) - */ - public native boolean getConfigDockingWithShift(); /* - return IO->ConfigDockingWithShift; - */ - - /** - * Enable docking with holding Shift key (reduce visual noise, allows dropping in wider space) - */ - public native void setConfigDockingWithShift(boolean value); /* - IO->ConfigDockingWithShift = value; - */ - /** * [BETA] [FIXME: This currently creates regression with auto-sizing and general overhead] * Make every single floating window display within a docking node. diff --git a/imgui-lwjgl3/src/main/java/imgui/glfw/ImGuiImplGlfw.java b/imgui-lwjgl3/src/main/java/imgui/glfw/ImGuiImplGlfw.java index a342aae..522e098 100644 --- a/imgui-lwjgl3/src/main/java/imgui/glfw/ImGuiImplGlfw.java +++ b/imgui-lwjgl3/src/main/java/imgui/glfw/ImGuiImplGlfw.java @@ -68,6 +68,7 @@ public class ImGuiImplGlfw { // Mouse cursors provided by GLFW private final long[] mouseCursors = new long[ImGuiMouseCursor.COUNT]; + private final long[] keyOwnerWindows = new long[512]; // Empty array to fill ImGuiIO.NavInputs with zeroes private final float[] emptyNavInputs = new float[ImGuiNavInput.COUNT]; @@ -139,10 +140,14 @@ public class ImGuiImplGlfw { final ImGuiIO io = ImGui.getIO(); - if (action == GLFW_PRESS) { - io.setKeysDown(key, true); - } else if (action == GLFW_RELEASE) { - io.setKeysDown(key, false); + if (key >= 0 && key < keyOwnerWindows.length) { + if (action == GLFW_PRESS) { + io.setKeysDown(key, true); + keyOwnerWindows[key] = windowId; + } else if (action == GLFW_RELEASE) { + io.setKeysDown(key, false); + keyOwnerWindows[key] = 0; + } } io.setKeyCtrl(io.getKeysDown(GLFW_KEY_LEFT_CONTROL) || io.getKeysDown(GLFW_KEY_RIGHT_CONTROL)); @@ -603,12 +608,20 @@ public class ImGuiImplGlfw { } } - private static final class DestroyWindowFunction extends ImPlatformFuncViewport { + private final class DestroyWindowFunction extends ImPlatformFuncViewport { @Override public void accept(final ImGuiViewport vp) { final ImGuiViewportDataGlfw data = (ImGuiViewportDataGlfw) vp.getPlatformUserData(); if (data != null && data.windowOwned) { + // Release any keys that were pressed in the window being destroyed and are still held down, + // because we will not receive any release events after window is destroyed. + for (int i = 0; i < keyOwnerWindows.length; i++) { + if (keyOwnerWindows[i] == data.window) { + keyCallback(data.window, i, 0, GLFW_RELEASE, 0); // Later params are only used for main viewport, on which this function is never called. + } + } + glfwDestroyWindow(data.window); } diff --git a/include/imgui b/include/imgui index 2565945..1b435ae 160000 --- a/include/imgui +++ b/include/imgui @@ -1 +1 @@ -Subproject commit 256594575d95d56dda616c544c509740e74906b4 +Subproject commit 1b435ae3e07ca813eb3ef40aaabe7053f5570fae