From: Xiangyin Ma Date: Mon, 16 Jan 2017 19:03:50 +0000 (+0000) Subject: Update the AnimatedImageVisual demo X-Git-Tag: dali_1.2.23~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F92%2F110492%2F4;p=platform%2Fcore%2Fuifw%2Fdali-demo.git Update the AnimatedImageVisual demo Change-Id: Ic7f90ed9cc5d59e3cdcd2741691c8d927b4e9037 --- diff --git a/examples/animated-images/animated-images-example.cpp b/examples/animated-images/animated-images-example.cpp index 5587ab9..547bdc2 100644 --- a/examples/animated-images/animated-images-example.cpp +++ b/examples/animated-images/animated-images-example.cpp @@ -34,6 +34,9 @@ const char* const ANIMATE_GIF_DOG( DEMO_IMAGE_DIR "dog-anim.gif" ); const char* const STATIC_GIF_LOGO( DEMO_IMAGE_DIR "dali-logo-static.gif" ); const char* const ANIMATE_GIF_LOGO( DEMO_IMAGE_DIR "dali-logo-anim.gif" ); +const char* const ANIMATE_PIXEL_AREA( "Animate PixelArea" ); +const char* const ANIMATE_PIXEL_AREA_AND_SCALE( "Animate PixelArea & Scale" ); + const Vector4 DIM_COLOR( 0.85f, 0.85f, 0.85f, 0.85f ); } @@ -67,21 +70,24 @@ public: // Tie-in input event handlers: stage.KeyEventSignal().Connect( this, &AnimatedImageController::OnKeyEvent ); - mActorDog = CreateGifViewWithOverlayButton( STATIC_GIF_DOG ); + mActorDog = CreateGifViewWithOverlayPlayButton( STATIC_GIF_DOG ); mActorDog.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER ); mActorDog.SetY( -100.f ); stage.Add( mActorDog ); - mActorLogo = CreateGifViewWithOverlayButton( STATIC_GIF_LOGO ); + mActorLogo = CreateGifViewWithOverlayPlayButton( STATIC_GIF_LOGO ); mActorLogo.SetAnchorPoint( AnchorPoint::TOP_CENTER ); mActorLogo.SetY( 100.f ); stage.Add( mActorLogo ); + + mTapDetector = TapGestureDetector::New(); + mTapDetector.DetectedSignal().Connect( this, &AnimatedImageController::OnTap ); } /** * Create the gif image view with an overlay play button. */ - Toolkit::ImageView CreateGifViewWithOverlayButton( const std::string& gifUrl ) + Toolkit::ImageView CreateGifViewWithOverlayPlayButton( const std::string& gifUrl ) { Toolkit::ImageView imageView = Toolkit::ImageView::New( gifUrl ); imageView.SetParentOrigin( ParentOrigin::CENTER ); @@ -101,6 +107,32 @@ public: return imageView; } + Toolkit::ImageView CreateGifViewWithAnimatePixelAreaButton( const std::string& gifUrl, WrapMode::Type wrapModeU, WrapMode::Type wrapModeV, const std::string& buttonLabel ) + { + Toolkit::ImageView imageView = Toolkit::ImageView::New(); + imageView.SetProperty( Toolkit::ImageView::Property::IMAGE, + Property::Map().Add( Toolkit::ImageVisual::Property::URL, gifUrl ) + .Add( Toolkit::ImageVisual::Property::WRAP_MODE_U, wrapModeU ) + .Add( Toolkit::ImageVisual::Property::WRAP_MODE_V, wrapModeV )); + imageView.SetParentOrigin( ParentOrigin::CENTER ); + + // Create a push button, and add it as child of the image view + Toolkit::PushButton animateButton = Toolkit::PushButton::New(); + animateButton.SetProperty( Toolkit::Button::Property::LABEL, buttonLabel ); + animateButton.SetParentOrigin( ParentOrigin::BOTTOM_CENTER ); + animateButton.SetAnchorPoint( AnchorPoint::TOP_CENTER ); + animateButton.SetY( 20.f ); + + animateButton.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS ); + animateButton.SetProperty( Actor::Property::INHERIT_SCALE, false ); + imageView.Add( animateButton ); + + mTapDetector.Attach( animateButton ); + mTapDetector.Attach( imageView ); + + return imageView; + } + bool OnPlayButtonClicked( Toolkit::Button button ) { Stage stage = Stage::GetCurrent(); @@ -111,8 +143,7 @@ public: // remove the static gif view, the play button is also removed as its child. stage.Remove( mActorDog ); - mActorDog = Toolkit::ImageView::New( ANIMATE_GIF_DOG ); - mActorDog.SetParentOrigin( ParentOrigin::CENTER ); + mActorDog = CreateGifViewWithAnimatePixelAreaButton( ANIMATE_GIF_DOG, WrapMode::REPEAT, WrapMode::DEFAULT, ANIMATE_PIXEL_AREA_AND_SCALE ); mActorDog.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER ); mActorDog.SetY( -100.f ); stage.Add( mActorDog ); @@ -122,8 +153,7 @@ public: // remove the static gif view, the play button is also removed as its child. stage.Remove( mActorLogo ); - mActorLogo = Toolkit::ImageView::New( ANIMATE_GIF_LOGO ); - mActorLogo.SetParentOrigin( ParentOrigin::CENTER ); + mActorLogo = CreateGifViewWithAnimatePixelAreaButton( ANIMATE_GIF_LOGO, WrapMode::DEFAULT, WrapMode::MIRRORED_REPEAT, ANIMATE_PIXEL_AREA ); mActorLogo.SetAnchorPoint( AnchorPoint::TOP_CENTER ); mActorLogo.SetY( 100.f ); stage.Add( mActorLogo ); @@ -131,6 +161,42 @@ public: return true; } + void OnTap(Dali::Actor actor, const Dali::TapGesture& tap) + { + if( actor.GetParent() == mActorDog ) // "Animate Pixel Area" button is clicked + { + Animation animation = Animation::New( 3.f ); + animation.AnimateTo( Property( mActorDog, ImageView::Property::PIXEL_AREA ), Vector4( -1.0, 0.0, 3.f, 1.f ), AlphaFunction::SIN ); + animation.AnimateTo( Property( mActorDog, Actor::Property::SCALE_X ), 3.f, AlphaFunction::SIN ); + animation.Play(); + } + else if( actor.GetParent() == mActorLogo ) // "Animate Pixel Area" button is clicked + { + Animation animation = Animation::New( 3.f ); + animation.AnimateTo( Property( mActorLogo, ImageView::Property::PIXEL_AREA ), Vector4( 0.0, 1.0, 1.f, 1.f ), AlphaFunction::SIN ); + animation.Play(); + } + else if( actor == mActorDog ) // stop the animated gif, switch to static view + { + Stage stage = Stage::GetCurrent(); + stage.Remove( mActorDog ); + + mActorDog = CreateGifViewWithOverlayPlayButton( STATIC_GIF_DOG ); + mActorDog.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER ); + mActorDog.SetY( -100.f ); + stage.Add( mActorDog ); + } + else if( actor == mActorLogo ) // stop the animated gif, switch to static view + { + Stage stage = Stage::GetCurrent(); + stage.Remove( mActorLogo ); + + mActorLogo = CreateGifViewWithOverlayPlayButton( STATIC_GIF_LOGO ); + mActorLogo.SetAnchorPoint( AnchorPoint::TOP_CENTER ); + mActorLogo.SetY( 100.f ); + stage.Add( mActorLogo ); + } + } void OnKeyEvent(const KeyEvent& event) { @@ -147,6 +213,7 @@ private: Application& mApplication; Toolkit::ImageView mActorDog; Toolkit::ImageView mActorLogo; + TapGestureDetector mTapDetector; }; // Entry point for Linux & Tizen applications