MCPcopy Create free account
hub / github.com/BoomingTech/Piccolo / WindowSelectViewport

Method WindowSelectViewport

engine/3rdparty/imgui/imgui.cpp:12854–12986  ·  view source on GitHub ↗

FIXME-VIEWPORT: This is all super messy and ought to be clarified or rewritten.

Source from the content-addressed store, hash-verified

12852
12853// FIXME-VIEWPORT: This is all super messy and ought to be clarified or rewritten.
12854static void ImGui::WindowSelectViewport(ImGuiWindow* window)
12855{
12856 ImGuiContext& g = *GImGui;
12857 ImGuiWindowFlags flags = window->Flags;
12858 window->ViewportAllowPlatformMonitorExtend = -1;
12859
12860 // Restore main viewport if multi-viewport is not supported by the backend
12861 ImGuiViewportP* main_viewport = (ImGuiViewportP*)(void*)GetMainViewport();
12862 if (!(g.ConfigFlagsCurrFrame & ImGuiConfigFlags_ViewportsEnable))
12863 {
12864 SetWindowViewport(window, main_viewport);
12865 return;
12866 }
12867 window->ViewportOwned = false;
12868
12869 // Appearing popups reset their viewport so they can inherit again
12870 if ((flags & (ImGuiWindowFlags_Popup | ImGuiWindowFlags_Tooltip)) && window->Appearing)
12871 {
12872 window->Viewport = NULL;
12873 window->ViewportId = 0;
12874 }
12875
12876 if ((g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasViewport) == 0)
12877 {
12878 // By default inherit from parent window
12879 if (window->Viewport == NULL && window->ParentWindow && (!window->ParentWindow->IsFallbackWindow || window->ParentWindow->WasActive))
12880 window->Viewport = window->ParentWindow->Viewport;
12881
12882 // Attempt to restore saved viewport id (= window that hasn't been activated yet), try to restore the viewport based on saved 'window->ViewportPos' restored from .ini file
12883 if (window->Viewport == NULL && window->ViewportId != 0)
12884 {
12885 window->Viewport = (ImGuiViewportP*)FindViewportByID(window->ViewportId);
12886 if (window->Viewport == NULL && window->ViewportPos.x != FLT_MAX && window->ViewportPos.y != FLT_MAX)
12887 window->Viewport = AddUpdateViewport(window, window->ID, window->ViewportPos, window->Size, ImGuiViewportFlags_None);
12888 }
12889 }
12890
12891 bool lock_viewport = false;
12892 if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasViewport)
12893 {
12894 // Code explicitly request a viewport
12895 window->Viewport = (ImGuiViewportP*)FindViewportByID(g.NextWindowData.ViewportId);
12896 window->ViewportId = g.NextWindowData.ViewportId; // Store ID even if Viewport isn't resolved yet.
12897 lock_viewport = true;
12898 }
12899 else if ((flags & ImGuiWindowFlags_ChildWindow) || (flags & ImGuiWindowFlags_ChildMenu))
12900 {
12901 // Always inherit viewport from parent window
12902 if (window->DockNode && window->DockNode->HostWindow)
12903 IM_ASSERT(window->DockNode->HostWindow->Viewport == window->ParentWindow->Viewport);
12904 window->Viewport = window->ParentWindow->Viewport;
12905 }
12906 else if (window->DockNode && window->DockNode->HostWindow)
12907 {
12908 // This covers the "always inherit viewport from parent window" case for when a window reattach to a node that was just created mid-frame
12909 window->Viewport = window->DockNode->HostWindow->Viewport;
12910 }
12911 else if (flags & ImGuiWindowFlags_Tooltip)

Callers

nothing calls this directly

Calls 1

SetWindowViewportFunction · 0.85

Tested by

no test coverage detected