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