|
|
|
@ -6179,14 +6179,14 @@ void ImGui::RenderWindowDecorations(ImGuiWindow* window, const ImRect& title_bar |
|
|
|
|
// Render, for docked windows and host windows we ensure bg goes before decorations
|
|
|
|
|
ImDrawList* bg_draw_list = window->DockIsActive ? window->DockNode->HostWindow->DrawList : window->DrawList; |
|
|
|
|
if (window->DockIsActive || (flags & ImGuiWindowFlags_DockNodeHost)) |
|
|
|
|
bg_draw_list->ChannelsSetCurrent(0); |
|
|
|
|
bg_draw_list->ChannelsSetCurrent(DOCKING_HOST_DRAW_CHANNEL_BG); |
|
|
|
|
if (window->DockIsActive) |
|
|
|
|
window->DockNode->LastBgColor = bg_col; |
|
|
|
|
|
|
|
|
|
bg_draw_list->AddRectFilled(window->Pos + ImVec2(0, window->TitleBarHeight()), window->Pos + window->Size, bg_col, window_rounding, (flags & ImGuiWindowFlags_NoTitleBar) ? 0 : ImDrawFlags_RoundCornersBottom); |
|
|
|
|
|
|
|
|
|
if (window->DockIsActive || (flags & ImGuiWindowFlags_DockNodeHost)) |
|
|
|
|
bg_draw_list->ChannelsSetCurrent(1); |
|
|
|
|
bg_draw_list->ChannelsSetCurrent(DOCKING_HOST_DRAW_CHANNEL_FG); |
|
|
|
|
} |
|
|
|
|
if (window->DockIsActive) |
|
|
|
|
window->DockNode->IsBgDrawnThisFrame = true; |
|
|
|
@ -6601,7 +6601,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) |
|
|
|
|
if (flags & ImGuiWindowFlags_DockNodeHost) |
|
|
|
|
{ |
|
|
|
|
window->DrawList->ChannelsSplit(2); |
|
|
|
|
window->DrawList->ChannelsSetCurrent(1); // Render decorations on channel 1 as we will render the backgrounds manually later
|
|
|
|
|
window->DrawList->ChannelsSetCurrent(DOCKING_HOST_DRAW_CHANNEL_FG); // Render decorations on channel 1 as we will render the backgrounds manually later
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Restore buffer capacity when woken from a compacted state, to avoid
|
|
|
|
@ -13766,7 +13766,6 @@ namespace ImGui |
|
|
|
|
static void DockContextProcessUndockWindow(ImGuiContext* ctx, ImGuiWindow* window, bool clear_persistent_docking_ref = true); |
|
|
|
|
static void DockContextProcessUndockNode(ImGuiContext* ctx, ImGuiDockNode* node); |
|
|
|
|
static void DockContextPruneUnusedSettingsNodes(ImGuiContext* ctx); |
|
|
|
|
static ImGuiDockNode* DockContextFindNodeByID(ImGuiContext* ctx, ImGuiID id); |
|
|
|
|
static ImGuiDockNode* DockContextBindNodeToWindow(ImGuiContext* ctx, ImGuiWindow* window); |
|
|
|
|
static void DockContextBuildNodesFromSettings(ImGuiContext* ctx, ImGuiDockNodeSettings* node_settings_array, int node_settings_count); |
|
|
|
|
static void DockContextBuildAddWindowsToNodes(ImGuiContext* ctx, ImGuiID root_id); // Use root_id==0 to add all
|
|
|
|
@ -13981,12 +13980,12 @@ void ImGui::DockContextEndFrame(ImGuiContext* ctx) |
|
|
|
|
{ |
|
|
|
|
ImRect bg_rect(node->Pos + ImVec2(0.0f, GetFrameHeight()), node->Pos + node->Size); |
|
|
|
|
ImDrawFlags bg_rounding_flags = CalcRoundingFlagsForRectInRect(bg_rect, node->HostWindow->Rect(), DOCKING_SPLITTER_SIZE); |
|
|
|
|
node->HostWindow->DrawList->ChannelsSetCurrent(0); |
|
|
|
|
node->HostWindow->DrawList->ChannelsSetCurrent(DOCKING_HOST_DRAW_CHANNEL_BG); |
|
|
|
|
node->HostWindow->DrawList->AddRectFilled(bg_rect.Min, bg_rect.Max, node->LastBgColor, node->HostWindow->WindowRounding, bg_rounding_flags); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static ImGuiDockNode* ImGui::DockContextFindNodeByID(ImGuiContext* ctx, ImGuiID id) |
|
|
|
|
ImGuiDockNode* ImGui::DockContextFindNodeByID(ImGuiContext* ctx, ImGuiID id) |
|
|
|
|
{ |
|
|
|
|
return (ImGuiDockNode*)ctx->DockContext.Nodes.GetVoidPtr(id); |
|
|
|
|
} |
|
|
|
@ -15174,7 +15173,7 @@ static void ImGui::DockNodeUpdate(ImGuiDockNode* node) |
|
|
|
|
// Update position/size, process and draw resizing splitters
|
|
|
|
|
if (node->IsRootNode() && host_window) |
|
|
|
|
{ |
|
|
|
|
host_window->DrawList->ChannelsSetCurrent(1); |
|
|
|
|
host_window->DrawList->ChannelsSetCurrent(DOCKING_HOST_DRAW_CHANNEL_FG); |
|
|
|
|
DockNodeTreeUpdatePosSize(node, host_window->Pos, host_window->Size); |
|
|
|
|
DockNodeTreeUpdateSplitter(node); |
|
|
|
|
} |
|
|
|
@ -15182,7 +15181,7 @@ static void ImGui::DockNodeUpdate(ImGuiDockNode* node) |
|
|
|
|
// Draw empty node background (currently can only be the Central Node)
|
|
|
|
|
if (host_window && node->IsEmpty() && node->IsVisible) |
|
|
|
|
{ |
|
|
|
|
host_window->DrawList->ChannelsSetCurrent(0); |
|
|
|
|
host_window->DrawList->ChannelsSetCurrent(DOCKING_HOST_DRAW_CHANNEL_BG); |
|
|
|
|
node->LastBgColor = (node_flags & ImGuiDockNodeFlags_PassthruCentralNode) ? 0 : GetColorU32(ImGuiCol_DockingEmptyBg); |
|
|
|
|
if (node->LastBgColor != 0) |
|
|
|
|
host_window->DrawList->AddRectFilled(node->Pos, node->Pos + node->Size, node->LastBgColor); |
|
|
|
@ -15195,7 +15194,7 @@ static void ImGui::DockNodeUpdate(ImGuiDockNode* node) |
|
|
|
|
const bool render_dockspace_bg = node->IsRootNode() && host_window && (node_flags & ImGuiDockNodeFlags_PassthruCentralNode) != 0; |
|
|
|
|
if (render_dockspace_bg && node->IsVisible) |
|
|
|
|
{ |
|
|
|
|
host_window->DrawList->ChannelsSetCurrent(0); |
|
|
|
|
host_window->DrawList->ChannelsSetCurrent(DOCKING_HOST_DRAW_CHANNEL_BG); |
|
|
|
|
if (central_node_hole) |
|
|
|
|
RenderRectFilledWithHole(host_window->DrawList, node->Rect(), central_node->Rect(), GetColorU32(ImGuiCol_WindowBg), 0.0f); |
|
|
|
|
else |
|
|
|
@ -15204,7 +15203,7 @@ static void ImGui::DockNodeUpdate(ImGuiDockNode* node) |
|
|
|
|
|
|
|
|
|
// Draw and populate Tab Bar
|
|
|
|
|
if (host_window) |
|
|
|
|
host_window->DrawList->ChannelsSetCurrent(1); |
|
|
|
|
host_window->DrawList->ChannelsSetCurrent(DOCKING_HOST_DRAW_CHANNEL_FG); |
|
|
|
|
if (host_window && node->Windows.Size > 0) |
|
|
|
|
{ |
|
|
|
|
DockNodeUpdateTabBar(node, host_window); |
|
|
|
@ -15240,12 +15239,12 @@ static void ImGui::DockNodeUpdate(ImGuiDockNode* node) |
|
|
|
|
// Render outer borders last (after the tab bar)
|
|
|
|
|
if (node->IsRootNode()) |
|
|
|
|
{ |
|
|
|
|
host_window->DrawList->ChannelsSetCurrent(1); |
|
|
|
|
host_window->DrawList->ChannelsSetCurrent(DOCKING_HOST_DRAW_CHANNEL_FG); |
|
|
|
|
RenderWindowOuterBorders(host_window); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Further rendering (= hosted windows background) will be drawn on layer 0
|
|
|
|
|
host_window->DrawList->ChannelsSetCurrent(0); |
|
|
|
|
host_window->DrawList->ChannelsSetCurrent(DOCKING_HOST_DRAW_CHANNEL_BG); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// End host window
|
|
|
|
|