Update the AnimatedImageVisual demo 92/110492/4
authorXiangyin Ma <x1.ma@samsung.com>
Mon, 16 Jan 2017 19:03:50 +0000 (19:03 +0000)
committerXiangyin Ma <x1.ma@samsung.com>
Tue, 17 Jan 2017 13:29:45 +0000 (13:29 +0000)
Change-Id: Ic7f90ed9cc5d59e3cdcd2741691c8d927b4e9037

examples/animated-images/animated-images-example.cpp

index 5587ab9..547bdc2 100644 (file)
@@ -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