mirror of
https://github.com/Drezil/imgui.git
synced 2024-12-22 07:36:35 +00:00
Settings: Fixed some SetNextWindowPos/SetNextWindowSize API calls not marking settings as dirty.
This commit is contained in:
parent
6cac48df32
commit
ddcff10343
@ -107,6 +107,7 @@ Other Changes:
|
||||
from the menu-bar, avoiding accidental hovering from one to the other. (#3496, #4797) [@rokups]
|
||||
- Stack Tool: Added option to copy item path to clipboard. (#4631)
|
||||
- Settings: Fixed out-of-bounds read when .ini file on disk is empty. (#5351) [@quantum5]
|
||||
- Settings: Fixed some SetNextWindowPos/SetNextWindowSize API calls not marking settings as dirty.
|
||||
- DrawList: Fixed PathArcTo() emitting terminating vertices too close to arc vertices. (#4993) [@thedmd]
|
||||
- DrawList: Fixed texture-based anti-aliasing path with RGBA textures (#5132, #3245) [@cfillion]
|
||||
- DrawList: Fixed divide-by-zero or glitches with Radius/Rounding values close to zero. (#5249, #5293, #3491)
|
||||
|
37
imgui.cpp
37
imgui.cpp
@ -3867,11 +3867,7 @@ void ImGui::UpdateMouseMovingWindowNewFrame()
|
||||
if (g.IO.MouseDown[0] && IsMousePosValid(&g.IO.MousePos))
|
||||
{
|
||||
ImVec2 pos = g.IO.MousePos - g.ActiveIdClickOffset;
|
||||
if (moving_window->Pos.x != pos.x || moving_window->Pos.y != pos.y)
|
||||
{
|
||||
MarkIniSettingsDirty(moving_window);
|
||||
SetWindowPos(moving_window, pos, ImGuiCond_Always);
|
||||
}
|
||||
SetWindowPos(moving_window, pos, ImGuiCond_Always);
|
||||
FocusWindow(g.MovingWindow);
|
||||
}
|
||||
else
|
||||
@ -7140,6 +7136,9 @@ void ImGui::SetWindowPos(ImGuiWindow* window, const ImVec2& pos, ImGuiCond cond)
|
||||
const ImVec2 old_pos = window->Pos;
|
||||
window->Pos = ImFloor(pos);
|
||||
ImVec2 offset = window->Pos - old_pos;
|
||||
if (offset.x == 0.0f && offset.y == 0.0f)
|
||||
return;
|
||||
MarkIniSettingsDirty(window);
|
||||
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.IdealMaxPos += offset;
|
||||
@ -7174,26 +7173,19 @@ void ImGui::SetWindowSize(ImGuiWindow* window, const ImVec2& size, ImGuiCond con
|
||||
window->SetWindowSizeAllowFlags &= ~(ImGuiCond_Once | ImGuiCond_FirstUseEver | ImGuiCond_Appearing);
|
||||
|
||||
// Set
|
||||
if (size.x > 0.0f)
|
||||
{
|
||||
window->AutoFitFramesX = 0;
|
||||
ImVec2 old_size = window->SizeFull;
|
||||
window->AutoFitFramesX = (size.x <= 0.0f) ? 2 : 0;
|
||||
window->AutoFitFramesY = (size.y <= 0.0f) ? 2 : 0;
|
||||
if (size.x <= 0.0f)
|
||||
window->AutoFitOnlyGrows = false;
|
||||
else
|
||||
window->SizeFull.x = IM_FLOOR(size.x);
|
||||
}
|
||||
else
|
||||
{
|
||||
window->AutoFitFramesX = 2;
|
||||
if (size.y <= 0.0f)
|
||||
window->AutoFitOnlyGrows = false;
|
||||
}
|
||||
if (size.y > 0.0f)
|
||||
{
|
||||
window->AutoFitFramesY = 0;
|
||||
else
|
||||
window->SizeFull.y = IM_FLOOR(size.y);
|
||||
}
|
||||
else
|
||||
{
|
||||
window->AutoFitFramesY = 2;
|
||||
window->AutoFitOnlyGrows = false;
|
||||
}
|
||||
if (old_size.x != window->SizeFull.x || old_size.y != window->SizeFull.y)
|
||||
MarkIniSettingsDirty(window);
|
||||
}
|
||||
|
||||
void ImGui::SetWindowSize(const ImVec2& size, ImGuiCond cond)
|
||||
@ -10930,7 +10922,6 @@ static void ImGui::NavUpdateWindowing()
|
||||
const float move_speed = ImFloor(NAV_MOVE_SPEED * io.DeltaTime * ImMin(io.DisplayFramebufferScale.x, io.DisplayFramebufferScale.y)); // FIXME: Doesn't handle variable framerate very well
|
||||
ImGuiWindow* moving_window = g.NavWindowingTarget->RootWindow;
|
||||
SetWindowPos(moving_window, moving_window->Pos + move_delta * move_speed, ImGuiCond_Always);
|
||||
MarkIniSettingsDirty(moving_window);
|
||||
g.NavDisableMouseHover = true;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user