Viewports: Fixed translating a host viewport from briefly altering the size of AlwaysAutoResize windows. (#5057)

This commit is contained in:
ocornut 2022-02-25 16:41:40 +01:00
parent 64519c6875
commit 8639a2f9f8
2 changed files with 5 additions and 0 deletions

View File

@ -134,6 +134,7 @@ Docking+Viewports Branch:
- Docking: Fixed floating docked nodes not being clamped into viewport workrect to stay reachable - Docking: Fixed floating docked nodes not being clamped into viewport workrect to stay reachable
when g.ConfigWindowsMoveFromTitleBarOnly is set and multi-viewports are disabled. (#5044) when g.ConfigWindowsMoveFromTitleBarOnly is set and multi-viewports are disabled. (#5044)
- Viewports: Fixed translating a host viewport from briefly altering the size of AlwaysAutoResize windows. (#5057)
- Viewports: Fixed main viewport size not matching ImDrawData::DisplaySize for one frame during resize - Viewports: Fixed main viewport size not matching ImDrawData::DisplaySize for one frame during resize
when multi-viewports are disabled. (#4900) when multi-viewports are disabled. (#4900)

View File

@ -4063,6 +4063,8 @@ void ImGui::UpdateMouseMovingWindowEndFrame()
} }
} }
// This is called during NewFrame()->UpdateViewportsNewFrame() only.
// Need to keep in sync with SetWindowPos()
static void TranslateWindow(ImGuiWindow* window, const ImVec2& delta) static void TranslateWindow(ImGuiWindow* window, const ImVec2& delta)
{ {
window->Pos += delta; window->Pos += delta;
@ -4072,6 +4074,7 @@ static void TranslateWindow(ImGuiWindow* window, const ImVec2& delta)
window->DC.CursorPos += delta; window->DC.CursorPos += delta;
window->DC.CursorStartPos += delta; window->DC.CursorStartPos += delta;
window->DC.CursorMaxPos += delta; window->DC.CursorMaxPos += delta;
window->DC.IdealMaxPos += delta;
} }
static void ScaleWindow(ImGuiWindow* window, float scale) static void ScaleWindow(ImGuiWindow* window, float scale)
@ -7670,6 +7673,7 @@ void ImGui::SetWindowPos(ImGuiWindow* window, const ImVec2& pos, ImGuiCond cond)
const ImVec2 old_pos = window->Pos; const ImVec2 old_pos = window->Pos;
window->Pos = ImFloor(pos); window->Pos = ImFloor(pos);
ImVec2 offset = window->Pos - old_pos; ImVec2 offset = window->Pos - old_pos;
// FIXME: share code with TranslateWindow(), need to confirm whether the 3 rect modified by TranslateWindow() are desirable here.
window->DC.CursorPos += offset; // As we happen to move the window while it is being appended to (which is a bad idea - will smear) let's at least offset the cursor window->DC.CursorPos += offset; // As we happen to move the window while it is being appended to (which is a bad idea - will smear) let's at least offset the cursor
window->DC.CursorMaxPos += offset; // And more importantly we need to offset CursorMaxPos/CursorStartPos this so ContentSize calculation doesn't get affected. window->DC.CursorMaxPos += offset; // And more importantly we need to offset CursorMaxPos/CursorStartPos this so ContentSize calculation doesn't get affected.
window->DC.IdealMaxPos += offset; window->DC.IdealMaxPos += offset;