include/vcl/animate/Animation.hxx |    2 ++
 vcl/source/animate/Animation.cxx  |   35 ++++++++++++++++++++---------------
 2 files changed, 22 insertions(+), 15 deletions(-)

New commits:
commit 5ccba00d2007d664b9ffd0f956323a8180cb8e66
Author:     Chris Sherlock <chris.sherloc...@gmail.com>
AuthorDate: Sat Jun 25 10:57:41 2022 +1000
Commit:     Tomaž Vajngerl <qui...@gmail.com>
CommitDate: Sun Nov 13 14:04:02 2022 +0100

    vcl: extract functions AllRenderersPaused() and PruneMarkedRenderers()
    
    Change-Id: I0fc55e829e22b81a076f2b66d78bb2b90abdfc41
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/136413
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>

diff --git a/include/vcl/animate/Animation.hxx 
b/include/vcl/animate/Animation.hxx
index 307fed73c222..11bb3c894058 100644
--- a/include/vcl/animate/Animation.hxx
+++ b/include/vcl/animate/Animation.hxx
@@ -113,6 +113,8 @@ private:
     SAL_DLLPRIVATE std::vector<std::unique_ptr<AnimationData>> 
CreateAnimationDataItems();
     SAL_DLLPRIVATE void PopulateRenderers();
     SAL_DLLPRIVATE void RenderNextFrameInAllRenderers();
+    SAL_DLLPRIVATE void PruneMarkedRenderers();
+    SAL_DLLPRIVATE bool IsAnyRendererActive();
 
     SAL_DLLPRIVATE void ImplRestartTimer(sal_uLong nTimeout);
     DECL_DLLPRIVATE_LINK(ImplTimeoutHdl, Timer*, void);
diff --git a/vcl/source/animate/Animation.cxx b/vcl/source/animate/Animation.cxx
index e1bd5ba042fc..5d4a208a6b30 100644
--- a/vcl/source/animate/Animation.cxx
+++ b/vcl/source/animate/Animation.cxx
@@ -361,6 +361,24 @@ void Animation::RenderNextFrameInAllRenderers()
         ImplRestartTimer(pCurrentFrameBmp->mnWait);
 }
 
+void Animation::PruneMarkedRenderers()
+{
+    // delete all unmarked views
+    auto removeStart = std::remove_if(maRenderers.begin(), maRenderers.end(),
+                                      [](const auto& pRenderer) { return 
!pRenderer->isMarked(); });
+    maRenderers.erase(removeStart, maRenderers.cend());
+
+    // reset marked state
+    std::for_each(maRenderers.cbegin(), maRenderers.cend(),
+                  [](const auto& pRenderer) { pRenderer->setMarked(false); });
+}
+
+bool Animation::IsAnyRendererActive()
+{
+    return std::any_of(maRenderers.cbegin(), maRenderers.cend(),
+                       [](const auto& pRenderer) { return 
!pRenderer->isPaused(); });
+}
+
 IMPL_LINK_NOARG(Animation, ImplTimeoutHdl, Timer*, void)
 {
     const size_t nAnimCount = maFrames.size();
@@ -373,21 +391,8 @@ IMPL_LINK_NOARG(Animation, ImplTimeoutHdl, Timer*, void)
         {
             maNotifyLink.Call(this);
             PopulateRenderers();
-
-            // delete all unmarked views
-            auto removeStart
-                = std::remove_if(maRenderers.begin(), maRenderers.end(),
-                                 [](const auto& pRenderer) { return 
!pRenderer->isMarked(); });
-            maRenderers.erase(removeStart, maRenderers.cend());
-
-            // check if every remaining view is paused
-            bIsAnyRendererActive
-                = std::any_of(maRenderers.cbegin(), maRenderers.cend(),
-                              [](const auto& pRenderer) { return 
!pRenderer->isPaused(); });
-
-            // reset marked state
-            std::for_each(maRenderers.cbegin(), maRenderers.cend(),
-                          [](const auto& pRenderer) { 
pRenderer->setMarked(false); });
+            PruneMarkedRenderers();
+            bIsAnyRendererActive = IsAnyRendererActive();
         }
 
         if (maRenderers.empty())

Reply via email to