From 40ede2e7bdec80ba5d4c443160d905e9f841ae5f Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Sun, 31 May 2026 19:18:38 +0100 Subject: [PATCH] animation: expose spring (#111) --- {src => include/hyprutils}/animation/Spring.hpp | 2 +- src/animation/AnimatedVariable.cpp | 4 ++-- src/animation/Spring.cpp | 5 +++-- tests/animation/Animation.cpp | 16 ++++++++-------- 4 files changed, 14 insertions(+), 13 deletions(-) rename {src => include/hyprutils}/animation/Spring.hpp (83%) diff --git a/src/animation/Spring.hpp b/include/hyprutils/animation/Spring.hpp similarity index 83% rename from src/animation/Spring.hpp rename to include/hyprutils/animation/Spring.hpp index 2a66fc4..ae47128 100644 --- a/src/animation/Spring.hpp +++ b/include/hyprutils/animation/Spring.hpp @@ -4,6 +4,6 @@ #include -namespace Hyprutils::Animation::Details { +namespace Hyprutils::Animation { void advanceSpring(float& value, float& velocity, const SSpringCurve& spring, std::chrono::duration elapsed); } diff --git a/src/animation/AnimatedVariable.cpp b/src/animation/AnimatedVariable.cpp index 2532e3a..7575536 100644 --- a/src/animation/AnimatedVariable.cpp +++ b/src/animation/AnimatedVariable.cpp @@ -1,7 +1,7 @@ #include #include #include -#include "animation/Spring.hpp" +#include #include #include @@ -126,7 +126,7 @@ CBaseAnimatedVariable::SCurveStepResult CBaseAnimatedVariable::getCurveStep() { const auto DT = NOW - springLastStep; springLastStep = NOW; - Details::advanceSpring(m_fSpringValue, m_fSpringVelocity, *SPRING, DT); + advanceSpring(m_fSpringValue, m_fSpringVelocity, *SPRING, DT); const bool FINISHED = std::abs(1.F - m_fSpringValue) <= SPRING->valueEpsilon && std::abs(m_fSpringVelocity) <= SPRING->velocityEpsilon; if (FINISHED) { diff --git a/src/animation/Spring.cpp b/src/animation/Spring.cpp index 888ee48..687b2c4 100644 --- a/src/animation/Spring.cpp +++ b/src/animation/Spring.cpp @@ -1,11 +1,12 @@ -#include "animation/Spring.hpp" +#include #include #include +using namespace Hyprutils; using namespace Hyprutils::Animation; -void Details::advanceSpring(float& value, float& velocity, const SSpringCurve& spring, std::chrono::duration elapsed) { +void Animation::advanceSpring(float& value, float& velocity, const SSpringCurve& spring, std::chrono::duration elapsed) { const float DT = std::max(elapsed.count(), 0.F); if (DT <= 0.F) return; diff --git a/tests/animation/Animation.cpp b/tests/animation/Animation.cpp index d3bd119..734134e 100644 --- a/tests/animation/Animation.cpp +++ b/tests/animation/Animation.cpp @@ -6,7 +6,7 @@ #include #include #include -#include "animation/Spring.hpp" +#include #include @@ -410,9 +410,9 @@ TEST(Animation, springAdvanceUsesElapsedTime) { float negativeValue = 0.F; float negativeVelocity = 0.F; - Details::advanceSpring(oneMsValue, oneMsVelocity, SPRING, std::chrono::milliseconds(1)); - Details::advanceSpring(hundredMsValue, hundredMsVelocity, SPRING, std::chrono::milliseconds(120)); - Details::advanceSpring(negativeValue, negativeVelocity, SPRING, std::chrono::milliseconds(-1)); + advanceSpring(oneMsValue, oneMsVelocity, SPRING, std::chrono::milliseconds(1)); + advanceSpring(hundredMsValue, hundredMsVelocity, SPRING, std::chrono::milliseconds(120)); + advanceSpring(negativeValue, negativeVelocity, SPRING, std::chrono::milliseconds(-1)); EXPECT_GT(oneMsValue, 0.F); EXPECT_GT(hundredMsValue, oneMsValue); @@ -434,8 +434,8 @@ TEST(Animation, springAdvancesAcrossLateTicks) { float cappedValue = 0.F; float cappedVelocity = 0.F; - Details::advanceSpring(lateValue, lateVelocity, SPRING, std::chrono::milliseconds(120)); - Details::advanceSpring(cappedValue, cappedVelocity, SPRING, std::chrono::milliseconds(50)); + advanceSpring(lateValue, lateVelocity, SPRING, std::chrono::milliseconds(120)); + advanceSpring(cappedValue, cappedVelocity, SPRING, std::chrono::milliseconds(50)); EXPECT_GT(lateValue, cappedValue); EXPECT_GT(lateValue, 0.25F); @@ -456,9 +456,9 @@ TEST(Animation, springDoesNotAdvanceFasterThanElapsedTime) { float singleVelocity = 0.F; for (size_t i = 0; i < 132; ++i) - Details::advanceSpring(repeatedValue, repeatedVelocity, SPRING, std::chrono::milliseconds(1)); + advanceSpring(repeatedValue, repeatedVelocity, SPRING, std::chrono::milliseconds(1)); - Details::advanceSpring(singleValue, singleVelocity, SPRING, std::chrono::milliseconds(132)); + advanceSpring(singleValue, singleVelocity, SPRING, std::chrono::milliseconds(132)); EXPECT_NEAR(repeatedValue, singleValue, 0.0001F); EXPECT_LT(repeatedValue, 0.5F);