diff --git a/imgui-binding/src/main/java/imgui/internal/flag/ImGuiDataAuthority.java b/imgui-binding/src/main/java/imgui/internal/flag/ImGuiDataAuthority.java new file mode 100644 index 0000000..4a45106 --- /dev/null +++ b/imgui-binding/src/main/java/imgui/internal/flag/ImGuiDataAuthority.java @@ -0,0 +1,13 @@ +package imgui.internal.flag; + +/** + * Store the source authority (dock node vs window) of a field + */ +public final class ImGuiDataAuthority { + private ImGuiDataAuthority() { + } + + public static final int Auto = 0; + public static final int DockNode = 1; + public static final int Window = 2; +} diff --git a/imgui-binding/src/main/java/imgui/internal/flag/ImGuiDockNodeFlags.java b/imgui-binding/src/main/java/imgui/internal/flag/ImGuiDockNodeFlags.java index ba5fd92..5f42d6b 100644 --- a/imgui-binding/src/main/java/imgui/internal/flag/ImGuiDockNodeFlags.java +++ b/imgui-binding/src/main/java/imgui/internal/flag/ImGuiDockNodeFlags.java @@ -1,5 +1,8 @@ package imgui.internal.flag; +/** + * Extend ImGuiDockNodeFlags + */ public final class ImGuiDockNodeFlags extends imgui.flag.ImGuiDockNodeFlags { private ImGuiDockNodeFlags() { } diff --git a/imgui-lwjgl3/src/test/java/ExampleUi.java b/imgui-lwjgl3/src/test/java/ExampleUi.java index fea2230..727ac53 100644 --- a/imgui-lwjgl3/src/test/java/ExampleUi.java +++ b/imgui-lwjgl3/src/test/java/ExampleUi.java @@ -15,6 +15,7 @@ import org.lwjgl.BufferUtils; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; +import java.io.IOException; import java.nio.ByteBuffer; import static org.lwjgl.opengl.GL32.*; @@ -30,41 +31,78 @@ final class ExampleUi { // Test data for payload private String dropTargetText = "Drop Here"; - // To modify background color dynamically - final float[] backgroundColor = new float[]{0.5f, 0, 0}; - // Resizable input example private final ImString resizableStr = new ImString(5); + + // Toggles private final ImBoolean showBottomDockedWindow = new ImBoolean(true); private final ImBoolean showDemoWindow = new ImBoolean(); // Attach image example - private int dukeTexture; + private int dukeTexture = 0; - void init() throws Exception { - dukeTexture = loadTexture(ImageIO.read(new File("src/test/resources/Duke_waving.png"))); + private boolean isBottomDockedWindowInit = false; + + // To modify background color dynamically + final float[] backgroundColor = new float[]{0.5f, 0, 0}; + + void render() throws Exception { + final int dockspaceId = ImGui.getID("MyDockSpace"); + showDockSpace(dockspaceId); + setupBottomDockedWindow(dockspaceId); + showBottomDockedWindow(); + + final ImGuiViewport mainViewport = ImGui.getMainViewport(); + ImGui.setNextWindowSize(600, 300, ImGuiCond.Once); + ImGui.setNextWindowPos(mainViewport.getWorkPosX() + 10, mainViewport.getWorkPosY() + 10, ImGuiCond.Once); + + ImGui.begin("Custom window"); // Start Custom window + + showWindowImage(); + showToggles(); + + ImGui.separator(); + + showDragNDrop(); + showBackgroundPicker(); + + ImGui.separator(); + + showResizableInput(); + + ImGui.separator(); + ImGui.newLine(); + + showDemoLink(); + + ImGui.end(); // End Custom window + + if (showDemoWindow.get()) { + ImGui.showDemoWindow(showDemoWindow); + } } - void render() { + private void showDockSpace(final int dockspaceId) { final ImGuiViewport mainViewport = ImGui.getMainViewport(); - - int windowFlags = 0; + final int windowFlags = ImGuiWindowFlags.NoTitleBar | ImGuiWindowFlags.NoCollapse | ImGuiWindowFlags.NoResize + | ImGuiWindowFlags.NoMove | ImGuiWindowFlags.NoBringToFrontOnFocus | ImGuiWindowFlags.NoNavFocus | ImGuiWindowFlags.NoBackground; ImGui.setNextWindowPos(mainViewport.getWorkPosX(), mainViewport.getWorkPosY()); ImGui.setNextWindowSize(mainViewport.getWorkSizeX(), mainViewport.getWorkSizeY()); ImGui.setNextWindowViewport(mainViewport.getID()); ImGui.pushStyleVar(ImGuiStyleVar.WindowRounding, 0); ImGui.pushStyleVar(ImGuiStyleVar.WindowBorderSize, 0); - windowFlags |= ImGuiWindowFlags.NoTitleBar | ImGuiWindowFlags.NoCollapse | ImGuiWindowFlags.NoResize | ImGuiWindowFlags.NoMove; - windowFlags |= ImGuiWindowFlags.NoBringToFrontOnFocus | ImGuiWindowFlags.NoNavFocus | ImGuiWindowFlags.NoBackground; ImGui.pushStyleVar(ImGuiStyleVar.WindowPadding, 0, 0); ImGui.begin("Dockspace Demo", windowFlags); ImGui.popStyleVar(3); - final int dockspaceId = ImGui.getID("MyDockSpace"); + ImGui.dockSpace(dockspaceId, 0, 0, ImGuiDockNodeFlags.PassthruCentralNode); + ImGui.end(); + } - if (ImGui.dockBuilderGetNode(dockspaceId) == null) { + private void setupBottomDockedWindow(final int dockspaceId) { + if (!isBottomDockedWindowInit) { ImGui.dockBuilderRemoveNode(dockspaceId); ImGui.dockBuilderAddNode(dockspaceId, ImGuiDockNodeFlags.DockSpace); @@ -73,34 +111,39 @@ final class ExampleUi { ImGui.dockBuilderDockWindow("Bottom Docked Window", dockIdBottom); ImGui.dockBuilderSetNodeSize(dockIdBottom, 150f, 150f); ImGui.dockBuilderFinish(dockspaceId); + + isBottomDockedWindowInit = true; } + } - ImGui.dockSpace(dockspaceId, 0, 0, ImGuiDockNodeFlags.PassthruCentralNode); - ImGui.end(); - + private void showBottomDockedWindow() { if (showBottomDockedWindow.get()) { - ImGui.begin("Bottom Docked Window", showBottomDockedWindow); + ImGui.begin("Bottom Docked Window", showBottomDockedWindow, ImGuiWindowFlags.AlwaysAutoResize); ImGui.text("An example of how to create docked windows."); ImGui.end(); } + } - ImGui.setNextWindowSize(600, 300, ImGuiCond.Once); - ImGui.setNextWindowPos(mainViewport.getWorkPosX() + 10, mainViewport.getWorkPosY() + 10, ImGuiCond.Once); - - ImGui.begin("Custom window"); // Start Custom window + private void showWindowImage() throws IOException { + if (dukeTexture == 0) { + dukeTexture = loadTexture(ImageIO.read(new File("src/test/resources/Duke_waving.png"))); + } // Draw an image in the bottom-right corner of the window final float xPoint = ImGui.getWindowPosX() + ImGui.getWindowSizeX() - 100; final float yPoint = ImGui.getWindowPosY() + ImGui.getWindowSizeY(); ImGui.getWindowDrawList().addImage(dukeTexture, xPoint, yPoint - 180, xPoint + 100, yPoint); + } - // Checkbox to show demo window - ImGui.checkbox("Show bottom docked window", showBottomDockedWindow); - ImGui.checkbox("Show demo window", showDemoWindow); + private void showToggles() { + ImGui.checkbox("Show Demo Window", showDemoWindow); + ImGui.checkbox("Show Bottom Docked Window", showBottomDockedWindow); + if (ImGui.button("Reset Bottom Dock Window")) { + isBottomDockedWindowInit = false; + } + } - ImGui.separator(); - - // Drag'n'Drop functionality + private void showDragNDrop() { ImGui.button("Drag me"); if (ImGui.beginDragDropSource()) { ImGui.setDragDropPayloadObject("payload_type", "Test Payload"); @@ -116,16 +159,16 @@ final class ExampleUi { } ImGui.endDragDropTarget(); } + } - // Color picker + private void showBackgroundPicker() { ImGui.alignTextToFramePadding(); ImGui.text("Background color:"); ImGui.sameLine(); ImGui.colorEdit3("##click_counter_col", backgroundColor, ImGuiColorEditFlags.NoInputs | ImGuiColorEditFlags.NoDragDrop); + } - ImGui.separator(); - - // Input field with auto-resize ability + private void showResizableInput() { ImGui.text("You can use text inputs with auto-resizable strings!"); ImGui.inputText("Resizable input", resizableStr, ImGuiInputTextFlags.CallbackResize); ImGui.text("text len:"); @@ -135,11 +178,9 @@ final class ExampleUi { ImGui.text("| buffer size:"); ImGui.sameLine(); ImGui.textColored(COLOR_CORAL, Integer.toString(resizableStr.getBufferSize())); + } - ImGui.separator(); - ImGui.newLine(); - - // Link to the original demo file + private void showDemoLink() { ImGui.text("Consider to look the original ImGui demo: "); ImGui.setNextItemWidth(500); ImGui.textColored(COLOR_LIMEGREEN, IMGUI_DEMO_LINK); @@ -147,12 +188,6 @@ final class ExampleUi { if (ImGui.button("Copy")) { ImGui.setClipboardText(IMGUI_DEMO_LINK); } - - ImGui.end(); // End Custom window - - if (showDemoWindow.get()) { - ImGui.showDemoWindow(showDemoWindow); - } } private int loadTexture(final BufferedImage image) { diff --git a/imgui-lwjgl3/src/test/java/ImGuiGlfwExample.java b/imgui-lwjgl3/src/test/java/ImGuiGlfwExample.java index 5b31ee6..e4394e4 100644 --- a/imgui-lwjgl3/src/test/java/ImGuiGlfwExample.java +++ b/imgui-lwjgl3/src/test/java/ImGuiGlfwExample.java @@ -55,8 +55,6 @@ public final class ImGuiGlfwExample { // ImGui context should be created as well. imGuiGl3.init(glslVersion); - exampleUi.init(); - loop(); // You should clean up after yourself in reverse order. @@ -199,7 +197,7 @@ public final class ImGuiGlfwExample { } // Main application loop - private void loop() { + private void loop() throws Exception { // Run the rendering loop until the user has attempted to close the window while (!glfwWindowShouldClose(windowPtr)) { startFrame();