diff --git a/src/olympic/studio/applib/src/app.cpp b/src/olympic/studio/applib/src/app.cpp index 210590ac..6d04746c 100644 --- a/src/olympic/studio/applib/src/app.cpp +++ b/src/olympic/studio/applib/src/app.cpp @@ -74,6 +74,10 @@ class StudioUIDrawer: public turbine::gl::Drawer { explicit StudioUIDrawer(StudioUI &ui) noexcept: m_ui(ui) { } + void preDraw(turbine::Context &) noexcept final { + m_ui.preDraw(); + } + void draw(turbine::Context&) noexcept final { m_ui.draw(); } diff --git a/src/olympic/studio/applib/src/studioui.cpp b/src/olympic/studio/applib/src/studioui.cpp index 7daffd52..b7630455 100644 --- a/src/olympic/studio/applib/src/studioui.cpp +++ b/src/olympic/studio/applib/src/studioui.cpp @@ -121,7 +121,6 @@ using StudioConfig = StudioConfigV2; StudioUI::StudioUI(turbine::Context &tctx, ox::StringParam projectDataDir) noexcept: m_sctx{*this, tctx}, m_projectDataDir{std::move(projectDataDir)} { - loadFont(); auto &kctx = keelCtx(m_tctx); kctx.converters.emplace_back(keel::Converter::make()); oxLogError(headerizeConfigFile(kctx)); @@ -184,11 +183,14 @@ void StudioUI::handleNavigationChange(ox::StringParam path, ox::StringParam navA m_navAction.emplace(std::move(path), std::move(navArgs)); } +void StudioUI::preDraw() noexcept { + loadFont(); +} + void StudioUI::draw() noexcept { if (turbine::isWayland() || ox::defines::OS == ox::OS::Darwin) { ig::setDpiScale(1.f); } else { - loadFont(); ig::setDpiScale(ImGui::GetWindowDpiScale()); } glutils::clearScreen(); diff --git a/src/olympic/studio/applib/src/studioui.hpp b/src/olympic/studio/applib/src/studioui.hpp index de35897e..ef4651f7 100644 --- a/src/olympic/studio/applib/src/studioui.hpp +++ b/src/olympic/studio/applib/src/studioui.hpp @@ -103,6 +103,8 @@ class StudioUI final: public ox::SignalHandler { bool handleShutdown() noexcept; protected: + void preDraw() noexcept; + void draw() noexcept; private: diff --git a/src/olympic/turbine/include/turbine/gfx.hpp b/src/olympic/turbine/include/turbine/gfx.hpp index 1dab7e2a..a65cf264 100644 --- a/src/olympic/turbine/include/turbine/gfx.hpp +++ b/src/olympic/turbine/include/turbine/gfx.hpp @@ -18,6 +18,7 @@ namespace gl { class Drawer { public: virtual ~Drawer() = default; + virtual void preDraw(Context&) noexcept {} virtual void draw(Context&) noexcept = 0; }; void addDrawer(Context &ctx, Drawer *cd) noexcept; diff --git a/src/olympic/turbine/src/glfw/turbine.cpp b/src/olympic/turbine/src/glfw/turbine.cpp index 9aaf3502..1f08f80f 100644 --- a/src/olympic/turbine/src/glfw/turbine.cpp +++ b/src/olympic/turbine/src/glfw/turbine.cpp @@ -235,12 +235,15 @@ void requireRefreshFor(Context &ctx, int ms) noexcept { static void draw(Context &ctx) noexcept { // draw start + for (auto const d : ctx.drawers) { + d->preDraw(ctx); + } #if TURBINE_USE_IMGUI ImGui_ImplOpenGL3_NewFrame(); ImGui_ImplGlfw_NewFrame(); ImGui::NewFrame(); #endif - for (auto d : ctx.drawers) { + for (auto const d : ctx.drawers) { d->draw(ctx); } #if TURBINE_USE_IMGUI @@ -489,7 +492,9 @@ KeyEventHandler keyEventHandler(Context const &ctx) noexcept { } float scale(Context const &ctx) noexcept { - return ctx.scale; + float x{}, y{}; + glfwGetWindowContentScale(ctx.window, &x, &y); + return y; } bool isWayland() noexcept {