diff --git a/docs/CHANGELOG.txt b/docs/CHANGELOG.txt index 7548052f9..62f2def28 100644 --- a/docs/CHANGELOG.txt +++ b/docs/CHANGELOG.txt @@ -238,6 +238,9 @@ Other Changes: Docking+Viewports Branch: - Docking: + - Fixed various rendering issues and ability to have rounded floating dock nodes. + (#6993, #6151) - please note that rounding is still disabled on standalone + viewports. - Fixed implicit/fallback "Debug" window from staying visible if once docked. (#9151) - Demo: rework 'Dockspace' demo to increase clarity and put more emphasis on the basic path of simply calling `DockSpaceOverViewport()`. diff --git a/imgui.cpp b/imgui.cpp index b4a0220af..547aeff6c 100644 --- a/imgui.cpp +++ b/imgui.cpp @@ -7487,7 +7487,11 @@ void ImGui::RenderWindowDecorations(ImGuiWindow* window, const ImRect& title_bar if (bg_col & IM_COL32_A_MASK) { ImRect bg_rect(window->Pos + ImVec2(0, window->TitleBarHeight), window->Pos + window->Size); - ImDrawFlags bg_rounding_flags = (flags & ImGuiWindowFlags_NoTitleBar) ? 0 : ImDrawFlags_RoundCornersBottom; + ImDrawFlags bg_rounding_flags; + if (window->DockIsActive) + bg_rounding_flags = CalcRoundingFlagsForRectInRect(bg_rect, window->DockNode->HostWindow->Rect(), 0.0f); + else + bg_rounding_flags = (flags & ImGuiWindowFlags_NoTitleBar) ? ImDrawFlags_RoundCornersAll : ImDrawFlags_RoundCornersBottom; ImDrawList* bg_draw_list = window->DockIsActive ? window->DockNode->HostWindow->DrawList : window->DrawList; if (window->DockIsActive) bg_draw_list->ChannelsSetCurrent(DOCKING_HOST_DRAW_CHANNEL_BG); @@ -8215,10 +8219,10 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags) // Lock window rounding for the frame (so that altering them doesn't cause inconsistencies) // Large values tend to lead to variety of artifacts and are not recommended. - if (window->ViewportOwned || window->DockIsActive) + if (window->RootWindowDockTree->ViewportOwned) window->WindowRounding = 0.0f; else - window->WindowRounding = (flags & ImGuiWindowFlags_ChildWindow) ? style.ChildRounding : ((flags & ImGuiWindowFlags_Popup) && !(flags & ImGuiWindowFlags_Modal)) ? style.PopupRounding : style.WindowRounding; + window->WindowRounding = ((flags & ImGuiWindowFlags_ChildWindow) && !window->DockIsActive) ? style.ChildRounding : ((flags & ImGuiWindowFlags_Popup) && !(flags & ImGuiWindowFlags_Modal)) ? style.PopupRounding : style.WindowRounding; // For windows with title bar or menu bar, we clamp to FrameHeight(FontSize + FramePadding.y * 2.0f) to completely hide artifacts. //if ((window->Flags & ImGuiWindowFlags_MenuBar) || !(window->Flags & ImGuiWindowFlags_NoTitleBar))