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())