Unravel Engine C++ Reference
Loading...
Searching...
No Matches
dockspace.cpp
Go to the documentation of this file.
1#include "dockspace.h"
2#include "panels_defs.h"
3
4#include <imgui/imgui.h>
5#include <imgui/imgui_internal.h>
6
7#include <vector>
8
9namespace unravel
10{
11
12namespace
13{
14void build_dockspace(ImGuiID dockspace_id /*, ImVec2 size*/)
15{
16 ImGui::DockBuilderRemoveNode(dockspace_id); // Clear out existing layout
17
18 const ImGuiDockNodeFlags dockNodeFlags = ImGuiDockNodeFlags_None;
19 ImGui::DockBuilderAddNode(dockspace_id, dockNodeFlags); // Add empty node
20
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);
25
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);
29
30 ImGuiID dock_left_id = ImGui::DockBuilderSplitNode(dock_main_id, ImGuiDir_Left, 0.2f, nullptr, &dock_main_id);
31 ImGui::DockBuilderDockWindow(HIERARCHY_VIEW, dock_left_id);
32 ImGui::DockBuilderDockWindow(INSPECTOR_VIEW, dock_right_id);
33 ImGui::DockBuilderDockWindow(PROFILER_VIEW, dock_right_down_id);
34 ImGui::DockBuilderDockWindow(LAYOUTS_VIEW, dock_right_down_id);
35
36 ImGui::DockBuilderDockWindow(CONSOLE_VIEW, dock_down_id);
37
38 ImGui::DockBuilderDockWindow(CONTENT_VIEW, dock_down_id);
39 ImGui::DockBuilderDockWindow(SCENE_VIEW, dock_main_id);
40 ImGui::DockBuilderDockWindow(GAME_VIEW, dock_main_id);
41
42 ImGui::DockBuilderFinish(dockspace_id);
43}
44} // namespace
45
46void dockspace::on_frame_ui_render(float headerSize, float footerSize)
47{
48 const ImGuiDockNodeFlags dockspace_flags = ImGuiDockNodeFlags_None;
49 ImGuiWindowFlags windowFlags = 0;
50 windowFlags |=
51 ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize;
52 windowFlags |= ImGuiWindowFlags_NoBringToFrontOnFocus | ImGuiWindowFlags_NoNavFocus | ImGuiWindowFlags_NoFocusOnAppearing;
53 const ImGuiViewport* viewport = ImGui::GetMainViewport();
54 const ImVec2 dockspaceSize = ImVec2(viewport->WorkSize.x, viewport->WorkSize.y - headerSize - footerSize);
55 const ImVec2 dockspacePos = ImVec2(viewport->WorkPos.x, viewport->WorkPos.y + headerSize);
56 ImGui::SetNextWindowPos(dockspacePos);
57 ImGui::SetNextWindowSize(dockspaceSize);
58 ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0.0f, 0.0f));
59
60 ImGui::Begin("Engine Dock Space", nullptr, windowFlags);
61
62 auto dockspace_id = ImGui::GetID("Dockspace");
63
64 if(!ImGui::DockBuilderGetNode(dockspace_id))
65 {
66 build_dockspace(dockspace_id);
67 refresh();
68 }
69 ImGui::DockSpace(dockspace_id, dockspaceSize, dockspace_flags);
70 ImGui::End();
71
72 ImGui::PopStyleVar();
73}
74
79
81{
82 // only execute if we are in the second frame of our program
83 int& i = reset_focus_counter_;
84
85 static const std::vector<const char*> focused_dock_tabs{SCENE_VIEW, CONTENT_VIEW, PROFILER_VIEW};
86
87 int tabs_count = int(focused_dock_tabs.size());
88 if(i < tabs_count)
89 {
90 for(int tab_idx = 0; tab_idx < tabs_count; ++tab_idx)
91 {
92 if(i == tab_idx)
93 {
94 ImGui::FocusWindow(ImGui::FindWindowByName(focused_dock_tabs[tab_idx]));
95 }
96 }
97
98 i++;
99 }
100
101
102}
103
104} // namespace unravel
void execute_dock_builder_order_and_focus_workaround()
Definition dockspace.cpp:80
void on_frame_ui_render(float headerSize, float footerSize)
Definition dockspace.cpp:46
#define CONTENT_VIEW
Definition panels_defs.h:8
#define HIERARCHY_VIEW
Definition panels_defs.h:9
#define SCENE_VIEW
Definition panels_defs.h:5
#define INSPECTOR_VIEW
Definition panels_defs.h:10
#define CONSOLE_VIEW
Definition panels_defs.h:4
#define PROFILER_VIEW
Definition panels_defs.h:19
#define GAME_VIEW
Definition panels_defs.h:7
#define LAYOUTS_VIEW
Definition panels_defs.h:15