diff options
Diffstat (limited to 'src/managers/AnimationManager.cpp')
| -rw-r--r-- | src/managers/AnimationManager.cpp | 74 |
1 files changed, 53 insertions, 21 deletions
diff --git a/src/managers/AnimationManager.cpp b/src/managers/AnimationManager.cpp index 2682f881..beb1549e 100644 --- a/src/managers/AnimationManager.cpp +++ b/src/managers/AnimationManager.cpp @@ -8,34 +8,47 @@ void CAnimationManager::tick() { 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 bool WINDOWSENABLED = g_pConfigManager->getInt("animations:windows") && !animationsDisabled; + const bool BORDERSENABLED = g_pConfigManager->getInt("animations:borders") && !animationsDisabled; + // const bool FADEENABLED = g_pConfigManager->getInt("animations:fadein") && !animationsDisabled; const float ANIMSPEED = g_pConfigManager->getFloat("animations:speed"); + const auto BORDERACTIVECOL = CColor(g_pConfigManager->getInt("general:col.active_border")); + const auto BORDERINACTIVECOL = CColor(g_pConfigManager->getInt("general:col.inactive_border")); + for (auto& w : g_pCompositor->m_lWindows) { - if (animationsDisabled) { - w.m_vRealPosition = w.m_vEffectivePosition; - w.m_vRealSize = w.m_vEffectiveSize; - continue; + + // process the borders + const auto& COLOR = g_pXWaylandManager->getWindowSurface(&w) == g_pCompositor->m_pLastFocus ? BORDERACTIVECOL : BORDERINACTIVECOL; + + if (BORDERSENABLED) { + if (!deltazero(COLOR, w.m_cRealBorderColor)) { + if (deltaSmallToFlip(COLOR, w.m_cRealBorderColor)) { + w.m_cRealBorderColor = COLOR; + } else { + w.m_cRealBorderColor = parabolic(ANIMSPEED, w.m_cRealBorderColor, COLOR); + } + } + } else { + w.m_cRealBorderColor = COLOR; } // 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 (!deltazero(w.m_vRealPosition, w.m_vEffectivePosition) || !deltazero(w.m_vRealSize, w.m_vEffectiveSize)) { + 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); + } else { + // 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)); + } } - - // 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)); + } else { + w.m_vRealPosition = w.m_vEffectivePosition; + w.m_vRealSize = w.m_vEffectiveSize; } } } @@ -44,10 +57,29 @@ 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::deltaSmallToFlip(const CColor& a, const CColor& b) { + return std::abs(a.r - b.r) < 0.5f && std::abs(a.g - b.g) < 0.5f && std::abs(a.b - b.b) < 0.5f && std::abs(a.a - b.a) < 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) { +bool CAnimationManager::deltazero(const CColor& a, const CColor& b) { + return a.r == b.r && a.g == b.g && a.b == b.b && a.a == b.a; +} + +double CAnimationManager::parabolic(const double from, const double to, const double incline) { return from + ((to - from) / incline); +} + +CColor CAnimationManager::parabolic(const double incline, const CColor& from, const CColor& to) { + CColor newColor; + + newColor.r = parabolic(from.r, to.r, incline); + newColor.g = parabolic(from.g, to.g, incline); + newColor.b = parabolic(from.b, to.b, incline); + newColor.a = parabolic(from.a, to.a, incline); + + return newColor; }
\ No newline at end of file |
