MCPcopy Create free account
hub / github.com/InteractiveComputerGraphics/SPlisHSPlasH / RenderDimmedBackgrounds

Method RenderDimmedBackgrounds

extern/imgui/imgui.cpp:5375–5430  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

5373}
5374
5375static void ImGui::RenderDimmedBackgrounds()
5376{
5377 ImGuiContext& g = *GImGui;
5378 ImGuiWindow* modal_window = GetTopMostAndVisiblePopupModal();
5379 if (g.DimBgRatio <= 0.0f && g.NavWindowingHighlightAlpha <= 0.0f)
5380 return;
5381 const bool dim_bg_for_modal = (modal_window != NULL);
5382 const bool dim_bg_for_window_list = (g.NavWindowingTargetAnim != NULL && g.NavWindowingTargetAnim->Active);
5383 if (!dim_bg_for_modal && !dim_bg_for_window_list)
5384 return;
5385
5386 ImGuiViewport* viewports_already_dimmed[2] = { NULL, NULL };
5387 if (dim_bg_for_modal)
5388 {
5389 // Draw dimming behind modal or a begin stack child, whichever comes first in draw order.
5390 ImGuiWindow* dim_behind_window = FindBottomMostVisibleWindowWithinBeginStack(modal_window);
5391 RenderDimmedBackgroundBehindWindow(dim_behind_window, GetColorU32(ImGuiCol_ModalWindowDimBg, g.DimBgRatio));
5392 viewports_already_dimmed[0] = modal_window->Viewport;
5393 }
5394 else if (dim_bg_for_window_list)
5395 {
5396 // Draw dimming behind CTRL+Tab target window and behind CTRL+Tab UI window
5397 RenderDimmedBackgroundBehindWindow(g.NavWindowingTargetAnim, GetColorU32(ImGuiCol_NavWindowingDimBg, g.DimBgRatio));
5398 if (g.NavWindowingListWindow != NULL && g.NavWindowingListWindow->Viewport && g.NavWindowingListWindow->Viewport != g.NavWindowingTargetAnim->Viewport)
5399 RenderDimmedBackgroundBehindWindow(g.NavWindowingListWindow, GetColorU32(ImGuiCol_NavWindowingDimBg, g.DimBgRatio));
5400 viewports_already_dimmed[0] = g.NavWindowingTargetAnim->Viewport;
5401 viewports_already_dimmed[1] = g.NavWindowingListWindow ? g.NavWindowingListWindow->Viewport : NULL;
5402
5403 // Draw border around CTRL+Tab target window
5404 ImGuiWindow* window = g.NavWindowingTargetAnim;
5405 ImGuiViewport* viewport = window->Viewport;
5406 float distance = g.FontSize;
5407 ImRect bb = window->Rect();
5408 bb.Expand(distance);
5409 if (bb.GetWidth() >= viewport->Size.x && bb.GetHeight() >= viewport->Size.y)
5410 bb.Expand(-distance - 1.0f); // If a window fits the entire viewport, adjust its highlight inward
5411 if (window->DrawList->CmdBuffer.Size == 0)
5412 window->DrawList->AddDrawCmd();
5413 window->DrawList->PushClipRect(viewport->Pos, viewport->Pos + viewport->Size);
5414 window->DrawList->AddRect(bb.Min, bb.Max, GetColorU32(ImGuiCol_NavWindowingHighlight, g.NavWindowingHighlightAlpha), window->WindowRounding, 0, 3.0f);
5415 window->DrawList->PopClipRect();
5416 }
5417
5418 // Draw dimming background on _other_ viewports than the ones our windows are in
5419 for (int viewport_n = 0; viewport_n < g.Viewports.Size; viewport_n++)
5420 {
5421 ImGuiViewportP* viewport = g.Viewports[viewport_n];
5422 if (viewport == viewports_already_dimmed[0] || viewport == viewports_already_dimmed[1])
5423 continue;
5424 if (modal_window && viewport->Window && IsWindowAbove(viewport->Window, modal_window))
5425 continue;
5426 ImDrawList* draw_list = GetForegroundDrawList(viewport);
5427 const ImU32 dim_bg_col = GetColorU32(dim_bg_for_modal ? ImGuiCol_ModalWindowDimBg : ImGuiCol_NavWindowingDimBg, g.DimBgRatio);
5428 draw_list->AddRectFilled(viewport->Pos, viewport->Pos + viewport->Size, dim_bg_col);
5429 }
5430}
5431
5432// This is normally called by Render(). You may want to call it directly if you want to avoid calling Render() but the gain will be very minimal.

Callers

nothing calls this directly

Calls 6

GetForegroundDrawListFunction · 0.85
AddDrawCmdMethod · 0.80
AddRectMethod · 0.80
AddRectFilledMethod · 0.80
PushClipRectMethod · 0.45
PopClipRectMethod · 0.45

Tested by

no test coverage detected