From: seungho baek Date: Tue, 24 Oct 2023 10:09:38 +0000 (+0900) Subject: [Tizen] To stop animated image visual when it become invisible. X-Git-Tag: accepted/tizen/7.0/unified/20231026.165727^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2e2e2785bc14e6c3f892082a3bbea3fa2ad2e654;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git [Tizen] To stop animated image visual when it become invisible. Change-Id: I48ba87d31ba6db63489879cb4a7940da8714a29f Signed-off-by: seungho baek --- diff --git a/dali-toolkit/internal/visuals/animated-image/animated-image-visual.cpp b/dali-toolkit/internal/visuals/animated-image/animated-image-visual.cpp index db00ff5..a5addce 100644 --- a/dali-toolkit/internal/visuals/animated-image/animated-image-visual.cpp +++ b/dali-toolkit/internal/visuals/animated-image/animated-image-visual.cpp @@ -19,6 +19,7 @@ #include "animated-image-visual.h" // EXTERNAL INCLUDES +#include #include #include #include @@ -662,6 +663,14 @@ void AnimatedImageVisual::DoSetOnScene(Actor& actor) mStartFirstFrame = true; mPlacementActor = actor; PrepareTextureSet(); + + DevelActor::VisibilityChangedSignal(actor).Connect(this, &AnimatedImageVisual::OnControlVisibilityChanged); + + Window window = DevelWindow::Get(actor); + if(window) + { + DevelWindow::VisibilityChangedSignal(window).Connect(this, &AnimatedImageVisual::OnWindowVisibilityChanged); + } } void AnimatedImageVisual::DoSetOffScene(Actor& actor) @@ -688,6 +697,14 @@ void AnimatedImageVisual::DoSetOffScene(Actor& actor) mStartFirstFrame = false; mCurrentFrameIndex = FIRST_FRAME_INDEX; mCurrentLoopIndex = FIRST_LOOP; + + DevelActor::VisibilityChangedSignal(actor).Disconnect(this, &AnimatedImageVisual::OnControlVisibilityChanged); + + Window window = DevelWindow::Get(actor); + if(window) + { + DevelWindow::VisibilityChangedSignal(window).Disconnect(this, &AnimatedImageVisual::OnWindowVisibilityChanged); + } } void AnimatedImageVisual::OnSetTransform() @@ -994,6 +1011,26 @@ void AnimatedImageVisual::CheckMaskTexture() } } +void AnimatedImageVisual::OnControlVisibilityChanged(Actor actor, bool visible, DevelActor::VisibilityChange::Type type) +{ + if(!visible && mActionStatus != DevelAnimatedImageVisual::Action::STOP) + { + mActionStatus = DevelAnimatedImageVisual::Action::STOP; + DisplayNextFrame(); + DALI_LOG_INFO(gAnimImgLogFilter, Debug::Verbose, "AnimatedImageVisual::OnControlVisibilityChanged: invisibile. Pause animation [%p]\n", this); + } +} + +void AnimatedImageVisual::OnWindowVisibilityChanged(Window window, bool visible) +{ + if(!visible && mActionStatus != DevelAnimatedImageVisual::Action::STOP) + { + mActionStatus = DevelAnimatedImageVisual::Action::STOP; + DisplayNextFrame(); + DALI_LOG_INFO(gAnimImgLogFilter, Debug::Verbose, "AnimatedImageVisual::OnWindowVisibilityChanged: invisibile. Pause animation [%p]\n", this); + } +} + } // namespace Internal } // namespace Toolkit diff --git a/dali-toolkit/internal/visuals/animated-image/animated-image-visual.h b/dali-toolkit/internal/visuals/animated-image/animated-image-visual.h index 8fc0f59..ecd9942 100644 --- a/dali-toolkit/internal/visuals/animated-image/animated-image-visual.h +++ b/dali-toolkit/internal/visuals/animated-image/animated-image-visual.h @@ -19,6 +19,8 @@ */ // EXTERNAL INCLUDES +#include +#include #include #include #include @@ -253,6 +255,16 @@ private: */ void CheckMaskTexture(); + /** + * @brief Callback when the visibility of the actor is changed. + */ + void OnControlVisibilityChanged(Actor actor, bool visible, DevelActor::VisibilityChange::Type type); + + /** + * @brief Callback when the visibility of the window is changed. + */ + void OnWindowVisibilityChanged(Window window, bool visible); + // Undefined AnimatedImageVisual(const AnimatedImageVisual& animatedImageVisual);