commit c95333c53720f500330ea963a83722a6e2393682 Author: Bartłomiej Mazurski Date: Sat Nov 11 16:54:05 2023 +0100 first commit diff --git a/revert_mass-spring-damper_model_for_slide_animation.patch b/revert_mass-spring-damper_model_for_slide_animation.patch new file mode 100644 index 0000000..64c1d9c --- /dev/null +++ b/revert_mass-spring-damper_model_for_slide_animation.patch @@ -0,0 +1,179 @@ +Subject: [PATCH] revert mass-spring-damper model for slide animation +--- +Index: src/plugins/slide/slide.kcfg +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/src/plugins/slide/slide.kcfg b/src/plugins/slide/slide.kcfg +--- a/src/plugins/slide/slide.kcfg (revision 9ae6a9fc7377d72e8a320e1eca4dce7fba40205c) ++++ b/src/plugins/slide/slide.kcfg (date 1699716587537) +@@ -6,11 +6,17 @@ + http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" > + + ++ ++ 0 ++ + + 45 + + + 20 ++ ++ ++ false + + + true +Index: src/plugins/slide/slide_config.ui +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/src/plugins/slide/slide_config.ui b/src/plugins/slide/slide_config.ui +--- a/src/plugins/slide/slide_config.ui (revision 9ae6a9fc7377d72e8a320e1eca4dce7fba40205c) ++++ b/src/plugins/slide/slide_config.ui (date 1699716657985) +@@ -12,6 +12,39 @@ + + + ++ ++ ++ ++ ++ Duration: ++ ++ ++ ++ ++ ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ Default ++ ++ ++ milliseconds ++ ++ ++ 9999 ++ ++ ++ 10 ++ ++ ++ ++ ++ ++ + + + Gap between desktops +@@ -64,6 +97,13 @@ + + + ++ ++ ++ ++ ++ ++ Slide docks ++ + + + +Index: src/plugins/slide/slide.cpp +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/src/plugins/slide/slide.cpp b/src/plugins/slide/slide.cpp +--- a/src/plugins/slide/slide.cpp (revision 9ae6a9fc7377d72e8a320e1eca4dce7fba40205c) ++++ b/src/plugins/slide/slide.cpp (date 1699716419773) +@@ -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(); +@@ -99,13 +98,10 @@ + timeDelta = presentTime - m_lastPresentTime; + } + m_lastPresentTime = presentTime; ++ m_timeLine.update(timeDelta); + + 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 +248,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 +291,7 @@ + + m_state = State::ActiveAnimation; + m_movingWindow = movingWindow; ++ m_timeLine.reset(); + + m_startPos = m_currentPosition; + m_endPos = effects->desktopGridCoords(current); +@@ -302,11 +299,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();