4#include <imgui/imgui.h>
5#include <imgui/imgui_internal.h>
14void build_dockspace(ImGuiID dockspace_id )
16 ImGui::DockBuilderRemoveNode(dockspace_id);
18 const ImGuiDockNodeFlags dockNodeFlags = ImGuiDockNodeFlags_None;
19 ImGui::DockBuilderAddNode(dockspace_id, dockNodeFlags);
21 ImGuiID dock_main_id = dockspace_id;
22 ImGuiID dock_right_id = ImGui::DockBuilderSplitNode(dock_main_id, ImGuiDir_Right, 0.2f,
nullptr, &dock_main_id);
23 ImGuiID dock_right_down_id =
24 ImGui::DockBuilderSplitNode(dock_right_id, ImGuiDir_Down, 0.3f,
nullptr, &dock_right_id);
26 ImGuiID dock_down_id = ImGui::DockBuilderSplitNode(dock_main_id, ImGuiDir_Down, 0.3f,
nullptr, &dock_main_id);
27 ImGuiID dock_down_right_id =
28 ImGui::DockBuilderSplitNode(dock_down_id, ImGuiDir_Right, 0.6f,
nullptr, &dock_down_id);
30 ImGuiID dock_left_id = ImGui::DockBuilderSplitNode(dock_main_id, ImGuiDir_Left, 0.2f,
nullptr, &dock_main_id);
35 ImGui::DockBuilderDockWindow(
CONSOLE_VIEW, dock_down_id);
37 ImGui::DockBuilderDockWindow(
CONTENT_VIEW, dock_down_id);
38 ImGui::DockBuilderDockWindow(
SCENE_VIEW, dock_main_id);
39 ImGui::DockBuilderDockWindow(
GAME_VIEW, dock_main_id);
41 ImGui::DockBuilderFinish(dockspace_id);
47 const ImGuiDockNodeFlags dockspace_flags = ImGuiDockNodeFlags_None;
48 ImGuiWindowFlags windowFlags = 0;
50 ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize;
51 windowFlags |= ImGuiWindowFlags_NoBringToFrontOnFocus | ImGuiWindowFlags_NoNavFocus;
52 const ImGuiViewport* viewport = ImGui::GetMainViewport();
53 const ImVec2 dockspaceSize = ImVec2(viewport->WorkSize.x, viewport->WorkSize.y - headerSize - footerSize);
54 const ImVec2 dockspacePos = ImVec2(viewport->WorkPos.x, viewport->WorkPos.y + headerSize);
55 ImGui::SetNextWindowPos(dockspacePos);
56 ImGui::SetNextWindowSize(dockspaceSize);
57 ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0.0f, 0.0f));
59 ImGui::Begin(
"Engine Dock Space",
nullptr, windowFlags);
61 auto dockspace_id = ImGui::GetID(
"Dockspace");
63 if(!ImGui::DockBuilderGetNode(dockspace_id))
65 build_dockspace(dockspace_id);
67 ImGui::DockSpace(dockspace_id, dockspaceSize, dockspace_flags);
82 int tabs_count = int(focused_dock_tabs.size());
85 for(
int tab_idx = 0; tab_idx < tabs_count; ++tab_idx)
89 ImGui::FocusWindow(ImGui::FindWindowByName(focused_dock_tabs[tab_idx]));
void execute_dock_builder_order_and_focus_workaround()
void on_frame_ui_render(float headerSize, float footerSize)