From 1b7edd84f32c7c82bd9b46132c7a47b9c7d0e286 Mon Sep 17 00:00:00 2001 From: Matias Date: Wed, 16 Jul 2025 23:12:27 +0200 Subject: [PATCH] feat: move to tick callback --- src/main.cpp | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 8f87929..2101889 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4,6 +4,7 @@ #include "wobblywindow.h" #include +#include #include #include #include @@ -25,8 +26,18 @@ void unregisterWindow(PHLWINDOW pWindow) { g_windowPositions.erase(PHLWINDOWREF {pWindow}); } +void tick() { + const auto now = Time::steadyNow(); + std::erase_if(g_wobblyWindows, [&now](auto&& wobble) { + const bool shouldErase = wobble.second.step(now); + + return shouldErase; + }); +} + static SP g_openWindow = nullptr; static SP g_closeWindow = nullptr; +static SP g_tick = nullptr; inline CFunctionHook* g_pRenderWindowHook = nullptr; typedef void (*origRenderWindow)( @@ -119,12 +130,6 @@ void hkRenderWindow( if (shouldWobble) { pWindow->m_floatingOffset += Vector2D {windowBox.x, windowBox.y}; - std::erase_if(g_wobblyWindows, [&](auto&& wobble) { - const bool shouldErase = g_wobblyWindows[pWindow].step(time); - - return shouldErase; - }); - pRenderer->m_renderPass.add( makeUnique(pOldFramebuffer, pWindow) ); @@ -169,6 +174,12 @@ APICALL EXPORT PLUGIN_DESCRIPTION_INFO PLUGIN_INIT(HANDLE handle) { } ); + g_tick = HyprlandAPI::registerCallbackDynamic( + PHANDLE, + "tick", + [](void* self, SCallbackInfo& info, std::any data) { tick(); } + ); + static const auto METHODS = HyprlandAPI::findFunctionsByName(PHANDLE, "renderWindow"); g_pRenderWindowHook = HyprlandAPI::createFunctionHook(handle, METHODS[0].address, (void*)&hkRenderWindow); @@ -190,4 +201,6 @@ APICALL EXPORT void PLUGIN_EXIT() { CRenderWobblyWindowPassElement::deinitGPUObjects(); g_pRenderWindowHook = nullptr; g_openWindow = nullptr; + g_closeWindow = nullptr; + g_tick = nullptr; }