SpiecsEngine
 
Loading...
Searching...
No Matches

◆ MainDockSpace()

void Spices::ImGuiH::MainDockSpace ( Side side = Side::Scene,
float alpha = 1.0f )
static

Begin a docking space.

Parameters
[in]sideUsually Side::Scene.
[in]alphaOpacity.

Definition at line 191 of file ImguiHelper.cpp.

192 {
194
195 // Keeping the unique ID of the dock space
196 ImGuiID dockspaceID = ImGui::GetID("DockSpace");
197
198 // The dock need a dummy window covering the entire viewport.
199 const ImGuiViewport* viewport = ImGui::GetMainViewport();
200 ImGui::SetNextWindowPos(viewport->WorkPos);
201 ImGui::SetNextWindowSize(viewport->WorkSize);
202 ImGui::SetNextWindowViewport(viewport->ID);
203 // All flags to dummy window
204 ImGuiWindowFlags host_window_flags = 0;
205 host_window_flags |= ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoResize;
206 host_window_flags |= ImGuiWindowFlags_NoMove; //| ImGuiWindowFlags_NoDocking;
207 host_window_flags |= ImGuiWindowFlags_NoBringToFrontOnFocus | ImGuiWindowFlags_NoNavFocus;
208 host_window_flags |= ImGuiWindowFlags_NoBackground;
209 // Starting dummy window
210 char label[32];
211 ImFormatString(label, IM_ARRAYSIZE(label), "DockSpaceViewport_%08X", viewport->ID);
212 ImGui::Begin(label, NULL, host_window_flags);
213
214 // The central node is transparent, so that when UI is draw after, the image is visible
215 // Auto Hide Bar, no title of the panel
216 // Center is not dockable, that is for the scene
217 ImGuiDockNodeFlags dockspaceFlags =
218 ImGuiDockNodeFlags_PassthruCentralNode;
219 //ImGuiDockNodeFlags_AutoHideTabBar;
220 //ImGuiDockNodeFlags_NoDockingInCentralNode;
221
222 // Building the splitting of the dock space is done only once
223 if (!ImGui::DockBuilderGetNode(dockspaceID))
224 {
225
226 ImGui::DockBuilderRemoveNode(dockspaceID);
227 ImGui::DockBuilderAddNode(dockspaceID, ImGuiDockNodeFlags_DockSpace);
228
229 ImGuiID dock_main_id = dockspaceID;
230
231 // Slitting all 4 directions
232 ImGuiID id_left = ImGui::DockBuilderSplitNode(dock_main_id, ImGuiDir_Left, 0.2f, nullptr, &dock_main_id);
233 ImGui::DockBuilderDockWindow(side == Side::Left ? "Docking Space" : "Dock_left", id_left);
234
235 ImGuiID id_right = ImGui::DockBuilderSplitNode(dock_main_id, ImGuiDir_Right, 0.2f, nullptr, &dock_main_id);
236 ImGui::DockBuilderDockWindow(side == Side::Right ? "Docking Space" : "Dock_right", id_right);
237
238 ImGuiID id_up = ImGui::DockBuilderSplitNode(dock_main_id, ImGuiDir_Up, 0.2f, nullptr, &dock_main_id);
239 ImGui::DockBuilderDockWindow(side == Side::Up ? "Docking Space" : "Dock_up", id_up);
240
241 ImGuiID id_down = ImGui::DockBuilderSplitNode(dock_main_id, ImGuiDir_Down, 0.2f, nullptr, &dock_main_id);
242 ImGui::DockBuilderDockWindow(side == Side::Down ? "Docking Space" : "Dock_down", id_down);
243
244 ImGui::DockBuilderDockWindow(side == Side::Scene ? "Docking Space" : "Scene", dock_main_id); // Center
245
246 ImGui::DockBuilderFinish(dock_main_id);
247 }
248
249 // Setting the panel to blend with alpha
250 ImVec4 col = ImGui::GetStyleColorVec4(ImGuiCol_WindowBg);
251 ImGui::PushStyleColor(ImGuiCol_WindowBg, ImVec4(col.x, col.y, col.z, alpha));
252
253 ImGui::DockSpace(dockspaceID, ImVec2(0.0f, 0.0f), dockspaceFlags);
254 ImGui::PopStyleColor();
255 ImGui::End();
256 }
#define SPICES_PROFILE_ZONE

Referenced by Spices::SlateRenderer::BeginImguiFrame().