From bcf7ee6dc225c00b2aea9891ea42aeb18e5b0cc8 Mon Sep 17 00:00:00 2001 From: vaxerski <43317083+vaxerski@users.noreply.github.com> Date: Wed, 23 Mar 2022 22:01:59 +0100 Subject: Added basic animations for windows --- src/managers/AnimationManager.cpp | 53 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 src/managers/AnimationManager.cpp (limited to 'src/managers/AnimationManager.cpp') diff --git a/src/managers/AnimationManager.cpp b/src/managers/AnimationManager.cpp new file mode 100644 index 00000000..99176488 --- /dev/null +++ b/src/managers/AnimationManager.cpp @@ -0,0 +1,53 @@ +#include "AnimationManager.hpp" +#include "../Compositor.hpp" + +void CAnimationManager::tick() { + + bool animationsDisabled = false; + + if (!g_pConfigManager->getInt("animations:enabled")) + animationsDisabled = true; + + const bool WINDOWSENABLED = g_pConfigManager->getInt("animations:windows"); + const bool BORDERSENABLED = g_pConfigManager->getInt("animations:borders"); + const bool FADEENABLED = g_pConfigManager->getInt("animations:fadein"); + const float ANIMSPEED = g_pConfigManager->getFloat("animations:speed"); + + for (auto& w : g_pCompositor->m_lWindows) { + if (animationsDisabled) { + w.m_vRealPosition = w.m_vEffectivePosition; + w.m_vRealSize = w.m_vEffectiveSize; + continue; + } + + // process the window + if (WINDOWSENABLED) { + if (deltazero(w.m_vRealPosition, w.m_vEffectivePosition) && deltazero(w.m_vRealSize, w.m_vEffectiveSize)) { + continue; + } + + if (deltaSmallToFlip(w.m_vRealPosition, w.m_vEffectivePosition) || deltaSmallToFlip(w.m_vRealSize, w.m_vEffectiveSize)) { + w.m_vRealPosition = w.m_vEffectivePosition; + w.m_vRealSize = w.m_vEffectiveSize; + g_pXWaylandManager->setWindowSize(&w, w.m_vRealSize); + continue; + } + + // if it is to be animated, animate it. + w.m_vRealPosition = Vector2D(parabolic(w.m_vRealPosition.x, w.m_vEffectivePosition.x, ANIMSPEED), parabolic(w.m_vRealPosition.y, w.m_vEffectivePosition.y, ANIMSPEED)); + w.m_vRealSize = Vector2D(parabolic(w.m_vRealSize.x, w.m_vEffectiveSize.x, ANIMSPEED), parabolic(w.m_vRealSize.y, w.m_vEffectiveSize.y, ANIMSPEED)); + } + } +} + +bool CAnimationManager::deltaSmallToFlip(const Vector2D& a, const Vector2D& b) { + return std::abs(a.x - b.x) < 0.5f && std::abs(a.y - b.y) < 0.5f; +} + +bool CAnimationManager::deltazero(const Vector2D& a, const Vector2D& b) { + return a.x == b.x && a.y == b.y; +} + +double CAnimationManager::parabolic(double from, double to, double incline) { + return from + ((to - from) / incline); +} \ No newline at end of file -- cgit v1.2.3