diff --git a/revert_mass-spring-damper_model_for_slide_animation.patch b/revert_mass-spring-damper_model_for_slide_animation.patch index d11270a..751740f 100644 --- a/revert_mass-spring-damper_model_for_slide_animation.patch +++ b/revert_mass-spring-damper_model_for_slide_animation.patch @@ -1,4 +1,4 @@ -Subject: [PATCH] revert mass-spring-damper model for slide animation +Subject: [PATCH] 5.27.9 Patch --- Index: src/effects/slide/slide.kcfg IDEA additional info: @@ -6,8 +6,8 @@ Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/src/effects/slide/slide.kcfg b/src/effects/slide/slide.kcfg ---- a/src/effects/slide/slide.kcfg (revision 9ae6a9fc7377d72e8a320e1eca4dce7fba40205c) -+++ b/src/effects/slide/slide.kcfg (date 1699984902100) +--- a/src/effects/slide/slide.kcfg (revision 9d677be2a82a781e6ab19216716d9e0d2dba6d53) ++++ b/src/effects/slide/slide.kcfg (date 1700071065013) @@ -6,11 +6,17 @@ http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" > @@ -26,14 +26,108 @@ diff --git a/src/effects/slide/slide.kcfg b/src/effects/slide/slide.kcfg true +Index: src/effects/slide/slide.cpp +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/src/effects/slide/slide.cpp b/src/effects/slide/slide.cpp +--- a/src/effects/slide/slide.cpp (revision 9d677be2a82a781e6ab19216716d9e0d2dba6d53) ++++ b/src/effects/slide/slide.cpp (date 1700071064990) +@@ -25,6 +25,8 @@ + initConfig(); + reconfigure(ReconfigureAll); + ++ m_timeLine.setEasingCurve(QEasingCurve::OutCubic); ++ + connect(effects, QOverload::of(&EffectsHandler::desktopChanged), + this, &SlideEffect::desktopChanged); + connect(effects, QOverload::of(&EffectsHandler::desktopChanging), +@@ -59,11 +61,8 @@ + { + SlideConfig::self()->read(); + +- const qreal springConstant = 300.0 / effects->animationTimeFactor(); +- const qreal dampingRatio = 1.1; +- +- m_motionX = SpringMotion(springConstant, dampingRatio); +- m_motionY = SpringMotion(springConstant, dampingRatio); ++ m_fullAnimationDuration = animationTime(500); ++ m_timeLine.setDuration(std::chrono::milliseconds(m_fullAnimationDuration)); + + m_hGap = SlideConfig::horizontalGap(); + m_vGap = SlideConfig::verticalGap(); +@@ -91,18 +90,10 @@ + + void SlideEffect::prePaintScreen(ScreenPrePaintData &data, std::chrono::milliseconds presentTime) + { +- std::chrono::milliseconds timeDelta = std::chrono::milliseconds::zero(); +- if (m_lastPresentTime.count()) { +- timeDelta = presentTime - m_lastPresentTime; +- } +- m_lastPresentTime = presentTime; ++ m_timeLine.advance(presentTime); + + if (m_state == State::ActiveAnimation) { +- m_motionX.advance(timeDelta); +- m_motionY.advance(timeDelta); +- const QSize virtualSpaceSize = effects->virtualScreenSize(); +- m_currentPosition.setX(m_motionX.position() / virtualSpaceSize.width()); +- m_currentPosition.setY(m_motionY.position() / virtualSpaceSize.height()); ++ m_currentPosition = m_startPos + (m_endPos - m_startPos) * m_timeLine.value(); + } + + const int w = effects->desktopGridWidth(); +@@ -252,7 +243,7 @@ + + void SlideEffect::postPaintScreen() + { +- if (m_state == State::ActiveAnimation && !m_motionX.isMoving() && !m_motionY.isMoving()) { ++ if (m_state == State::ActiveAnimation && m_timeLine.done()) { + finishedSwitching(); + } + +@@ -295,6 +286,7 @@ + + m_state = State::ActiveAnimation; + m_movingWindow = movingWindow; ++ m_timeLine.reset(); + + m_startPos = m_currentPosition; + m_endPos = effects->desktopGridCoords(current); +@@ -302,11 +294,19 @@ + optimizePath(); + } + +- const QSize virtualSpaceSize = effects->virtualScreenSize(); +- m_motionX.setAnchor(m_endPos.x() * virtualSpaceSize.width()); +- m_motionX.setPosition(m_startPos.x() * virtualSpaceSize.width()); +- m_motionY.setAnchor(m_endPos.y() * virtualSpaceSize.height()); +- m_motionY.setPosition(m_startPos.y() * virtualSpaceSize.height()); ++ // Find an apropriate duration ++ QPointF distance = m_startPos - m_endPos; ++ distance.setX(std::abs(distance.x())); ++ distance.setY(std::abs(distance.y())); ++ if (distance.x() < 1 && distance.y() < 1) { ++ if (distance.x() > distance.y()) { ++ m_timeLine.setDuration(std::chrono::milliseconds(std::max(1, (int)(m_fullAnimationDuration * distance.x())))); ++ } else { ++ m_timeLine.setDuration(std::chrono::milliseconds(std::max(1, (int)(m_fullAnimationDuration * distance.y())))); ++ } ++ } else { ++ m_timeLine.setDuration(std::chrono::milliseconds(m_fullAnimationDuration)); ++ } + + effects->setActiveFullScreenEffect(this); + effects->addRepaintFull(); Index: src/effects/slide/slide_config.ui IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/src/effects/slide/slide_config.ui b/src/effects/slide/slide_config.ui ---- a/src/effects/slide/slide_config.ui (revision 9ae6a9fc7377d72e8a320e1eca4dce7fba40205c) -+++ b/src/effects/slide/slide_config.ui (date 1699984902103) +--- a/src/effects/slide/slide_config.ui (revision 9d677be2a82a781e6ab19216716d9e0d2dba6d53) ++++ b/src/effects/slide/slide_config.ui (date 1700071065020) @@ -12,6 +12,39 @@ @@ -94,8 +188,8 @@ Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/src/effects/slide/slide.h b/src/effects/slide/slide.h ---- a/src/effects/slide/slide.h (revision 9ae6a9fc7377d72e8a320e1eca4dce7fba40205c) -+++ b/src/effects/slide/slide.h (date 1699993636445) +--- a/src/effects/slide/slide.h (revision 9d677be2a82a781e6ab19216716d9e0d2dba6d53) ++++ b/src/effects/slide/slide.h (date 1700071065003) @@ -68,6 +68,7 @@ static bool supported(); @@ -132,97 +226,3 @@ diff --git a/src/effects/slide/slide.h b/src/effects/slide/slide.h inline int SlideEffect::horizontalGap() const { return m_hGap; -Index: src/effects/slide/slide.cpp -IDEA additional info: -Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP -<+>UTF-8 -=================================================================== -diff --git a/src/effects/slide/slide.cpp b/src/effects/slide/slide.cpp ---- a/src/effects/slide/slide.cpp (revision 9ae6a9fc7377d72e8a320e1eca4dce7fba40205c) -+++ b/src/effects/slide/slide.cpp (date 1700066958682) -@@ -26,6 +26,8 @@ - initConfig(); - reconfigure(ReconfigureAll); - -+ m_timeLine.setEasingCurve(QEasingCurve::OutCubic); -+ - connect(effects, &EffectsHandler::desktopChanged, - this, &SlideEffect::desktopChanged); - connect(effects, &EffectsHandler::desktopChanging, -@@ -62,11 +64,8 @@ - { - SlideConfig::self()->read(); - -- const qreal springConstant = 300.0 / effects->animationTimeFactor(); -- const qreal dampingRatio = 1.1; -- -- m_motionX = SpringMotion(springConstant, dampingRatio); -- m_motionY = SpringMotion(springConstant, dampingRatio); -+ m_fullAnimationDuration = animationTime(500); -+ m_timeLine.setDuration(std::chrono::milliseconds(m_fullAnimationDuration)); - - m_hGap = SlideConfig::horizontalGap(); - m_vGap = SlideConfig::verticalGap(); -@@ -94,18 +93,10 @@ - - void SlideEffect::prePaintScreen(ScreenPrePaintData &data, std::chrono::milliseconds presentTime) - { -- std::chrono::milliseconds timeDelta = std::chrono::milliseconds::zero(); -- if (m_lastPresentTime.count()) { -- timeDelta = presentTime - m_lastPresentTime; -- } -- m_lastPresentTime = presentTime; -+ m_timeLine.advance(presentTime); - - if (m_state == State::ActiveAnimation) { -- m_motionX.advance(timeDelta); -- m_motionY.advance(timeDelta); -- const QSize virtualSpaceSize = effects->virtualScreenSize(); -- m_currentPosition.setX(m_motionX.position() / virtualSpaceSize.width()); -- m_currentPosition.setY(m_motionY.position() / virtualSpaceSize.height()); -+ m_currentPosition = m_startPos + (m_endPos - m_startPos) * m_timeLine.value(); - } - - const QList desktops = effects->desktops(); -@@ -252,7 +243,7 @@ - - void SlideEffect::postPaintScreen() - { -- if (m_state == State::ActiveAnimation && !m_motionX.isMoving() && !m_motionY.isMoving()) { -+ if (m_state == State::ActiveAnimation && m_timeLine.done()) { - finishedSwitching(); - } - -@@ -295,6 +286,7 @@ - - m_state = State::ActiveAnimation; - m_movingWindow = movingWindow; -+ m_timeLine.reset(); - - m_startPos = m_currentPosition; - m_endPos = effects->desktopGridCoords(current); -@@ -302,11 +294,19 @@ - optimizePath(); - } - -- const QSize virtualSpaceSize = effects->virtualScreenSize(); -- m_motionX.setAnchor(m_endPos.x() * virtualSpaceSize.width()); -- m_motionX.setPosition(m_startPos.x() * virtualSpaceSize.width()); -- m_motionY.setAnchor(m_endPos.y() * virtualSpaceSize.height()); -- m_motionY.setPosition(m_startPos.y() * virtualSpaceSize.height()); -+ // Find an apropriate duration -+ QPointF distance = m_startPos - m_endPos; -+ distance.setX(std::abs(distance.x())); -+ distance.setY(std::abs(distance.y())); -+ if (distance.x() < 1 && distance.y() < 1) { -+ if (distance.x() > distance.y()) { -+ m_timeLine.setDuration(std::chrono::milliseconds(std::max(1, (int)(m_fullAnimationDuration * distance.x())))); -+ } else { -+ m_timeLine.setDuration(std::chrono::milliseconds(std::max(1, (int)(m_fullAnimationDuration * distance.y())))); -+ } -+ } else { -+ m_timeLine.setDuration(std::chrono::milliseconds(m_fullAnimationDuration)); -+ } - - effects->setActiveFullScreenEffect(this); - effects->addRepaintFull();