|
@@ -4956,7 +4956,7 @@ static void SetupViewportDrawData(ImGuiViewportP* viewport, ImVector<ImDrawList*
|
|
// FIXME: Note that we however do NOT attempt to report "zero drawlist / vertices" into the ImDrawData structure.
|
|
// FIXME: Note that we however do NOT attempt to report "zero drawlist / vertices" into the ImDrawData structure.
|
|
// This is because the work has been done already, and its wasted! We should fix that and add optimizations for
|
|
// This is because the work has been done already, and its wasted! We should fix that and add optimizations for
|
|
// it earlier in the pipeline, rather than pretend to hide the data at the end of the pipeline.
|
|
// it earlier in the pipeline, rather than pretend to hide the data at the end of the pipeline.
|
|
- const bool is_minimized = (viewport->Flags & ImGuiViewportFlags_Minimized) != 0;
|
|
|
|
|
|
+ const bool is_minimized = (viewport->Flags & ImGuiViewportFlags_IsMinimized) != 0;
|
|
|
|
|
|
ImGuiIO& io = ImGui::GetIO();
|
|
ImGuiIO& io = ImGui::GetIO();
|
|
ImDrawData* draw_data = &viewport->DrawDataP;
|
|
ImDrawData* draw_data = &viewport->DrawDataP;
|
|
@@ -6840,7 +6840,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
|
window->Pos = FindBestWindowPosForPopup(window);
|
|
window->Pos = FindBestWindowPosForPopup(window);
|
|
|
|
|
|
// Late create viewport if we don't fit within our current host viewport.
|
|
// Late create viewport if we don't fit within our current host viewport.
|
|
- if (window->ViewportAllowPlatformMonitorExtend >= 0 && !window->ViewportOwned && !(window->Viewport->Flags & ImGuiViewportFlags_Minimized))
|
|
|
|
|
|
+ if (window->ViewportAllowPlatformMonitorExtend >= 0 && !window->ViewportOwned && !(window->Viewport->Flags & ImGuiViewportFlags_IsMinimized))
|
|
if (!window->Viewport->GetMainRect().Contains(window->Rect()))
|
|
if (!window->Viewport->GetMainRect().Contains(window->Rect()))
|
|
{
|
|
{
|
|
// This is based on the assumption that the DPI will be known ahead (same as the DPI of the selection done in UpdateSelectWindowViewport)
|
|
// This is based on the assumption that the DPI will be known ahead (same as the DPI of the selection done in UpdateSelectWindowViewport)
|
|
@@ -13776,7 +13776,7 @@ static bool ImGui::UpdateTryMergeWindowIntoHostViewport(ImGuiWindow* window, ImG
|
|
return false;
|
|
return false;
|
|
if ((viewport->Flags & ImGuiViewportFlags_CanHostOtherWindows) == 0)
|
|
if ((viewport->Flags & ImGuiViewportFlags_CanHostOtherWindows) == 0)
|
|
return false;
|
|
return false;
|
|
- if ((viewport->Flags & ImGuiViewportFlags_Minimized) != 0)
|
|
|
|
|
|
+ if ((viewport->Flags & ImGuiViewportFlags_IsMinimized) != 0)
|
|
return false;
|
|
return false;
|
|
if (!viewport->GetMainRect().Contains(window->Rect()))
|
|
if (!viewport->GetMainRect().Contains(window->Rect()))
|
|
return false;
|
|
return false;
|
|
@@ -13859,8 +13859,8 @@ ImGuiViewportP* ImGui::FindHoveredViewportFromPlatformWindowStack(const ImVec2&
|
|
for (int n = 0; n < g.Viewports.Size; n++)
|
|
for (int n = 0; n < g.Viewports.Size; n++)
|
|
{
|
|
{
|
|
ImGuiViewportP* viewport = g.Viewports[n];
|
|
ImGuiViewportP* viewport = g.Viewports[n];
|
|
- if (!(viewport->Flags & (ImGuiViewportFlags_NoInputs | ImGuiViewportFlags_Minimized)) && viewport->GetMainRect().Contains(mouse_platform_pos))
|
|
|
|
- if (best_candidate == NULL || best_candidate->LastFrontMostStampCount < viewport->LastFrontMostStampCount)
|
|
|
|
|
|
+ if (!(viewport->Flags & (ImGuiViewportFlags_NoInputs | ImGuiViewportFlags_IsMinimized)) && viewport->GetMainRect().Contains(mouse_platform_pos))
|
|
|
|
+ if (best_candidate == NULL || best_candidate->LastFocusedStampCount < viewport->LastFocusedStampCount)
|
|
best_candidate = viewport;
|
|
best_candidate = viewport;
|
|
}
|
|
}
|
|
return best_candidate;
|
|
return best_candidate;
|
|
@@ -13885,9 +13885,9 @@ static void ImGui::UpdateViewportsNewFrame()
|
|
{
|
|
{
|
|
bool minimized = g.PlatformIO.Platform_GetWindowMinimized(viewport);
|
|
bool minimized = g.PlatformIO.Platform_GetWindowMinimized(viewport);
|
|
if (minimized)
|
|
if (minimized)
|
|
- viewport->Flags |= ImGuiViewportFlags_Minimized;
|
|
|
|
|
|
+ viewport->Flags |= ImGuiViewportFlags_IsMinimized;
|
|
else
|
|
else
|
|
- viewport->Flags &= ~ImGuiViewportFlags_Minimized;
|
|
|
|
|
|
+ viewport->Flags &= ~ImGuiViewportFlags_IsMinimized;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -13899,7 +13899,7 @@ static void ImGui::UpdateViewportsNewFrame()
|
|
IM_ASSERT(main_viewport->Window == NULL);
|
|
IM_ASSERT(main_viewport->Window == NULL);
|
|
ImVec2 main_viewport_pos = viewports_enabled ? g.PlatformIO.Platform_GetWindowPos(main_viewport) : ImVec2(0.0f, 0.0f);
|
|
ImVec2 main_viewport_pos = viewports_enabled ? g.PlatformIO.Platform_GetWindowPos(main_viewport) : ImVec2(0.0f, 0.0f);
|
|
ImVec2 main_viewport_size = g.IO.DisplaySize;
|
|
ImVec2 main_viewport_size = g.IO.DisplaySize;
|
|
- if (viewports_enabled && (main_viewport->Flags & ImGuiViewportFlags_Minimized))
|
|
|
|
|
|
+ if (viewports_enabled && (main_viewport->Flags & ImGuiViewportFlags_IsMinimized))
|
|
{
|
|
{
|
|
main_viewport_pos = main_viewport->Pos; // Preserve last pos/size when minimized (FIXME: We don't do the same for Size outside of the viewport path)
|
|
main_viewport_pos = main_viewport->Pos; // Preserve last pos/size when minimized (FIXME: We don't do the same for Size outside of the viewport path)
|
|
main_viewport_size = main_viewport->Size;
|
|
main_viewport_size = main_viewport->Size;
|
|
@@ -13927,7 +13927,7 @@ static void ImGui::UpdateViewportsNewFrame()
|
|
{
|
|
{
|
|
// Update Position and Size (from Platform Window to ImGui) if requested.
|
|
// Update Position and Size (from Platform Window to ImGui) if requested.
|
|
// We do it early in the frame instead of waiting for UpdatePlatformWindows() to avoid a frame of lag when moving/resizing using OS facilities.
|
|
// We do it early in the frame instead of waiting for UpdatePlatformWindows() to avoid a frame of lag when moving/resizing using OS facilities.
|
|
- if (!(viewport->Flags & ImGuiViewportFlags_Minimized) && platform_funcs_available)
|
|
|
|
|
|
+ if (!(viewport->Flags & ImGuiViewportFlags_IsMinimized) && platform_funcs_available)
|
|
{
|
|
{
|
|
// Viewport->WorkPos and WorkSize will be updated below
|
|
// Viewport->WorkPos and WorkSize will be updated below
|
|
if (viewport->PlatformRequestMove)
|
|
if (viewport->PlatformRequestMove)
|
|
@@ -14088,7 +14088,7 @@ ImGuiViewportP* ImGui::AddUpdateViewport(ImGuiWindow* window, ImGuiID id, const
|
|
viewport->Pos = pos;
|
|
viewport->Pos = pos;
|
|
if (!viewport->PlatformRequestResize || viewport->ID == IMGUI_VIEWPORT_DEFAULT_ID)
|
|
if (!viewport->PlatformRequestResize || viewport->ID == IMGUI_VIEWPORT_DEFAULT_ID)
|
|
viewport->Size = size;
|
|
viewport->Size = size;
|
|
- viewport->Flags = flags | (viewport->Flags & ImGuiViewportFlags_Minimized); // Preserve existing flags
|
|
|
|
|
|
+ viewport->Flags = flags | (viewport->Flags & ImGuiViewportFlags_IsMinimized); // Preserve existing flags
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
@@ -14465,9 +14465,9 @@ void ImGui::UpdatePlatformWindows()
|
|
|
|
|
|
// Even without focus, we assume the window becomes front-most.
|
|
// Even without focus, we assume the window becomes front-most.
|
|
// This is useful for our platform z-order heuristic when io.MouseHoveredViewport is not available.
|
|
// This is useful for our platform z-order heuristic when io.MouseHoveredViewport is not available.
|
|
- if (viewport->LastFrontMostStampCount != g.ViewportFrontMostStampCount)
|
|
|
|
- viewport->LastFrontMostStampCount = ++g.ViewportFrontMostStampCount;
|
|
|
|
- }
|
|
|
|
|
|
+ if (viewport->LastFocusedStampCount != g.ViewportFocusedStampCount)
|
|
|
|
+ viewport->LastFocusedStampCount = ++g.ViewportFocusedStampCount;
|
|
|
|
+ }
|
|
|
|
|
|
// Clear request flags
|
|
// Clear request flags
|
|
viewport->ClearRequestFlags();
|
|
viewport->ClearRequestFlags();
|
|
@@ -14487,14 +14487,17 @@ void ImGui::UpdatePlatformWindows()
|
|
focused_viewport = viewport;
|
|
focused_viewport = viewport;
|
|
}
|
|
}
|
|
|
|
|
|
- // Store a tag so we can infer z-order easily from all our windows
|
|
|
|
- // We compare PlatformLastFocusedViewportId so newly created viewports with _NoFocusOnAppearing flag
|
|
|
|
- // will keep the front most stamp instead of losing it back to their parent viewport.
|
|
|
|
|
|
+ // Focused viewport has changed?
|
|
if (focused_viewport && g.PlatformLastFocusedViewportId != focused_viewport->ID)
|
|
if (focused_viewport && g.PlatformLastFocusedViewportId != focused_viewport->ID)
|
|
{
|
|
{
|
|
- if (focused_viewport->LastFrontMostStampCount != g.ViewportFrontMostStampCount)
|
|
|
|
- focused_viewport->LastFrontMostStampCount = ++g.ViewportFrontMostStampCount;
|
|
|
|
|
|
+ // Store a tag so we can infer z-order easily from all our windows
|
|
|
|
+ // We compare PlatformLastFocusedViewportId so newly created viewports with _NoFocusOnAppearing flag
|
|
|
|
+ // will keep the front most stamp instead of losing it back to their parent viewport.
|
|
|
|
+ if (focused_viewport->LastFocusedStampCount != g.ViewportFocusedStampCount)
|
|
|
|
+ focused_viewport->LastFocusedStampCount = ++g.ViewportFocusedStampCount;
|
|
g.PlatformLastFocusedViewportId = focused_viewport->ID;
|
|
g.PlatformLastFocusedViewportId = focused_viewport->ID;
|
|
|
|
+
|
|
|
|
+ // Focus associated dear imgui window (#6299)
|
|
if (focused_viewport->Window != NULL)
|
|
if (focused_viewport->Window != NULL)
|
|
FocusWindow(NavRestoreLastChildNavWindow(focused_viewport->Window));
|
|
FocusWindow(NavRestoreLastChildNavWindow(focused_viewport->Window));
|
|
else
|
|
else
|
|
@@ -14522,7 +14525,7 @@ void ImGui::RenderPlatformWindowsDefault(void* platform_render_arg, void* render
|
|
for (int i = 1; i < platform_io.Viewports.Size; i++)
|
|
for (int i = 1; i < platform_io.Viewports.Size; i++)
|
|
{
|
|
{
|
|
ImGuiViewport* viewport = platform_io.Viewports[i];
|
|
ImGuiViewport* viewport = platform_io.Viewports[i];
|
|
- if (viewport->Flags & ImGuiViewportFlags_Minimized)
|
|
|
|
|
|
+ if (viewport->Flags & ImGuiViewportFlags_IsMinimized)
|
|
continue;
|
|
continue;
|
|
if (platform_io.Platform_RenderWindow) platform_io.Platform_RenderWindow(viewport, platform_render_arg);
|
|
if (platform_io.Platform_RenderWindow) platform_io.Platform_RenderWindow(viewport, platform_render_arg);
|
|
if (platform_io.Renderer_RenderWindow) platform_io.Renderer_RenderWindow(viewport, renderer_render_arg);
|
|
if (platform_io.Renderer_RenderWindow) platform_io.Renderer_RenderWindow(viewport, renderer_render_arg);
|
|
@@ -14530,7 +14533,7 @@ void ImGui::RenderPlatformWindowsDefault(void* platform_render_arg, void* render
|
|
for (int i = 1; i < platform_io.Viewports.Size; i++)
|
|
for (int i = 1; i < platform_io.Viewports.Size; i++)
|
|
{
|
|
{
|
|
ImGuiViewport* viewport = platform_io.Viewports[i];
|
|
ImGuiViewport* viewport = platform_io.Viewports[i];
|
|
- if (viewport->Flags & ImGuiViewportFlags_Minimized)
|
|
|
|
|
|
+ if (viewport->Flags & ImGuiViewportFlags_IsMinimized)
|
|
continue;
|
|
continue;
|
|
if (platform_io.Platform_SwapBuffers) platform_io.Platform_SwapBuffers(viewport, platform_render_arg);
|
|
if (platform_io.Platform_SwapBuffers) platform_io.Platform_SwapBuffers(viewport, platform_render_arg);
|
|
if (platform_io.Renderer_SwapBuffers) platform_io.Renderer_SwapBuffers(viewport, renderer_render_arg);
|
|
if (platform_io.Renderer_SwapBuffers) platform_io.Renderer_SwapBuffers(viewport, renderer_render_arg);
|
|
@@ -18736,7 +18739,7 @@ void ImGui::DebugRenderViewportThumbnail(ImDrawList* draw_list, ImGuiViewportP*
|
|
|
|
|
|
ImVec2 scale = bb.GetSize() / viewport->Size;
|
|
ImVec2 scale = bb.GetSize() / viewport->Size;
|
|
ImVec2 off = bb.Min - viewport->Pos * scale;
|
|
ImVec2 off = bb.Min - viewport->Pos * scale;
|
|
- float alpha_mul = (viewport->Flags & ImGuiViewportFlags_Minimized) ? 0.30f : 1.00f;
|
|
|
|
|
|
+ float alpha_mul = (viewport->Flags & ImGuiViewportFlags_IsMinimized) ? 0.30f : 1.00f;
|
|
window->DrawList->AddRectFilled(bb.Min, bb.Max, ImGui::GetColorU32(ImGuiCol_Border, alpha_mul * 0.40f));
|
|
window->DrawList->AddRectFilled(bb.Min, bb.Max, ImGui::GetColorU32(ImGuiCol_Border, alpha_mul * 0.40f));
|
|
for (int i = 0; i != g.Windows.Size; i++)
|
|
for (int i = 0; i != g.Windows.Size; i++)
|
|
{
|
|
{
|
|
@@ -18782,11 +18785,11 @@ static void RenderViewportsThumbnails()
|
|
ImGui::Dummy(bb_full.GetSize() * SCALE);
|
|
ImGui::Dummy(bb_full.GetSize() * SCALE);
|
|
}
|
|
}
|
|
|
|
|
|
-static int IMGUI_CDECL ViewportComparerByFrontMostStampCount(const void* lhs, const void* rhs)
|
|
|
|
|
|
+static int IMGUI_CDECL ViewportComparerByLastFocusedStampCount(const void* lhs, const void* rhs)
|
|
{
|
|
{
|
|
const ImGuiViewportP* a = *(const ImGuiViewportP* const*)lhs;
|
|
const ImGuiViewportP* a = *(const ImGuiViewportP* const*)lhs;
|
|
const ImGuiViewportP* b = *(const ImGuiViewportP* const*)rhs;
|
|
const ImGuiViewportP* b = *(const ImGuiViewportP* const*)rhs;
|
|
- return b->LastFrontMostStampCount - a->LastFrontMostStampCount;
|
|
|
|
|
|
+ return b->LastFocusedStampCount - a->LastFocusedStampCount;
|
|
}
|
|
}
|
|
|
|
|
|
// Draw an arbitrary US keyboard layout to visualize translated keys
|
|
// Draw an arbitrary US keyboard layout to visualize translated keys
|
|
@@ -19159,10 +19162,10 @@ void ImGui::ShowMetricsWindow(bool* p_open)
|
|
viewports.resize(g.Viewports.Size);
|
|
viewports.resize(g.Viewports.Size);
|
|
memcpy(viewports.Data, g.Viewports.Data, g.Viewports.size_in_bytes());
|
|
memcpy(viewports.Data, g.Viewports.Data, g.Viewports.size_in_bytes());
|
|
if (viewports.Size > 1)
|
|
if (viewports.Size > 1)
|
|
- ImQsort(viewports.Data, viewports.Size, sizeof(ImGuiViewport*), ViewportComparerByFrontMostStampCount);
|
|
|
|
|
|
+ ImQsort(viewports.Data, viewports.Size, sizeof(ImGuiViewport*), ViewportComparerByLastFocusedStampCount);
|
|
for (ImGuiViewportP* viewport : viewports)
|
|
for (ImGuiViewportP* viewport : viewports)
|
|
- BulletText("Viewport #%d, ID: 0x%08X, FrontMostStampCount = %08d, PlatformFocused = %s, Window: \"%s\"",
|
|
|
|
- viewport->Idx, viewport->ID, viewport->LastFrontMostStampCount,
|
|
|
|
|
|
+ BulletText("Viewport #%d, ID: 0x%08X, LastFocused = %08d, PlatformFocused = %s, Window: \"%s\"",
|
|
|
|
+ viewport->Idx, viewport->ID, viewport->LastFocusedStampCount,
|
|
(g.PlatformIO.Platform_GetWindowFocus && viewport->PlatformWindowCreated) ? (g.PlatformIO.Platform_GetWindowFocus(viewport) ? "1" : "0") : "N/A",
|
|
(g.PlatformIO.Platform_GetWindowFocus && viewport->PlatformWindowCreated) ? (g.PlatformIO.Platform_GetWindowFocus(viewport) ? "1" : "0") : "N/A",
|
|
viewport->Window ? viewport->Window->Name : "N/A");
|
|
viewport->Window ? viewport->Window->Name : "N/A");
|
|
TreePop();
|
|
TreePop();
|
|
@@ -19923,7 +19926,7 @@ void ImGui::DebugNodeViewport(ImGuiViewportP* viewport)
|
|
(flags & ImGuiViewportFlags_NoInputs) ? " NoInputs" : "",
|
|
(flags & ImGuiViewportFlags_NoInputs) ? " NoInputs" : "",
|
|
(flags & ImGuiViewportFlags_NoRendererClear) ? " NoRendererClear" : "",
|
|
(flags & ImGuiViewportFlags_NoRendererClear) ? " NoRendererClear" : "",
|
|
(flags & ImGuiViewportFlags_TopMost) ? " TopMost" : "",
|
|
(flags & ImGuiViewportFlags_TopMost) ? " TopMost" : "",
|
|
- (flags & ImGuiViewportFlags_Minimized) ? " Minimized" : "",
|
|
|
|
|
|
+ (flags & ImGuiViewportFlags_IsMinimized) ? " IsMinimized" : "",
|
|
(flags & ImGuiViewportFlags_NoAutoMerge) ? " NoAutoMerge" : "",
|
|
(flags & ImGuiViewportFlags_NoAutoMerge) ? " NoAutoMerge" : "",
|
|
(flags & ImGuiViewportFlags_CanHostOtherWindows) ? " CanHostOtherWindows" : "");
|
|
(flags & ImGuiViewportFlags_CanHostOtherWindows) ? " CanHostOtherWindows" : "");
|
|
for (int layer_i = 0; layer_i < IM_ARRAYSIZE(viewport->DrawDataBuilder.Layers); layer_i++)
|
|
for (int layer_i = 0; layer_i < IM_ARRAYSIZE(viewport->DrawDataBuilder.Layers); layer_i++)
|