Skip to content

Commit 3d438a0

Browse files
committed
[Example] Refactor example
1 parent 4e56424 commit 3d438a0

File tree

4 files changed

+93
-44
lines changed

4 files changed

+93
-44
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package imgui.internal.flag;
2+
3+
/**
4+
* Store the source authority (dock node vs window) of a field
5+
*/
6+
public final class ImGuiDataAuthority {
7+
private ImGuiDataAuthority() {
8+
}
9+
10+
public static final int Auto = 0;
11+
public static final int DockNode = 1;
12+
public static final int Window = 2;
13+
}

imgui-binding/src/main/java/imgui/internal/flag/ImGuiDockNodeFlags.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package imgui.internal.flag;
22

3+
/**
4+
* Extend ImGuiDockNodeFlags
5+
*/
36
public final class ImGuiDockNodeFlags extends imgui.flag.ImGuiDockNodeFlags {
47
private ImGuiDockNodeFlags() {
58
}

imgui-lwjgl3/src/test/java/ExampleUi.java

Lines changed: 76 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import javax.imageio.ImageIO;
1616
import java.awt.image.BufferedImage;
1717
import java.io.File;
18+
import java.io.IOException;
1819
import java.nio.ByteBuffer;
1920

2021
import static org.lwjgl.opengl.GL32.*;
@@ -30,41 +31,78 @@ final class ExampleUi {
3031
// Test data for payload
3132
private String dropTargetText = "Drop Here";
3233

33-
// To modify background color dynamically
34-
final float[] backgroundColor = new float[]{0.5f, 0, 0};
35-
3634
// Resizable input example
3735
private final ImString resizableStr = new ImString(5);
36+
37+
// Toggles
3838
private final ImBoolean showBottomDockedWindow = new ImBoolean(true);
3939
private final ImBoolean showDemoWindow = new ImBoolean();
4040

4141
// Attach image example
42-
private int dukeTexture;
42+
private int dukeTexture = 0;
4343

44-
void init() throws Exception {
45-
dukeTexture = loadTexture(ImageIO.read(new File("src/test/resources/Duke_waving.png")));
46-
}
44+
private boolean isBottomDockedWindowInit = false;
45+
46+
// To modify background color dynamically
47+
final float[] backgroundColor = new float[]{0.5f, 0, 0};
48+
49+
void render() throws Exception {
50+
final int dockspaceId = ImGui.getID("MyDockSpace");
51+
showDockSpace(dockspaceId);
52+
setupBottomDockedWindow(dockspaceId);
53+
showBottomDockedWindow();
4754

48-
void render() {
4955
final ImGuiViewport mainViewport = ImGui.getMainViewport();
56+
ImGui.setNextWindowSize(600, 300, ImGuiCond.Once);
57+
ImGui.setNextWindowPos(mainViewport.getWorkPosX() + 10, mainViewport.getWorkPosY() + 10, ImGuiCond.Once);
58+
59+
ImGui.begin("Custom window"); // Start Custom window
60+
61+
showWindowImage();
62+
showToggles();
63+
64+
ImGui.separator();
5065

51-
int windowFlags = 0;
66+
showDragNDrop();
67+
showBackgroundPicker();
68+
69+
ImGui.separator();
70+
71+
showResizableInput();
72+
73+
ImGui.separator();
74+
ImGui.newLine();
75+
76+
showDemoLink();
77+
78+
ImGui.end(); // End Custom window
79+
80+
if (showDemoWindow.get()) {
81+
ImGui.showDemoWindow(showDemoWindow);
82+
}
83+
}
84+
85+
private void showDockSpace(final int dockspaceId) {
86+
final ImGuiViewport mainViewport = ImGui.getMainViewport();
87+
final int windowFlags = ImGuiWindowFlags.NoTitleBar | ImGuiWindowFlags.NoCollapse | ImGuiWindowFlags.NoResize
88+
| ImGuiWindowFlags.NoMove | ImGuiWindowFlags.NoBringToFrontOnFocus | ImGuiWindowFlags.NoNavFocus | ImGuiWindowFlags.NoBackground;
5289

5390
ImGui.setNextWindowPos(mainViewport.getWorkPosX(), mainViewport.getWorkPosY());
5491
ImGui.setNextWindowSize(mainViewport.getWorkSizeX(), mainViewport.getWorkSizeY());
5592
ImGui.setNextWindowViewport(mainViewport.getID());
5693
ImGui.pushStyleVar(ImGuiStyleVar.WindowRounding, 0);
5794
ImGui.pushStyleVar(ImGuiStyleVar.WindowBorderSize, 0);
58-
windowFlags |= ImGuiWindowFlags.NoTitleBar | ImGuiWindowFlags.NoCollapse | ImGuiWindowFlags.NoResize | ImGuiWindowFlags.NoMove;
59-
windowFlags |= ImGuiWindowFlags.NoBringToFrontOnFocus | ImGuiWindowFlags.NoNavFocus | ImGuiWindowFlags.NoBackground;
6095

6196
ImGui.pushStyleVar(ImGuiStyleVar.WindowPadding, 0, 0);
6297
ImGui.begin("Dockspace Demo", windowFlags);
6398
ImGui.popStyleVar(3);
6499

65-
final int dockspaceId = ImGui.getID("MyDockSpace");
100+
ImGui.dockSpace(dockspaceId, 0, 0, ImGuiDockNodeFlags.PassthruCentralNode);
101+
ImGui.end();
102+
}
66103

67-
if (ImGui.dockBuilderGetNode(dockspaceId) == null) {
104+
private void setupBottomDockedWindow(final int dockspaceId) {
105+
if (!isBottomDockedWindowInit) {
68106
ImGui.dockBuilderRemoveNode(dockspaceId);
69107
ImGui.dockBuilderAddNode(dockspaceId, ImGuiDockNodeFlags.DockSpace);
70108

@@ -73,34 +111,39 @@ void render() {
73111
ImGui.dockBuilderDockWindow("Bottom Docked Window", dockIdBottom);
74112
ImGui.dockBuilderSetNodeSize(dockIdBottom, 150f, 150f);
75113
ImGui.dockBuilderFinish(dockspaceId);
76-
}
77114

78-
ImGui.dockSpace(dockspaceId, 0, 0, ImGuiDockNodeFlags.PassthruCentralNode);
79-
ImGui.end();
115+
isBottomDockedWindowInit = true;
116+
}
117+
}
80118

119+
private void showBottomDockedWindow() {
81120
if (showBottomDockedWindow.get()) {
82-
ImGui.begin("Bottom Docked Window", showBottomDockedWindow);
121+
ImGui.begin("Bottom Docked Window", showBottomDockedWindow, ImGuiWindowFlags.AlwaysAutoResize);
83122
ImGui.text("An example of how to create docked windows.");
84123
ImGui.end();
85124
}
125+
}
86126

87-
ImGui.setNextWindowSize(600, 300, ImGuiCond.Once);
88-
ImGui.setNextWindowPos(mainViewport.getWorkPosX() + 10, mainViewport.getWorkPosY() + 10, ImGuiCond.Once);
89-
90-
ImGui.begin("Custom window"); // Start Custom window
127+
private void showWindowImage() throws IOException {
128+
if (dukeTexture == 0) {
129+
dukeTexture = loadTexture(ImageIO.read(new File("src/test/resources/Duke_waving.png")));
130+
}
91131

92132
// Draw an image in the bottom-right corner of the window
93133
final float xPoint = ImGui.getWindowPosX() + ImGui.getWindowSizeX() - 100;
94134
final float yPoint = ImGui.getWindowPosY() + ImGui.getWindowSizeY();
95135
ImGui.getWindowDrawList().addImage(dukeTexture, xPoint, yPoint - 180, xPoint + 100, yPoint);
136+
}
96137

97-
// Checkbox to show demo window
98-
ImGui.checkbox("Show bottom docked window", showBottomDockedWindow);
99-
ImGui.checkbox("Show demo window", showDemoWindow);
100-
101-
ImGui.separator();
138+
private void showToggles() {
139+
ImGui.checkbox("Show Demo Window", showDemoWindow);
140+
ImGui.checkbox("Show Bottom Docked Window", showBottomDockedWindow);
141+
if (ImGui.button("Reset Bottom Dock Window")) {
142+
isBottomDockedWindowInit = false;
143+
}
144+
}
102145

103-
// Drag'n'Drop functionality
146+
private void showDragNDrop() {
104147
ImGui.button("Drag me");
105148
if (ImGui.beginDragDropSource()) {
106149
ImGui.setDragDropPayloadObject("payload_type", "Test Payload");
@@ -116,16 +159,16 @@ void render() {
116159
}
117160
ImGui.endDragDropTarget();
118161
}
162+
}
119163

120-
// Color picker
164+
private void showBackgroundPicker() {
121165
ImGui.alignTextToFramePadding();
122166
ImGui.text("Background color:");
123167
ImGui.sameLine();
124168
ImGui.colorEdit3("##click_counter_col", backgroundColor, ImGuiColorEditFlags.NoInputs | ImGuiColorEditFlags.NoDragDrop);
169+
}
125170

126-
ImGui.separator();
127-
128-
// Input field with auto-resize ability
171+
private void showResizableInput() {
129172
ImGui.text("You can use text inputs with auto-resizable strings!");
130173
ImGui.inputText("Resizable input", resizableStr, ImGuiInputTextFlags.CallbackResize);
131174
ImGui.text("text len:");
@@ -135,24 +178,16 @@ void render() {
135178
ImGui.text("| buffer size:");
136179
ImGui.sameLine();
137180
ImGui.textColored(COLOR_CORAL, Integer.toString(resizableStr.getBufferSize()));
181+
}
138182

139-
ImGui.separator();
140-
ImGui.newLine();
141-
142-
// Link to the original demo file
183+
private void showDemoLink() {
143184
ImGui.text("Consider to look the original ImGui demo: ");
144185
ImGui.setNextItemWidth(500);
145186
ImGui.textColored(COLOR_LIMEGREEN, IMGUI_DEMO_LINK);
146187
ImGui.sameLine();
147188
if (ImGui.button("Copy")) {
148189
ImGui.setClipboardText(IMGUI_DEMO_LINK);
149190
}
150-
151-
ImGui.end(); // End Custom window
152-
153-
if (showDemoWindow.get()) {
154-
ImGui.showDemoWindow(showDemoWindow);
155-
}
156191
}
157192

158193
private int loadTexture(final BufferedImage image) {

imgui-lwjgl3/src/test/java/ImGuiGlfwExample.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,6 @@ public void run() throws Exception {
5555
// ImGui context should be created as well.
5656
imGuiGl3.init(glslVersion);
5757

58-
exampleUi.init();
59-
6058
loop();
6159

6260
// You should clean up after yourself in reverse order.
@@ -199,7 +197,7 @@ private void setupImGui() {
199197
}
200198

201199
// Main application loop
202-
private void loop() {
200+
private void loop() throws Exception {
203201
// Run the rendering loop until the user has attempted to close the window
204202
while (!glfwWindowShouldClose(windowPtr)) {
205203
startFrame();

0 commit comments

Comments
 (0)