diff --git a/plugins/Cardinal/src/ImGuiWidget.cpp b/plugins/Cardinal/src/ImGuiWidget.cpp index fd4b479..9233036 100644 --- a/plugins/Cardinal/src/ImGuiWidget.cpp +++ b/plugins/Cardinal/src/ImGuiWidget.cpp @@ -75,6 +75,7 @@ struct ImGuiWidget::PrivateData { bool useMonospacedFont = false; float originalScaleFactor = 0.0f; float scaleFactor = 0.0f; + double lastFrameTime = 0.0; PrivateData() { @@ -135,6 +136,32 @@ struct ImGuiWidget::PrivateData { } } + void resetEverything(const bool doInit) + { + if (created) + { + ImGui::SetCurrentContext(context); + ImGui_ImplOpenGL2_Shutdown(); + created = false; + } + + fontGenerated = false; + originalScaleFactor = 0.0f; + scaleFactor = 0.0f; + lastFrameTime = 0.0; + ImGui::DestroyContext(context); + + context = ImGui::CreateContext(); + ImGui::SetCurrentContext(context); + setupIO(); + + if (doInit) + { + ImGui_ImplOpenGL2_Init(); + created = true; + } + } + void resetStyle() { ImGuiStyle& style(ImGui::GetStyle()); @@ -351,32 +378,17 @@ void ImGuiWidget::onSelectText(const SelectTextEvent& e) void ImGuiWidget::drawFramebuffer() { - const float scaleFactor = APP->window->pixelRatio; + const float scaleFactor = APP->window->pixelRatio * std::max(1.0f, APP->scene->rack->getAbsoluteZoom()); + + if (d_isNotEqual(imData->scaleFactor, scaleFactor)) + imData->resetEverything(true); drawFramebufferCommon(getFramebufferSize(), scaleFactor); } void ImGuiWidget::drawFramebufferForBrowserPreview() { - if (imData->created) - { - ImGui::SetCurrentContext(imData->context); - ImGui_ImplOpenGL2_Shutdown(); - ImGui::DestroyContext(imData->context); - - imData->created = false; - imData->fontGenerated = false; - imData->originalScaleFactor = 0.0f; - imData->scaleFactor = 0.0f; - } - - imData->context = ImGui::CreateContext(); - ImGui::SetCurrentContext(imData->context); - setupIO(); - - ImGui_ImplOpenGL2_Init(); - imData->created = true; - + imData->resetEverything(true); drawFramebufferCommon(box.size.mult(oversample), oversample); } @@ -422,7 +434,9 @@ void ImGuiWidget::drawFramebufferCommon(const Vec& fbSize, const float scaleFact imData->created = true; } - // TODO io.DeltaTime + const double time = glfwGetTime(); + io.DeltaTime = time - imData->lastFrameTime; + imData->lastFrameTime = time; ImGui_ImplOpenGL2_NewFrame(); ImGui::NewFrame(); diff --git a/plugins/Cardinal/src/ImGuiWidget.hpp b/plugins/Cardinal/src/ImGuiWidget.hpp index c3c61b4..a283701 100644 --- a/plugins/Cardinal/src/ImGuiWidget.hpp +++ b/plugins/Cardinal/src/ImGuiWidget.hpp @@ -39,6 +39,7 @@ protected: void onButton(const ButtonEvent& e) override; void onSelectKey(const SelectKeyEvent& e) override; void onSelectText(const SelectTextEvent& e) override; + void setAsCurrentContext(); void setUseMonospaceFont(bool useMonoFont = true);