Viewport: Store current dpi scale in context.

This commit is contained in:
omar 2019-10-29 16:43:11 +01:00
parent 664fb38e39
commit 32380a0112
2 changed files with 5 additions and 2 deletions

View File

@ -7391,8 +7391,7 @@ ImDrawList* ImGui::GetWindowDrawList()
float ImGui::GetWindowDpiScale() float ImGui::GetWindowDpiScale()
{ {
ImGuiContext& g = *GImGui; ImGuiContext& g = *GImGui;
IM_ASSERT(g.CurrentViewport != NULL); return g.CurrentDpiScale;
return g.CurrentViewport->DpiScale;
} }
ImGuiViewport* ImGui::GetWindowViewport() ImGuiViewport* ImGui::GetWindowViewport()
@ -10253,6 +10252,7 @@ void ImGui::SetCurrentViewport(ImGuiWindow* current_window, ImGuiViewportP* view
viewport->LastFrameActive = g.FrameCount; viewport->LastFrameActive = g.FrameCount;
if (g.CurrentViewport == viewport) if (g.CurrentViewport == viewport)
return; return;
g.CurrentDpiScale = viewport->DpiScale;
g.CurrentViewport = viewport; g.CurrentViewport = viewport;
//IMGUI_DEBUG_LOG_VIEWPORT("SetCurrentViewport changed '%s' 0x%08X\n", current_window ? current_window->Name : NULL, viewport ? viewport->ID : 0); //IMGUI_DEBUG_LOG_VIEWPORT("SetCurrentViewport changed '%s' 0x%08X\n", current_window ? current_window->Name : NULL, viewport ? viewport->ID : 0);
@ -10408,6 +10408,7 @@ static void ImGui::UpdateViewportsNewFrame()
main_viewport_platform_pos = (main_viewport->Flags & ImGuiViewportFlags_Minimized) ? main_viewport->Pos : g.PlatformIO.Platform_GetWindowPos(main_viewport); main_viewport_platform_pos = (main_viewport->Flags & ImGuiViewportFlags_Minimized) ? main_viewport->Pos : g.PlatformIO.Platform_GetWindowPos(main_viewport);
AddUpdateViewport(NULL, IMGUI_VIEWPORT_DEFAULT_ID, main_viewport_platform_pos, main_viewport_platform_size, ImGuiViewportFlags_CanHostOtherWindows); AddUpdateViewport(NULL, IMGUI_VIEWPORT_DEFAULT_ID, main_viewport_platform_pos, main_viewport_platform_size, ImGuiViewportFlags_CanHostOtherWindows);
g.CurrentDpiScale = 0.0f;
g.CurrentViewport = NULL; g.CurrentViewport = NULL;
g.MouseViewport = NULL; g.MouseViewport = NULL;
for (int n = 0; n < g.Viewports.Size; n++) for (int n = 0; n < g.Viewports.Size; n++)

View File

@ -1079,6 +1079,7 @@ struct ImGuiContext
// Viewports // Viewports
ImVector<ImGuiViewportP*> Viewports; // Active viewports (always 1+, and generally 1 unless multi-viewports are enabled). Each viewports hold their copy of ImDrawData. ImVector<ImGuiViewportP*> Viewports; // Active viewports (always 1+, and generally 1 unless multi-viewports are enabled). Each viewports hold their copy of ImDrawData.
float CurrentDpiScale; // == CurrentViewport->DpiScale
ImGuiViewportP* CurrentViewport; // We track changes of viewport (happening in Begin) so we can call Platform_OnChangedViewport() ImGuiViewportP* CurrentViewport; // We track changes of viewport (happening in Begin) so we can call Platform_OnChangedViewport()
ImGuiViewportP* MouseViewport; ImGuiViewportP* MouseViewport;
ImGuiViewportP* MouseLastHoveredViewport; // Last known viewport that was hovered by mouse (even if we are not hovering any viewport any more) + honoring the _NoInputs flag. ImGuiViewportP* MouseLastHoveredViewport; // Last known viewport that was hovered by mouse (even if we are not hovering any viewport any more) + honoring the _NoInputs flag.
@ -1271,6 +1272,7 @@ struct ImGuiContext
LastActiveId = 0; LastActiveId = 0;
LastActiveIdTimer = 0.0f; LastActiveIdTimer = 0.0f;
CurrentDpiScale = 0.0f;
CurrentViewport = NULL; CurrentViewport = NULL;
MouseViewport = MouseLastHoveredViewport = NULL; MouseViewport = MouseLastHoveredViewport = NULL;
PlatformLastFocusedViewport = 0; PlatformLastFocusedViewport = 0;