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 );
}
// 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 );
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();
// 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 );
// 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 );
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)
{
Application& mApplication;
Toolkit::ImageView mActorDog;
Toolkit::ImageView mActorLogo;
+ TapGestureDetector mTapDetector;
};
// Entry point for Linux & Tizen applications