Subject: [PATCH] 5.27.9 Patch --- Index: src/effects/slide/slide.kcfg IDEA additional info: 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 9d677be2a82a781e6ab19216716d9e0d2dba6d53) +++ b/src/effects/slide/slide.kcfg (date 1699986700881) @@ -6,11 +6,17 @@ http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" > + + 0 + 45 20 + + + false 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 1699986700867) @@ -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(); @@ -96,13 +95,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 int w = effects->desktopGridWidth(); @@ -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(); 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 9d677be2a82a781e6ab19216716d9e0d2dba6d53) +++ b/src/effects/slide/slide_config.ui (date 1699986700887) @@ -12,6 +12,39 @@ + + + + + Duration: + + + + + + + + 0 + 0 + + + + Default + + + milliseconds + + + 9999 + + + 10 + + + + + + Gap between desktops @@ -64,6 +97,13 @@ + + + + + + Slide docks +