slideshow/source/engine/activities/simplecontinuousactivitybase.cxx |   12 
+++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

New commits:
commit 18ac22f8a24cb4b691d8c0269206355d0f484625
Author:     Thorsten Behrens <thorsten.behr...@allotropia.de>
AuthorDate: Thu Apr 14 12:01:50 2022 +0200
Commit:     Xisco Fauli <xiscofa...@libreoffice.org>
CommitDate: Fri Apr 15 18:28:24 2022 +0200

    Resolves: tdf#143615 clamp relative times to 1.0
    
    User input permits zero-length animations, so whenever we calculate
    relative position within the animation time frame, the case
    mnMinSimpleDuration == 0.0 means: we're already at the end of the
    animation, i.e. set relative time to 1.0
    
    Change-Id: I0e8c1e29f47bd9fa16f04115cf52d3a176e13fb0
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133005
    Tested-by: Jenkins
    Reviewed-by: Thorsten Behrens <thorsten.behr...@allotropia.de>
    (cherry picked from commit e1db8c27875eac73b1e619e4a23ecdb7a9924b61)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133039
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>

diff --git 
a/slideshow/source/engine/activities/simplecontinuousactivitybase.cxx 
b/slideshow/source/engine/activities/simplecontinuousactivitybase.cxx
index 9e23fc2c76c8..01cb3b75007b 100644
--- a/slideshow/source/engine/activities/simplecontinuousactivitybase.cxx
+++ b/slideshow/source/engine/activities/simplecontinuousactivitybase.cxx
@@ -63,9 +63,12 @@ namespace slideshow::internal
             // perform will be called at least mnMinNumberOfTurns
             // times.
 
-            // fraction of time elapsed
+            // fraction of time elapsed (clamp to 1.0 for zero-length
+            // animations)
             const double nFractionElapsedTime(
-                nCurrElapsedTime / mnMinSimpleDuration );
+                mnMinSimpleDuration != 0.0 ?
+                nCurrElapsedTime / mnMinSimpleDuration :
+                1.0 );
 
             // fraction of minimum calls performed
             const double nFractionRequiredCalls(
@@ -115,7 +118,10 @@ namespace slideshow::internal
             // ===============================
 
             const double nCurrElapsedTime( maTimer.getElapsedTime() );
-            double nT( nCurrElapsedTime / mnMinSimpleDuration );
+            // clamp to 1.0 for zero animation duration
+            double nT( mnMinSimpleDuration != 0.0 ?
+                       nCurrElapsedTime / mnMinSimpleDuration :
+                       1.0 );
 
 
             // one of the stop criteria reached?

Reply via email to