|
@@ -3211,10 +3211,13 @@ void ImGui::NewFrame()
|
|
|
{
|
|
|
if ((g.IO.BackendFlags & ImGuiBackendFlags_PlatformHasViewports) && (g.IO.BackendFlags & ImGuiBackendFlags_RendererHasViewports))
|
|
|
{
|
|
|
- IM_ASSERT((g.FrameCount == 0 || g.FrameCount == g.FrameCountPlatformEnded) && "Forgot to call UpdatePlatformWindows() at the end of the previous frame?");
|
|
|
+ IM_ASSERT((g.FrameCount == 0 || g.FrameCount == g.FrameCountPlatformEnded) && "Forgot to call UpdatePlatformWindows() in main loop after EndFrame()?");
|
|
|
IM_ASSERT(g.PlatformIO.Platform_CreateWindow != NULL && "Platform init didn't install handlers?");
|
|
|
IM_ASSERT(g.PlatformIO.Platform_DestroyWindow != NULL && "Platform init didn't install handlers?");
|
|
|
IM_ASSERT(g.PlatformIO.Platform_GetWindowPos != NULL && "Platform init didn't install handlers?");
|
|
|
+ IM_ASSERT(g.PlatformIO.Platform_SetWindowPos != NULL && "Platform init didn't install handlers?");
|
|
|
+ IM_ASSERT(g.PlatformIO.Platform_GetWindowSize != NULL && "Platform init didn't install handlers?");
|
|
|
+ IM_ASSERT(g.PlatformIO.Platform_SetWindowSize != NULL && "Platform init didn't install handlers?");
|
|
|
IM_ASSERT((g.Viewports[0]->PlatformUserData != NULL || g.Viewports[0]->PlatformHandle != NULL) && "Platform init didn't setup main viewport.");
|
|
|
#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
|
|
|
IM_ASSERT(g.IO.RenderDrawListsFn == NULL); // Call ImGui::Render() then pass ImGui::GetDrawData() yourself to your render function!
|
|
@@ -5028,7 +5031,7 @@ bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
|
|
|
{
|
|
|
// Late create viewport, based on the assumption that with our calculations, the DPI will be known ahead (same as the DPI of the selection done in UpdateSelectWindowViewport)
|
|
|
//ImGuiViewport* old_viewport = window->Viewport;
|
|
|
- ImGuiViewportFlags viewport_flags = ImGuiViewportFlags_NoDecoration | ImGuiViewportFlags_NoFocusOnAppearing | ((window->Flags & ImGuiWindowFlags_NoInputs) ? ImGuiViewportFlags_NoInputs : 0);
|
|
|
+ ImGuiViewportFlags viewport_flags = ImGuiViewportFlags_NoFocusOnAppearing | ((window->Flags & ImGuiWindowFlags_NoInputs) ? ImGuiViewportFlags_NoInputs : 0);
|
|
|
window->Viewport = AddUpdateViewport(window, window->ID, window->Pos, window->Size, viewport_flags);
|
|
|
|
|
|
// FIXME-DPI
|
|
@@ -7191,6 +7194,7 @@ static ImGuiViewportP* FindViewportHoveredFromPlatformWindowStack(const ImVec2 m
|
|
|
return best_candidate;
|
|
|
}
|
|
|
|
|
|
+// Called in NewFrame()
|
|
|
static void ImGui::UpdateViewports()
|
|
|
{
|
|
|
ImGuiContext& g = *GImGui;
|
|
@@ -7413,7 +7417,7 @@ static void ImGui::UpdateSelectWindowViewport(ImGuiWindow* window)
|
|
|
{
|
|
|
window->Viewport = FindViewportByID(window->ViewportId);
|
|
|
if (window->Viewport == NULL && window->ViewportPos.x != FLT_MAX && window->ViewportPos.y != FLT_MAX)
|
|
|
- window->Viewport = AddUpdateViewport(window, window->ID, window->ViewportPos, window->Size, ImGuiViewportFlags_NoDecoration);
|
|
|
+ window->Viewport = AddUpdateViewport(window, window->ID, window->ViewportPos, window->Size, ImGuiViewportFlags_None);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -7443,11 +7447,11 @@ static void ImGui::UpdateSelectWindowViewport(ImGuiWindow* window)
|
|
|
bool leave_host_viewport = has_viewport && !own_viewport && !window->Viewport->GetRect().Contains(window->Rect());
|
|
|
bool move_from_own_viewport = has_viewport && own_viewport && !(window->Viewport->Flags & ImGuiViewportFlags_NoInputs);
|
|
|
if (!has_viewport || leave_host_viewport || move_from_own_viewport)
|
|
|
- window->Viewport = AddUpdateViewport(window, window->ID, window->Pos, window->Size, ImGuiViewportFlags_NoDecoration | ImGuiViewportFlags_NoFocusOnAppearing | ImGuiViewportFlags_NoInputs);
|
|
|
+ window->Viewport = AddUpdateViewport(window, window->ID, window->Pos, window->Size, ImGuiViewportFlags_NoFocusOnAppearing | ImGuiViewportFlags_NoInputs);
|
|
|
}
|
|
|
else if (GetWindowAlwaysWantOwnViewport(window))
|
|
|
{
|
|
|
- window->Viewport = AddUpdateViewport(window, window->ID, window->Pos, window->Size, ImGuiViewportFlags_NoDecoration);
|
|
|
+ window->Viewport = AddUpdateViewport(window, window->ID, window->Pos, window->Size, ImGuiViewportFlags_None);
|
|
|
}
|
|
|
|
|
|
// Mark window as allowed to protrude outside of its viewport and into the current monitor
|
|
@@ -7472,16 +7476,15 @@ static void ImGui::UpdateSelectWindowViewport(ImGuiWindow* window)
|
|
|
|
|
|
// Update flags
|
|
|
window->ViewportOwned = (window == window->Viewport->Window);
|
|
|
- if (window->ViewportOwned)
|
|
|
- window->Viewport->Flags |= ImGuiViewportFlags_NoDecoration;
|
|
|
|
|
|
// If the OS window has a title bar, hide our imgui title bar
|
|
|
- if (window->ViewportOwned && !(window->Viewport->Flags & ImGuiViewportFlags_NoDecoration))
|
|
|
- window->Flags |= ImGuiWindowFlags_NoTitleBar;
|
|
|
+ //if (window->ViewportOwned && !(window->Viewport->Flags & ImGuiViewportFlags_NoDecoration))
|
|
|
+ // window->Flags |= ImGuiWindowFlags_NoTitleBar;
|
|
|
|
|
|
window->ViewportId = window->Viewport->ID;
|
|
|
}
|
|
|
|
|
|
+// Called by imgui at the end of the main loop, after EndFrame()
|
|
|
void ImGui::UpdatePlatformWindows()
|
|
|
{
|
|
|
ImGuiContext& g = *GImGui;
|
|
@@ -7515,13 +7518,17 @@ void ImGui::UpdatePlatformWindows()
|
|
|
if (viewport->Size.x <= 0 || viewport->Size.y <= 0)
|
|
|
continue;
|
|
|
|
|
|
- // Update viewport flags
|
|
|
+ // Update common viewport flags for owned viewports
|
|
|
if (viewport->Window != NULL)
|
|
|
{
|
|
|
- bool topmost = (viewport->Window->Flags & ImGuiWindowFlags_Tooltip) != 0;
|
|
|
- bool no_task_bar_icon = (g.IO.ConfigFlags & ImGuiConfigFlags_ViewportsNoTaskBarIcons) != 0 || (viewport->Window->Flags & (ImGuiWindowFlags_ChildMenu | ImGuiWindowFlags_Tooltip | ImGuiWindowFlags_Popup)) != 0;
|
|
|
- viewport->Flags = topmost ? (viewport->Flags | ImGuiViewportFlags_TopMost) : (viewport->Flags & ~ImGuiViewportFlags_TopMost);
|
|
|
- viewport->Flags = no_task_bar_icon ? (viewport->Flags | ImGuiViewportFlags_NoTaskBarIcon) : (viewport->Flags & ~ImGuiViewportFlags_NoTaskBarIcon);
|
|
|
+ ImGuiViewportFlags flags = viewport->Flags & ~(ImGuiViewportFlags_TopMost | ImGuiViewportFlags_NoTaskBarIcon | ImGuiViewportFlags_NoDecoration);
|
|
|
+ if (viewport->Window->Flags & ImGuiWindowFlags_Tooltip)
|
|
|
+ flags |= ImGuiViewportFlags_TopMost;
|
|
|
+ if ((g.IO.ConfigFlags & ImGuiConfigFlags_ViewportsNoTaskBarIcon) != 0 || (viewport->Window->Flags & (ImGuiWindowFlags_ChildMenu | ImGuiWindowFlags_Tooltip | ImGuiWindowFlags_Popup)) != 0)
|
|
|
+ flags |= ImGuiViewportFlags_NoTaskBarIcon;
|
|
|
+ if ((g.IO.ConfigFlags & ImGuiConfigFlags_ViewportsDecoration) == 0 || (viewport->Window->Flags & (ImGuiWindowFlags_ChildMenu | ImGuiWindowFlags_Tooltip | ImGuiWindowFlags_Popup)) != 0)
|
|
|
+ flags |= ImGuiViewportFlags_NoDecoration;
|
|
|
+ viewport->Flags = flags;
|
|
|
}
|
|
|
|
|
|
// Create window
|