|
@@ -7185,7 +7185,7 @@ static bool ImGui::GetWindowAlwaysWantOwnViewport(ImGuiWindow* window)
|
|
static void ImGui::UpdateTryMergeWindowIntoHostViewport(ImGuiWindow* window, ImGuiViewportP* viewport)
|
|
static void ImGui::UpdateTryMergeWindowIntoHostViewport(ImGuiWindow* window, ImGuiViewportP* viewport)
|
|
{
|
|
{
|
|
ImGuiContext& g = *GImGui;
|
|
ImGuiContext& g = *GImGui;
|
|
- if (!(viewport->Flags & ImGuiViewportFlags_CanHostOtherWindows) || window->Viewport == viewport)
|
|
|
|
|
|
+ if (!(viewport->Flags & ImGuiViewportFlags_CanHostOtherWindows) || window->Viewport == viewport || viewport->PlatformIsMinimized)
|
|
return;
|
|
return;
|
|
if (!viewport->GetRect().Contains(window->Rect()))
|
|
if (!viewport->GetRect().Contains(window->Rect()))
|
|
return;
|
|
return;
|
|
@@ -7228,7 +7228,7 @@ static ImGuiViewportP* FindViewportHoveredFromPlatformWindowStack(const ImVec2 m
|
|
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) && viewport->GetRect().Contains(mouse_platform_pos))
|
|
|
|
|
|
+ if (!(viewport->Flags & ImGuiViewportFlags_NoInputs) && !viewport->PlatformIsMinimized && viewport->GetRect().Contains(mouse_platform_pos))
|
|
if (best_candidate == NULL || best_candidate->LastFrontMostStampCount < viewport->LastFrontMostStampCount)
|
|
if (best_candidate == NULL || best_candidate->LastFrontMostStampCount < viewport->LastFrontMostStampCount)
|
|
best_candidate = viewport;
|
|
best_candidate = viewport;
|
|
}
|
|
}
|
|
@@ -7277,12 +7277,18 @@ static void ImGui::UpdateViewports()
|
|
|
|
|
|
if ((g.IO.ConfigFlags & ImGuiConfigFlags_ViewportsEnable))
|
|
if ((g.IO.ConfigFlags & ImGuiConfigFlags_ViewportsEnable))
|
|
{
|
|
{
|
|
|
|
+ if (g.PlatformIO.Platform_GetWindowMinimized && (n == 0 || viewport->CreatedPlatformWindow))
|
|
|
|
+ viewport->PlatformIsMinimized = g.PlatformIO.Platform_GetWindowMinimized(viewport);
|
|
|
|
+
|
|
// Apply Position and Size (from Platform Window to ImGui) if requested.
|
|
// Apply 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->PlatformRequestMove)
|
|
|
|
- viewport->Pos = viewport->LastPlatformPos = g.PlatformIO.Platform_GetWindowPos(viewport);
|
|
|
|
- if (viewport->PlatformRequestResize)
|
|
|
|
- viewport->Size = viewport->LastPlatformSize = g.PlatformIO.Platform_GetWindowSize(viewport);
|
|
|
|
|
|
+ if (!viewport->PlatformIsMinimized)
|
|
|
|
+ {
|
|
|
|
+ if (viewport->PlatformRequestMove)
|
|
|
|
+ viewport->Pos = viewport->LastPlatformPos = g.PlatformIO.Platform_GetWindowPos(viewport);
|
|
|
|
+ if (viewport->PlatformRequestResize)
|
|
|
|
+ viewport->Size = viewport->LastPlatformSize = g.PlatformIO.Platform_GetWindowSize(viewport);
|
|
|
|
+ }
|
|
|
|
|
|
// Translate imgui windows when a Host Viewport has been moved
|
|
// Translate imgui windows when a Host Viewport has been moved
|
|
ImVec2 delta = viewport->Pos - viewport->LastPos;
|
|
ImVec2 delta = viewport->Pos - viewport->LastPos;
|
|
@@ -9866,7 +9872,8 @@ static void RenderViewportThumbnail(ImDrawList* draw_list, ImGuiViewportP* viewp
|
|
|
|
|
|
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;
|
|
- window->DrawList->AddRectFilled(bb.Min, bb.Max, ImGui::GetColorU32(ImGuiCol_Border, 0.40f));
|
|
|
|
|
|
+ float alpha_mul = viewport->PlatformIsMinimized ? 0.30f : 1.00f;
|
|
|
|
+ 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++)
|
|
{
|
|
{
|
|
ImGuiWindow* thumb_window = g.Windows[i];
|
|
ImGuiWindow* thumb_window = g.Windows[i];
|
|
@@ -9884,12 +9891,12 @@ static void RenderViewportThumbnail(ImDrawList* draw_list, ImGuiViewportP* viewp
|
|
thumb_r_scaled.ClipWithFull(bb);
|
|
thumb_r_scaled.ClipWithFull(bb);
|
|
title_r_scaled.ClipWithFull(bb);
|
|
title_r_scaled.ClipWithFull(bb);
|
|
const bool window_is_focused = (g.NavWindow && thumb_window->RootWindowForTitleBarHighlight == g.NavWindow->RootWindowForTitleBarHighlight);
|
|
const bool window_is_focused = (g.NavWindow && thumb_window->RootWindowForTitleBarHighlight == g.NavWindow->RootWindowForTitleBarHighlight);
|
|
- window->DrawList->AddRectFilled(thumb_r_scaled.Min, thumb_r_scaled.Max, ImGui::GetColorU32(ImGuiCol_WindowBg));
|
|
|
|
- window->DrawList->AddRectFilled(title_r_scaled.Min, title_r_scaled.Max, ImGui::GetColorU32(window_is_focused ? ImGuiCol_TitleBgActive : ImGuiCol_TitleBg));
|
|
|
|
- window->DrawList->AddRect(thumb_r_scaled.Min, thumb_r_scaled.Max, ImGui::GetColorU32(ImGuiCol_Border));
|
|
|
|
- window->DrawList->AddText(g.Font, g.FontSize * 1.0f, title_r_scaled.Min, ImGui::GetColorU32(ImGuiCol_Text), thumb_window->Name, ImGui::FindRenderedTextEnd(thumb_window->Name));
|
|
|
|
|
|
+ window->DrawList->AddRectFilled(thumb_r_scaled.Min, thumb_r_scaled.Max, ImGui::GetColorU32(ImGuiCol_WindowBg, alpha_mul));
|
|
|
|
+ window->DrawList->AddRectFilled(title_r_scaled.Min, title_r_scaled.Max, ImGui::GetColorU32(window_is_focused ? ImGuiCol_TitleBgActive : ImGuiCol_TitleBg, alpha_mul));
|
|
|
|
+ window->DrawList->AddRect(thumb_r_scaled.Min, thumb_r_scaled.Max, ImGui::GetColorU32(ImGuiCol_Border, alpha_mul));
|
|
|
|
+ window->DrawList->AddText(g.Font, g.FontSize * 1.0f, title_r_scaled.Min, ImGui::GetColorU32(ImGuiCol_Text, alpha_mul), thumb_window->Name, ImGui::FindRenderedTextEnd(thumb_window->Name));
|
|
}
|
|
}
|
|
- draw_list->AddRect(bb.Min, bb.Max, ImGui::GetColorU32(ImGuiCol_Border));
|
|
|
|
|
|
+ draw_list->AddRect(bb.Min, bb.Max, ImGui::GetColorU32(ImGuiCol_Border, alpha_mul));
|
|
}
|
|
}
|
|
|
|
|
|
void ImGui::ShowViewportThumbnails()
|
|
void ImGui::ShowViewportThumbnails()
|
|
@@ -10069,10 +10076,10 @@ void ImGui::ShowMetricsWindow(bool* p_open)
|
|
ImGuiWindowFlags flags = viewport->Flags;
|
|
ImGuiWindowFlags flags = viewport->Flags;
|
|
ImGui::BulletText("Pos: (%.0f,%.0f), Size: (%.0f,%.0f), Monitor: %d, DpiScale: %.0f%%", viewport->Pos.x, viewport->Pos.y, viewport->Size.x, viewport->Size.y, viewport->PlatformMonitor, viewport->DpiScale * 100.0f);
|
|
ImGui::BulletText("Pos: (%.0f,%.0f), Size: (%.0f,%.0f), Monitor: %d, DpiScale: %.0f%%", viewport->Pos.x, viewport->Pos.y, viewport->Size.x, viewport->Size.y, viewport->PlatformMonitor, viewport->DpiScale * 100.0f);
|
|
if (viewport->Idx > 0) { ImGui::SameLine(); if (ImGui::SmallButton("Reset Pos")) { viewport->Pos = ImVec2(200,200); if (viewport->Window) viewport->Window->Pos = ImVec2(200,200); } }
|
|
if (viewport->Idx > 0) { ImGui::SameLine(); if (ImGui::SmallButton("Reset Pos")) { viewport->Pos = ImVec2(200,200); if (viewport->Window) viewport->Window->Pos = ImVec2(200,200); } }
|
|
- ImGui::BulletText("Flags: 0x%04X =%s%s%s%s%s", viewport->Flags,
|
|
|
|
|
|
+ ImGui::BulletText("Flags: 0x%04X =%s%s%s%s%s%s", viewport->Flags,
|
|
(flags & ImGuiViewportFlags_CanHostOtherWindows) ? " CanHostOtherWindows" : "", (flags & ImGuiViewportFlags_NoDecoration) ? " NoDecoration" : "",
|
|
(flags & ImGuiViewportFlags_CanHostOtherWindows) ? " CanHostOtherWindows" : "", (flags & ImGuiViewportFlags_NoDecoration) ? " NoDecoration" : "",
|
|
(flags & ImGuiViewportFlags_NoFocusOnAppearing) ? " NoFocusOnAppearing" : "", (flags & ImGuiViewportFlags_NoInputs) ? " NoInputs" : "",
|
|
(flags & ImGuiViewportFlags_NoFocusOnAppearing) ? " NoFocusOnAppearing" : "", (flags & ImGuiViewportFlags_NoInputs) ? " NoInputs" : "",
|
|
- (flags & ImGuiViewportFlags_NoRendererClear) ? " NoRendererClear" : "");
|
|
|
|
|
|
+ (flags & ImGuiViewportFlags_NoRendererClear) ? " NoRendererClear" : "", viewport->PlatformIsMinimized ? ", PlatformIsMinimized" : "");
|
|
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++)
|
|
for (int draw_list_i = 0; draw_list_i < viewport->DrawDataBuilder.Layers[layer_i].Size; draw_list_i++)
|
|
for (int draw_list_i = 0; draw_list_i < viewport->DrawDataBuilder.Layers[layer_i].Size; draw_list_i++)
|
|
Funcs::NodeDrawList(NULL, viewport, viewport->DrawDataBuilder.Layers[layer_i][draw_list_i], "DrawList");
|
|
Funcs::NodeDrawList(NULL, viewport, viewport->DrawDataBuilder.Layers[layer_i][draw_list_i], "DrawList");
|