Commit bf1f42d60babe2ab002e6a9126020965b7abbeb1
1 parent
25250984
Update the AnimatedImageVisual demo
Change-Id: Ic7f90ed9cc5d59e3cdcd2741691c8d927b4e9037
Showing
1 changed file
with
74 additions
and
7 deletions
examples/animated-images/animated-images-example.cpp
| @@ -34,6 +34,9 @@ const char* const ANIMATE_GIF_DOG( DEMO_IMAGE_DIR "dog-anim.gif" ); | @@ -34,6 +34,9 @@ const char* const ANIMATE_GIF_DOG( DEMO_IMAGE_DIR "dog-anim.gif" ); | ||
| 34 | const char* const STATIC_GIF_LOGO( DEMO_IMAGE_DIR "dali-logo-static.gif" ); | 34 | const char* const STATIC_GIF_LOGO( DEMO_IMAGE_DIR "dali-logo-static.gif" ); |
| 35 | const char* const ANIMATE_GIF_LOGO( DEMO_IMAGE_DIR "dali-logo-anim.gif" ); | 35 | const char* const ANIMATE_GIF_LOGO( DEMO_IMAGE_DIR "dali-logo-anim.gif" ); |
| 36 | 36 | ||
| 37 | +const char* const ANIMATE_PIXEL_AREA( "Animate PixelArea" ); | ||
| 38 | +const char* const ANIMATE_PIXEL_AREA_AND_SCALE( "Animate PixelArea & Scale" ); | ||
| 39 | + | ||
| 37 | const Vector4 DIM_COLOR( 0.85f, 0.85f, 0.85f, 0.85f ); | 40 | const Vector4 DIM_COLOR( 0.85f, 0.85f, 0.85f, 0.85f ); |
| 38 | } | 41 | } |
| 39 | 42 | ||
| @@ -67,21 +70,24 @@ public: | @@ -67,21 +70,24 @@ public: | ||
| 67 | // Tie-in input event handlers: | 70 | // Tie-in input event handlers: |
| 68 | stage.KeyEventSignal().Connect( this, &AnimatedImageController::OnKeyEvent ); | 71 | stage.KeyEventSignal().Connect( this, &AnimatedImageController::OnKeyEvent ); |
| 69 | 72 | ||
| 70 | - mActorDog = CreateGifViewWithOverlayButton( STATIC_GIF_DOG ); | 73 | + mActorDog = CreateGifViewWithOverlayPlayButton( STATIC_GIF_DOG ); |
| 71 | mActorDog.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER ); | 74 | mActorDog.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER ); |
| 72 | mActorDog.SetY( -100.f ); | 75 | mActorDog.SetY( -100.f ); |
| 73 | stage.Add( mActorDog ); | 76 | stage.Add( mActorDog ); |
| 74 | 77 | ||
| 75 | - mActorLogo = CreateGifViewWithOverlayButton( STATIC_GIF_LOGO ); | 78 | + mActorLogo = CreateGifViewWithOverlayPlayButton( STATIC_GIF_LOGO ); |
| 76 | mActorLogo.SetAnchorPoint( AnchorPoint::TOP_CENTER ); | 79 | mActorLogo.SetAnchorPoint( AnchorPoint::TOP_CENTER ); |
| 77 | mActorLogo.SetY( 100.f ); | 80 | mActorLogo.SetY( 100.f ); |
| 78 | stage.Add( mActorLogo ); | 81 | stage.Add( mActorLogo ); |
| 82 | + | ||
| 83 | + mTapDetector = TapGestureDetector::New(); | ||
| 84 | + mTapDetector.DetectedSignal().Connect( this, &AnimatedImageController::OnTap ); | ||
| 79 | } | 85 | } |
| 80 | 86 | ||
| 81 | /** | 87 | /** |
| 82 | * Create the gif image view with an overlay play button. | 88 | * Create the gif image view with an overlay play button. |
| 83 | */ | 89 | */ |
| 84 | - Toolkit::ImageView CreateGifViewWithOverlayButton( const std::string& gifUrl ) | 90 | + Toolkit::ImageView CreateGifViewWithOverlayPlayButton( const std::string& gifUrl ) |
| 85 | { | 91 | { |
| 86 | Toolkit::ImageView imageView = Toolkit::ImageView::New( gifUrl ); | 92 | Toolkit::ImageView imageView = Toolkit::ImageView::New( gifUrl ); |
| 87 | imageView.SetParentOrigin( ParentOrigin::CENTER ); | 93 | imageView.SetParentOrigin( ParentOrigin::CENTER ); |
| @@ -101,6 +107,32 @@ public: | @@ -101,6 +107,32 @@ public: | ||
| 101 | return imageView; | 107 | return imageView; |
| 102 | } | 108 | } |
| 103 | 109 | ||
| 110 | + Toolkit::ImageView CreateGifViewWithAnimatePixelAreaButton( const std::string& gifUrl, WrapMode::Type wrapModeU, WrapMode::Type wrapModeV, const std::string& buttonLabel ) | ||
| 111 | + { | ||
| 112 | + Toolkit::ImageView imageView = Toolkit::ImageView::New(); | ||
| 113 | + imageView.SetProperty( Toolkit::ImageView::Property::IMAGE, | ||
| 114 | + Property::Map().Add( Toolkit::ImageVisual::Property::URL, gifUrl ) | ||
| 115 | + .Add( Toolkit::ImageVisual::Property::WRAP_MODE_U, wrapModeU ) | ||
| 116 | + .Add( Toolkit::ImageVisual::Property::WRAP_MODE_V, wrapModeV )); | ||
| 117 | + imageView.SetParentOrigin( ParentOrigin::CENTER ); | ||
| 118 | + | ||
| 119 | + // Create a push button, and add it as child of the image view | ||
| 120 | + Toolkit::PushButton animateButton = Toolkit::PushButton::New(); | ||
| 121 | + animateButton.SetProperty( Toolkit::Button::Property::LABEL, buttonLabel ); | ||
| 122 | + animateButton.SetParentOrigin( ParentOrigin::BOTTOM_CENTER ); | ||
| 123 | + animateButton.SetAnchorPoint( AnchorPoint::TOP_CENTER ); | ||
| 124 | + animateButton.SetY( 20.f ); | ||
| 125 | + | ||
| 126 | + animateButton.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS ); | ||
| 127 | + animateButton.SetProperty( Actor::Property::INHERIT_SCALE, false ); | ||
| 128 | + imageView.Add( animateButton ); | ||
| 129 | + | ||
| 130 | + mTapDetector.Attach( animateButton ); | ||
| 131 | + mTapDetector.Attach( imageView ); | ||
| 132 | + | ||
| 133 | + return imageView; | ||
| 134 | + } | ||
| 135 | + | ||
| 104 | bool OnPlayButtonClicked( Toolkit::Button button ) | 136 | bool OnPlayButtonClicked( Toolkit::Button button ) |
| 105 | { | 137 | { |
| 106 | Stage stage = Stage::GetCurrent(); | 138 | Stage stage = Stage::GetCurrent(); |
| @@ -111,8 +143,7 @@ public: | @@ -111,8 +143,7 @@ public: | ||
| 111 | // remove the static gif view, the play button is also removed as its child. | 143 | // remove the static gif view, the play button is also removed as its child. |
| 112 | stage.Remove( mActorDog ); | 144 | stage.Remove( mActorDog ); |
| 113 | 145 | ||
| 114 | - mActorDog = Toolkit::ImageView::New( ANIMATE_GIF_DOG ); | ||
| 115 | - mActorDog.SetParentOrigin( ParentOrigin::CENTER ); | 146 | + mActorDog = CreateGifViewWithAnimatePixelAreaButton( ANIMATE_GIF_DOG, WrapMode::REPEAT, WrapMode::DEFAULT, ANIMATE_PIXEL_AREA_AND_SCALE ); |
| 116 | mActorDog.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER ); | 147 | mActorDog.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER ); |
| 117 | mActorDog.SetY( -100.f ); | 148 | mActorDog.SetY( -100.f ); |
| 118 | stage.Add( mActorDog ); | 149 | stage.Add( mActorDog ); |
| @@ -122,8 +153,7 @@ public: | @@ -122,8 +153,7 @@ public: | ||
| 122 | // remove the static gif view, the play button is also removed as its child. | 153 | // remove the static gif view, the play button is also removed as its child. |
| 123 | stage.Remove( mActorLogo ); | 154 | stage.Remove( mActorLogo ); |
| 124 | 155 | ||
| 125 | - mActorLogo = Toolkit::ImageView::New( ANIMATE_GIF_LOGO ); | ||
| 126 | - mActorLogo.SetParentOrigin( ParentOrigin::CENTER ); | 156 | + mActorLogo = CreateGifViewWithAnimatePixelAreaButton( ANIMATE_GIF_LOGO, WrapMode::DEFAULT, WrapMode::MIRRORED_REPEAT, ANIMATE_PIXEL_AREA ); |
| 127 | mActorLogo.SetAnchorPoint( AnchorPoint::TOP_CENTER ); | 157 | mActorLogo.SetAnchorPoint( AnchorPoint::TOP_CENTER ); |
| 128 | mActorLogo.SetY( 100.f ); | 158 | mActorLogo.SetY( 100.f ); |
| 129 | stage.Add( mActorLogo ); | 159 | stage.Add( mActorLogo ); |
| @@ -131,6 +161,42 @@ public: | @@ -131,6 +161,42 @@ public: | ||
| 131 | return true; | 161 | return true; |
| 132 | } | 162 | } |
| 133 | 163 | ||
| 164 | + void OnTap(Dali::Actor actor, const Dali::TapGesture& tap) | ||
| 165 | + { | ||
| 166 | + if( actor.GetParent() == mActorDog ) // "Animate Pixel Area" button is clicked | ||
| 167 | + { | ||
| 168 | + Animation animation = Animation::New( 3.f ); | ||
| 169 | + animation.AnimateTo( Property( mActorDog, ImageView::Property::PIXEL_AREA ), Vector4( -1.0, 0.0, 3.f, 1.f ), AlphaFunction::SIN ); | ||
| 170 | + animation.AnimateTo( Property( mActorDog, Actor::Property::SCALE_X ), 3.f, AlphaFunction::SIN ); | ||
| 171 | + animation.Play(); | ||
| 172 | + } | ||
| 173 | + else if( actor.GetParent() == mActorLogo ) // "Animate Pixel Area" button is clicked | ||
| 174 | + { | ||
| 175 | + Animation animation = Animation::New( 3.f ); | ||
| 176 | + animation.AnimateTo( Property( mActorLogo, ImageView::Property::PIXEL_AREA ), Vector4( 0.0, 1.0, 1.f, 1.f ), AlphaFunction::SIN ); | ||
| 177 | + animation.Play(); | ||
| 178 | + } | ||
| 179 | + else if( actor == mActorDog ) // stop the animated gif, switch to static view | ||
| 180 | + { | ||
| 181 | + Stage stage = Stage::GetCurrent(); | ||
| 182 | + stage.Remove( mActorDog ); | ||
| 183 | + | ||
| 184 | + mActorDog = CreateGifViewWithOverlayPlayButton( STATIC_GIF_DOG ); | ||
| 185 | + mActorDog.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER ); | ||
| 186 | + mActorDog.SetY( -100.f ); | ||
| 187 | + stage.Add( mActorDog ); | ||
| 188 | + } | ||
| 189 | + else if( actor == mActorLogo ) // stop the animated gif, switch to static view | ||
| 190 | + { | ||
| 191 | + Stage stage = Stage::GetCurrent(); | ||
| 192 | + stage.Remove( mActorLogo ); | ||
| 193 | + | ||
| 194 | + mActorLogo = CreateGifViewWithOverlayPlayButton( STATIC_GIF_LOGO ); | ||
| 195 | + mActorLogo.SetAnchorPoint( AnchorPoint::TOP_CENTER ); | ||
| 196 | + mActorLogo.SetY( 100.f ); | ||
| 197 | + stage.Add( mActorLogo ); | ||
| 198 | + } | ||
| 199 | + } | ||
| 134 | 200 | ||
| 135 | void OnKeyEvent(const KeyEvent& event) | 201 | void OnKeyEvent(const KeyEvent& event) |
| 136 | { | 202 | { |
| @@ -147,6 +213,7 @@ private: | @@ -147,6 +213,7 @@ private: | ||
| 147 | Application& mApplication; | 213 | Application& mApplication; |
| 148 | Toolkit::ImageView mActorDog; | 214 | Toolkit::ImageView mActorDog; |
| 149 | Toolkit::ImageView mActorLogo; | 215 | Toolkit::ImageView mActorLogo; |
| 216 | + TapGestureDetector mTapDetector; | ||
| 150 | }; | 217 | }; |
| 151 | 218 | ||
| 152 | // Entry point for Linux & Tizen applications | 219 | // Entry point for Linux & Tizen applications |