15
15
import javax .imageio .ImageIO ;
16
16
import java .awt .image .BufferedImage ;
17
17
import java .io .File ;
18
+ import java .io .IOException ;
18
19
import java .nio .ByteBuffer ;
19
20
20
21
import static org .lwjgl .opengl .GL32 .*;
@@ -30,41 +31,78 @@ final class ExampleUi {
30
31
// Test data for payload
31
32
private String dropTargetText = "Drop Here" ;
32
33
33
- // To modify background color dynamically
34
- final float [] backgroundColor = new float []{0.5f , 0 , 0 };
35
-
36
34
// Resizable input example
37
35
private final ImString resizableStr = new ImString (5 );
36
+
37
+ // Toggles
38
38
private final ImBoolean showBottomDockedWindow = new ImBoolean (true );
39
39
private final ImBoolean showDemoWindow = new ImBoolean ();
40
40
41
41
// Attach image example
42
- private int dukeTexture ;
42
+ private int dukeTexture = 0 ;
43
43
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 ();
47
54
48
- void render () {
49
55
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 ();
50
65
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 ;
52
89
53
90
ImGui .setNextWindowPos (mainViewport .getWorkPosX (), mainViewport .getWorkPosY ());
54
91
ImGui .setNextWindowSize (mainViewport .getWorkSizeX (), mainViewport .getWorkSizeY ());
55
92
ImGui .setNextWindowViewport (mainViewport .getID ());
56
93
ImGui .pushStyleVar (ImGuiStyleVar .WindowRounding , 0 );
57
94
ImGui .pushStyleVar (ImGuiStyleVar .WindowBorderSize , 0 );
58
- windowFlags |= ImGuiWindowFlags .NoTitleBar | ImGuiWindowFlags .NoCollapse | ImGuiWindowFlags .NoResize | ImGuiWindowFlags .NoMove ;
59
- windowFlags |= ImGuiWindowFlags .NoBringToFrontOnFocus | ImGuiWindowFlags .NoNavFocus | ImGuiWindowFlags .NoBackground ;
60
95
61
96
ImGui .pushStyleVar (ImGuiStyleVar .WindowPadding , 0 , 0 );
62
97
ImGui .begin ("Dockspace Demo" , windowFlags );
63
98
ImGui .popStyleVar (3 );
64
99
65
- final int dockspaceId = ImGui .getID ("MyDockSpace" );
100
+ ImGui .dockSpace (dockspaceId , 0 , 0 , ImGuiDockNodeFlags .PassthruCentralNode );
101
+ ImGui .end ();
102
+ }
66
103
67
- if (ImGui .dockBuilderGetNode (dockspaceId ) == null ) {
104
+ private void setupBottomDockedWindow (final int dockspaceId ) {
105
+ if (!isBottomDockedWindowInit ) {
68
106
ImGui .dockBuilderRemoveNode (dockspaceId );
69
107
ImGui .dockBuilderAddNode (dockspaceId , ImGuiDockNodeFlags .DockSpace );
70
108
@@ -73,34 +111,39 @@ void render() {
73
111
ImGui .dockBuilderDockWindow ("Bottom Docked Window" , dockIdBottom );
74
112
ImGui .dockBuilderSetNodeSize (dockIdBottom , 150f , 150f );
75
113
ImGui .dockBuilderFinish (dockspaceId );
76
- }
77
114
78
- ImGui .dockSpace (dockspaceId , 0 , 0 , ImGuiDockNodeFlags .PassthruCentralNode );
79
- ImGui .end ();
115
+ isBottomDockedWindowInit = true ;
116
+ }
117
+ }
80
118
119
+ private void showBottomDockedWindow () {
81
120
if (showBottomDockedWindow .get ()) {
82
- ImGui .begin ("Bottom Docked Window" , showBottomDockedWindow );
121
+ ImGui .begin ("Bottom Docked Window" , showBottomDockedWindow , ImGuiWindowFlags . AlwaysAutoResize );
83
122
ImGui .text ("An example of how to create docked windows." );
84
123
ImGui .end ();
85
124
}
125
+ }
86
126
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
+ }
91
131
92
132
// Draw an image in the bottom-right corner of the window
93
133
final float xPoint = ImGui .getWindowPosX () + ImGui .getWindowSizeX () - 100 ;
94
134
final float yPoint = ImGui .getWindowPosY () + ImGui .getWindowSizeY ();
95
135
ImGui .getWindowDrawList ().addImage (dukeTexture , xPoint , yPoint - 180 , xPoint + 100 , yPoint );
136
+ }
96
137
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
+ }
102
145
103
- // Drag'n'Drop functionality
146
+ private void showDragNDrop () {
104
147
ImGui .button ("Drag me" );
105
148
if (ImGui .beginDragDropSource ()) {
106
149
ImGui .setDragDropPayloadObject ("payload_type" , "Test Payload" );
@@ -116,16 +159,16 @@ void render() {
116
159
}
117
160
ImGui .endDragDropTarget ();
118
161
}
162
+ }
119
163
120
- // Color picker
164
+ private void showBackgroundPicker () {
121
165
ImGui .alignTextToFramePadding ();
122
166
ImGui .text ("Background color:" );
123
167
ImGui .sameLine ();
124
168
ImGui .colorEdit3 ("##click_counter_col" , backgroundColor , ImGuiColorEditFlags .NoInputs | ImGuiColorEditFlags .NoDragDrop );
169
+ }
125
170
126
- ImGui .separator ();
127
-
128
- // Input field with auto-resize ability
171
+ private void showResizableInput () {
129
172
ImGui .text ("You can use text inputs with auto-resizable strings!" );
130
173
ImGui .inputText ("Resizable input" , resizableStr , ImGuiInputTextFlags .CallbackResize );
131
174
ImGui .text ("text len:" );
@@ -135,24 +178,16 @@ void render() {
135
178
ImGui .text ("| buffer size:" );
136
179
ImGui .sameLine ();
137
180
ImGui .textColored (COLOR_CORAL , Integer .toString (resizableStr .getBufferSize ()));
181
+ }
138
182
139
- ImGui .separator ();
140
- ImGui .newLine ();
141
-
142
- // Link to the original demo file
183
+ private void showDemoLink () {
143
184
ImGui .text ("Consider to look the original ImGui demo: " );
144
185
ImGui .setNextItemWidth (500 );
145
186
ImGui .textColored (COLOR_LIMEGREEN , IMGUI_DEMO_LINK );
146
187
ImGui .sameLine ();
147
188
if (ImGui .button ("Copy" )) {
148
189
ImGui .setClipboardText (IMGUI_DEMO_LINK );
149
190
}
150
-
151
- ImGui .end (); // End Custom window
152
-
153
- if (showDemoWindow .get ()) {
154
- ImGui .showDemoWindow (showDemoWindow );
155
- }
156
191
}
157
192
158
193
private int loadTexture (final BufferedImage image ) {
0 commit comments