2 * Copyright (c) 2020 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include <dali/dali.h>
18 #include <dali-toolkit/dali-toolkit.h>
20 #include <dali-toolkit/devel-api/visuals/animated-gradient-visual-properties-devel.h>
21 #include <dali-toolkit/devel-api/visuals/visual-properties-devel.h>
22 #include <dali/integration-api/debug.h>
25 using namespace Dali::Toolkit;
27 // This example shows how to create and display animated-gradient-effect
31 // The value for scale-change between wearable-mobile
32 // Can be changed on App-Create time
33 Vector2 WINDOW_SIZE = Vector2( 360.0f, 360.0f );
34 Vector2 SCALED_WINDOW_SIZE = Vector2( 1.0f, 1.0f );
35 Vector3 SCALED_WINDOW_SIZE_3 = Vector3( 1.0f, 1.0f, 0.0f );
36 float SCALED_WIDTH = 1.0f;
37 float SCALED_HEIGHT = 1.0f;
38 float FONT_SCALE = 0.25f;
40 // const parameters for color and animation
41 const float CHANGE_DURATION = 0.2f;
42 const float CARD_MOVE_DURATION = 1.0f;
43 const float LOADING_ONE_CYCLE_DURATION = 2.0f;
44 const int LOADING_CYCLE_CNT = 4;
45 const int LOADING_CYCLE_DT = 10;
46 const Vector4 DEFAULT_COLOR = Vector4( 0.5f, 0.5f, 0.5f, 1.0f );
48 const float PSEUDO_SCROLL_TIME = 100.0f;
49 const float PSEUDO_SCROLL_OFFSET = 0.05f;
51 // const static parameters for cards when resolution is 360x360
52 const int CARD_NUM = 3;
53 const Vector2 CARD_SIZE = Vector2( 210.0f, 143.0f );
54 const Vector2 CARD_OFFSET = Vector2( 0.0f, 12.5f );
55 const Vector2 CARD_DIFF = Vector2( 240.0f, 0.0f );
56 const float CARD_BOUNCE_ANIMATION_RATE = 0.3f;
58 const Vector2 CARD_SIZE_BIG = Vector2( 292.0f, 199.0f );
59 const Vector2 CARD_BIG_OFFSET = Vector2( 0.0f, -5.5f );
60 const float CARD_MOVE_DIST = 40.0f;
62 // const private parameters for each cards
63 const Vector4 CARD_COLOR_START_LIST[] =
65 Vector4( 0x24, 0x2C, 0x93, 255.f ) / 255.f,
66 Vector4( 0x7A, 0x1C, 0x9E, 255.f ) / 255.f,
67 Vector4( 0xA9, 0x0C, 0x96, 255.f ) / 255.f,
69 const Vector4 CARD_COLOR_END_LIST[] =
71 Vector4( 0x04, 0x13, 0x23, 255.f ) / 255.f,
72 Vector4( 0x28, 0x01, 0x45, 255.f ) / 255.f,
73 Vector4( 0x37, 0x0A, 0x2E, 255.f ) / 255.f,
75 const Vector4 CARD_COLOR_BACKGROUND_LIST[] =
77 Vector4( 0x28, 0x2B, 0x6E, 255.f ) / 255.f,
78 Vector4( 0x4D, 0x15, 0x61, 255.f ) / 255.f,
79 Vector4( 0x70, 0x21, 0x61, 255.f ) / 255.f,
81 const char * const CARD_IMAGE_LIST[] =
83 ( DEMO_IMAGE_DIR "Card_01.png" ),
84 ( DEMO_IMAGE_DIR "Card_02.png" ),
85 ( DEMO_IMAGE_DIR "Card_03.png" ),
88 // const parameters for add button position and size when resolution is 360x360x
89 const Vector2 BUTTON_ADD_SIZE = Vector2( 292.0f, 52.0f );
90 const Vector3 BUTTON_ADD_POSITION = Vector3( 0.0f, 0.0f, 0.0f );
91 const char * const BUTTON_ADD_IMAGE( DEMO_IMAGE_DIR "Card_Add_Button.png" );
93 // const parameters for string position and size and font-size when resolution is 360x360
94 const Vector2 LABEL_TICKET_SIZE = Vector2( 148.0f, 31.0f );
95 const Vector3 LABEL_TICKET_POSITION = Vector3( 0.0f, 72.5f, 0.0f );
96 const Vector4 LABEL_TICKET_FONT_COLOR = Vector4( 0.98f, 0.98f, 0.98f, 1.0f );
97 const float LABEL_TICKET_FONT_SIZE = 25.0f;
98 const Vector2 LABEL_HOLD_SIZE = Vector2( 180.0f, 60.0f );
99 const Vector3 LABEL_HOLD_POSITION = Vector3( 1.0f, 103.0f, 0.0f );
100 const Vector4 LABEL_HOLD_FONT_COLOR = Vector4( 0.98f, 0.98f, 0.98f, 1.0f );
101 const float LABEL_HOLD_FONT_SIZE = 25.0f;
102 const Vector2 LABEL_TERMINAL_SIZE = Vector2( 180.0f, 60.0f );
103 const Vector3 LABEL_TERMINAL_POSITION = Vector3( 1.0f, 133.0f, 0.0f );
104 const Vector4 LABEL_TERMINAL_FONT_COLOR = Vector4( 0.98f, 0.98f, 0.98f, 1.0f );
105 const float LABEL_TERMINAL_FONT_SIZE = 25.0f;
108 const char * const LABEL_TICKET_STR( "Select Ticket" );
109 const char * const LABEL_HOLD_STR( "Hold near" );
110 const char * const LABEL_TERMINAL_STR( "terminal" );
116 : mSize( 0.0f, 0.0f ),
117 mOffset( 0.0f, 0.0f),
125 void Init(Window& window)
127 mSize = CARD_SIZE * SCALED_WIDTH;
128 mOffset = CARD_OFFSET * SCALED_WIDTH;
129 mDiff = CARD_DIFF * SCALED_WIDTH;
134 for( int k = 0; k < CARD_NUM; k++ )
136 mPosition[k] = mOffset + mDiff * k;
138 mColorStart[k] = CARD_COLOR_START_LIST[k];
139 mColorEnd[k] = CARD_COLOR_END_LIST[k];
140 mColorBackground[k] = CARD_COLOR_BACKGROUND_LIST[k];
142 mImageUrl[k] = CARD_IMAGE_LIST[k];
144 // Create an image view for this item
145 mCard[k] = ImageView::New();
147 Property::Map propertyMap;
148 propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE);
149 propertyMap.Insert(ImageVisual::Property::URL, mImageUrl[k]);
150 propertyMap.Insert(DevelVisual::Property::VISUAL_FITTING_MODE, DevelVisual::FILL);
151 mCard[k].SetProperty(Toolkit::ImageView::Property::IMAGE, propertyMap);
154 mCard[k].SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
155 mCard[k].SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER );
156 mCard[k].SetProperty( Actor::Property::SIZE, Vector2( mSize.x, mSize.y ) );
157 mCard[k].SetProperty( Actor::Property::POSITION, Vector2( mPosition[k].x, mPosition[k].y ));
159 window.Add( mCard[k] );
163 bool MoveRight(float duration)
165 Animation anim = Animation::New( duration );
166 for( int k = 0; k < CARD_NUM; k++ )
170 anim.AnimateBy( Property( mCard[k], Actor::Property::POSITION_X ), mDiff.x * CARD_BOUNCE_ANIMATION_RATE, AlphaFunction::BOUNCE );
174 anim.AnimateBy( Property( mCard[k], Actor::Property::POSITION_X ), mDiff.x, AlphaFunction::EASE_OUT );
180 mCurIndex = (mCurIndex - 1) % CARD_NUM;
187 bool MoveLeft(float duration)
189 Animation anim = Animation::New( duration );
190 for( int k = 0; k < CARD_NUM; k++ )
192 if( mCurIndex == CARD_NUM - 1 )
194 anim.AnimateBy( Property( mCard[k], Actor::Property::POSITION_X ), -mDiff.x * CARD_BOUNCE_ANIMATION_RATE, AlphaFunction::BOUNCE );
198 anim.AnimateBy( Property( mCard[k], Actor::Property::POSITION_X ), -mDiff.x, AlphaFunction::EASE_OUT );
202 if( mCurIndex != CARD_NUM - 1 )
204 mCurIndex = (mCurIndex + 1) % CARD_NUM;
211 Vector4 GetColorStart(int index)
213 DALI_ASSERT_ALWAYS( index >= 0 && index < CARD_NUM );
214 return mColorStart[index];
217 Vector4 GetColorEnd(int index)
219 DALI_ASSERT_ALWAYS( index >= 0 && index < CARD_NUM );
220 return mColorEnd[index];
223 Vector4 GetColorBackground(int index)
225 DALI_ASSERT_ALWAYS( index >= 0 && index < CARD_NUM );
226 return mColorBackground[index];
229 ImageView& operator [](int index)
231 DALI_ASSERT_ALWAYS( index >= 0 && index < CARD_NUM );
235 ImageView mCard[CARD_NUM];
236 std::string mImageUrl[CARD_NUM];
237 Vector4 mColorStart[CARD_NUM];
238 Vector4 mColorEnd[CARD_NUM];
239 Vector4 mColorBackground[CARD_NUM];
240 Vector2 mPosition[CARD_NUM];
248 } // unnamed namespace
250 // This example shows how to render animated gradients
252 class CardController : public ConnectionTracker
255 CardController(Application& application)
256 : mApplication( application ),
257 mNormalColor( 0.0f, 0.0f, 0.0f, 0.0f ),
258 mNormalStartColor( 0.0f, 0.0f, 0.0f, 0.0f ),
259 mNormalEndColor( 0.0f, 0.0f, 0.0f, 0.0f),
260 mFirstTouchPos( 0.0f, 0.0f ),
261 mLastTouchPos( 0.0f, 0.0f ),
262 mCardDuration( 0.0f ),
264 mLoadingTime( 0.0f ),
266 mLoadingCountScale( 0 ),
268 mCancelSignal( false ),
269 mIsTouchedActor( false )
271 // Connect to the Application's Init signal
272 mApplication.InitSignal().Connect( this, &CardController::Create );
277 // Nothing to do here;
280 // The Init signal is received once (only) during the Application lifetime
281 void Create(Application& application)
283 // Get a handle to the window
284 mWindow = application.GetWindow();
285 mWindow.KeyEventSignal().Connect( this, &CardController::OnKeyEvent );
287 // Get current device's width and height.
288 const Window::WindowSize windowSize = mWindow.GetSize();
289 WINDOW_SIZE = Vector2(windowSize.GetWidth(), windowSize.GetHeight() );
290 SCALED_WINDOW_SIZE = WINDOW_SIZE / 360.0f;
291 SCALED_WINDOW_SIZE_3 = Vector3( SCALED_WINDOW_SIZE.x, SCALED_WINDOW_SIZE.y, 0.0f );
292 SCALED_WIDTH = SCALED_WINDOW_SIZE.x < SCALED_WINDOW_SIZE.y ? SCALED_WINDOW_SIZE.x : SCALED_WINDOW_SIZE.y;
293 SCALED_HEIGHT = SCALED_WIDTH;
295 // Note that this is heuristic value
296 FONT_SCALE = 0.25f * WINDOW_SIZE.y / WINDOW_SIZE.x;
298 mBackground = Control::New();
299 mBackground.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
300 mBackground.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER );
301 mBackground.SetProperty( Actor::Property::SIZE, WINDOW_SIZE );
303 mWindow.Add( mBackground );
311 mWindow.GetRootLayer().TouchSignal().Connect( this, &CardController::OnTouchLayer );
315 bool OnTouchCards(Actor actor, const TouchEvent &data)
317 if( data.GetPointCount() > 0 )
319 if( data.GetState( 0 ) == PointState::DOWN )
321 if( mCards.mCurState == 0 )
323 mIsTouchedActor = false;
324 if( mCards[mCards.mCurIndex] == actor )
326 mIsTouchedActor = true;
328 mCards.mCurState = 3;
329 mTempTimer = Timer::New( PSEUDO_SCROLL_TIME );
330 mTempTimer.TickSignal().Connect( this, &CardController::OnDetectMotionLayer );
333 mFirstTouchPos = data.GetScreenPosition( 0 );
334 mLastTouchPos = mFirstTouchPos;
336 else if( mCards.mCurState == 1 )
338 mCancelSignal = true;
344 mLastTouchPos = data.GetScreenPosition( 0 );
350 bool OnTouchLayer(Actor actor, const TouchEvent &data)
352 if( data.GetPointCount() > 0 )
354 if( data.GetState( 0 ) == PointState::DOWN )
356 if( mCards.mCurState == 0 )
358 mIsTouchedActor = false;
359 mCards.mCurState = 3;
360 mTempTimer = Timer::New( PSEUDO_SCROLL_TIME );
361 mTempTimer.TickSignal().Connect( this, &CardController::OnDetectMotionLayer );
364 mFirstTouchPos = data.GetScreenPosition( 0 );
365 mLastTouchPos = mFirstTouchPos;
370 mLastTouchPos = data.GetScreenPosition( 0 );
376 // Heuristic Scroll View
377 bool OnDetectMotionLayer()
379 if( mCards.mCurState == 3 )
381 Vector2 diff = (mLastTouchPos - mFirstTouchPos);
382 float offset = PSEUDO_SCROLL_OFFSET;
383 const float windowWidth = mWindow.GetSize().GetWidth();
385 if( diff.x > windowWidth * offset )
387 mCards.mCurState = 2;
389 mCardChanger = Timer::New( mCardDuration * 1000.0f );
390 mCardChanger.TickSignal().Connect( this, &CardController::OnTickLayer );
391 mCardChanger.Start();
394 else if( diff.x < -windowWidth * offset )
396 mCards.mCurState = 2;
398 mCardChanger = Timer::New( mCardDuration * 1000.0f );
399 mCardChanger.TickSignal().Connect( this, &CardController::OnTickLayer );
400 mCardChanger.Start();
402 // Not a scroll input
405 // Run NFC Tag effect if we touch a card
408 mCards.mCurState = 1;
409 RunAnimation( mCards.mCurIndex );
426 void OnKeyEvent(const KeyEvent& event)
428 if( event.GetState() == KeyEvent::Down )
430 if( IsKey( event, Dali::DALI_KEY_ESCAPE ) || IsKey( event, Dali::DALI_KEY_BACK ) )
439 // Utility function to make animation parameter map. return Property::Map
440 Property::Value BuildMap(const Property::Value &start, const Property::Value &target, int dir, float duration, float delay, int repeat, float repeat_delay, int motion, int easing)
445 map.Insert( DevelAnimatedGradientVisual::AnimationParameter::Property::START, start );
446 map.Insert( DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET, target );
449 map.Insert( DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::FORWARD );
453 map.Insert( DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD );
455 map.Insert( DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION, duration );
456 map.Insert( DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY, delay );
457 map.Insert( DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT, repeat );
458 map.Insert( DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY, repeat_delay );
461 map.Insert( DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, DevelAnimatedGradientVisual::AnimationParameter::MotionType::LOOP );
465 map.Insert( DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, DevelAnimatedGradientVisual::AnimationParameter::MotionType::MIRROR );
469 map.Insert( DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::LINEAR );
471 else if( easing == 1 )
473 map.Insert( DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN );
475 else if( easing == 2 )
477 map.Insert( DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::OUT );
481 map.Insert( DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN_OUT );
484 return Property::Value( map );
487 // Setup background visual property during nothing action
490 mBackgroundNormalMap.Clear();
491 mBackgroundNormalMap.Insert( Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT );
493 mBackgroundNormalMap.Insert( Toolkit::DevelAnimatedGradientVisual::Property::START_POSITION, Vector2( -0.5, -0.5 ) );
494 mBackgroundNormalMap.Insert( Toolkit::DevelAnimatedGradientVisual::Property::END_POSITION, Vector2( 0.5, 0.5 ) );
495 mBackgroundNormalMap.Insert( Toolkit::DevelAnimatedGradientVisual::Property::START_COLOR, mNormalColor );
496 mBackgroundNormalMap.Insert( Toolkit::DevelAnimatedGradientVisual::Property::END_COLOR, mNormalColor );
497 mBackgroundNormalMap.Insert( Toolkit::DevelAnimatedGradientVisual::Property::ROTATE_CENTER, Vector2( 0.0f, 0.0f ) );
498 mBackgroundNormalMap.Insert( Toolkit::DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, 0.0f );
499 mBackgroundNormalMap.Insert( Toolkit::DevelAnimatedGradientVisual::Property::OFFSET, 0.0f );
502 // Setup background visual property during NFC tagging start
505 mBackgroundMapStart.Clear();
506 mBackgroundMapStart.Insert( Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT );
508 mBackgroundMapStart.Insert( Toolkit::DevelAnimatedGradientVisual::Property::START_POSITION, Vector2( -0.5, -0.5 ) );
509 mBackgroundMapStart.Insert( Toolkit::DevelAnimatedGradientVisual::Property::END_POSITION, Vector2( 0.5, 0.5 ) );
510 mBackgroundMapStart.Insert( Toolkit::DevelAnimatedGradientVisual::Property::START_COLOR, mNormalColor );
511 mBackgroundMapStart.Insert( Toolkit::DevelAnimatedGradientVisual::Property::END_COLOR, mNormalColor );
512 mBackgroundMapStart.Insert( Toolkit::DevelAnimatedGradientVisual::Property::ROTATE_CENTER, Vector2( 0.0f, 0.0f ) );
513 mBackgroundMapStart.Insert( Toolkit::DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, 0.0f );
514 mBackgroundMapStart.Insert( Toolkit::DevelAnimatedGradientVisual::Property::OFFSET, BuildMap( 0.0f, 2.0f, 0, mLoadingTime, 0.0f, -1, 0.0f, 0, 0 ) );
516 mColorAnimationStartStart = *( BuildMap( mNormalColor, Vector4( 0, 0, 0, 0 ), 0, mDuration, 0.0f, 1, 0.0f, 0, 0 ).GetMap() );
517 mColorAnimationStartEnd = *( BuildMap( mNormalColor, Vector4( 0, 0, 0, 0 ), 0, mDuration, 0.0f, 1, 0.0f, 0, 0 ).GetMap() );
520 // Setup background visual property during NFC tagging end
523 mBackgroundMapEnd.Clear();
524 mBackgroundMapEnd.Insert( Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT );
526 mBackgroundMapEnd.Insert( Toolkit::DevelAnimatedGradientVisual::Property::START_POSITION, Vector2( -0.5, -0.5 ) );
527 mBackgroundMapEnd.Insert( Toolkit::DevelAnimatedGradientVisual::Property::END_POSITION, Vector2( 0.5, 0.5 ) );
528 mBackgroundMapEnd.Insert( Toolkit::DevelAnimatedGradientVisual::Property::START_COLOR, mNormalColor );
529 mBackgroundMapEnd.Insert( Toolkit::DevelAnimatedGradientVisual::Property::END_COLOR, mNormalColor );
530 mBackgroundMapEnd.Insert( Toolkit::DevelAnimatedGradientVisual::Property::ROTATE_CENTER, Vector2( 0.0f, 0.0f ) );
531 mBackgroundMapEnd.Insert( Toolkit::DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, 0.0f );
532 mBackgroundMapEnd.Insert( Toolkit::DevelAnimatedGradientVisual::Property::OFFSET, BuildMap( 0.0f, 2.0f, 0, mLoadingTime, 0.0f, -1, 0.0f, 0, 0 ) );
534 mColorAnimationEndStart = *( BuildMap( mNormalColor, Vector4( 0, 0, 0, 0 ), 1, mDuration, 0.0f, 1, 0.0f, 0, 0 ).GetMap() );
535 mColorAnimationEndEnd = *( BuildMap( mNormalColor, Vector4( 0, 0, 0, 0 ), 1, mDuration, 0.0f, 1, 0.0f, 0, 0 ).GetMap() );
538 // Setup background visual property during card change
541 mBackgroundMapMove.Clear();
542 mBackgroundMapMove.Insert( Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
543 mBackgroundMapMove.Insert( Toolkit::DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Toolkit::DevelAnimatedGradientVisual::SpreadType::CLAMP);
545 mBackgroundMapMove.Insert( Toolkit::DevelAnimatedGradientVisual::Property::START_POSITION, Vector2( -0.5, 0.0 ) );
546 mBackgroundMapMove.Insert( Toolkit::DevelAnimatedGradientVisual::Property::END_POSITION, Vector2( 0.5, 0.0 ) );
547 mBackgroundMapMove.Insert( Toolkit::DevelAnimatedGradientVisual::Property::START_COLOR, mNormalStartColor );
548 mBackgroundMapMove.Insert( Toolkit::DevelAnimatedGradientVisual::Property::END_COLOR, mNormalEndColor );
549 mBackgroundMapMove.Insert( Toolkit::DevelAnimatedGradientVisual::Property::ROTATE_CENTER, Vector2( 0.0f, 0.0f ) );
550 mBackgroundMapMove.Insert( Toolkit::DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, 0.0f );
551 mBackgroundMapMove.Insert( Toolkit::DevelAnimatedGradientVisual::Property::OFFSET, BuildMap( -1.0f, 1.0f, 0, mCardDuration, 0.0f, 1, 0.0f, 0, 2 ) );
562 // Setup const parameter values
563 void BuildParameter()
565 mNormalColor = DEFAULT_COLOR;
566 mCardDuration = CARD_MOVE_DURATION;
567 mDuration = CHANGE_DURATION;
568 mLoadingTime = LOADING_ONE_CYCLE_DURATION;
569 mLoadingCount = LOADING_CYCLE_CNT;
570 mLoadingCountScale = LOADING_CYCLE_DT;
572 mNormalStartColor = mNormalColor;
573 mNormalEndColor = mNormalColor;
576 void BuildAnimation()
583 mCards.Init( mWindow );
584 for( int k = 0; k < CARD_NUM; k++ )
586 mCards[k].TouchSignal().Connect( this, &CardController::OnTouchCards );
588 mNormalStartColor = mCards.GetColorBackground( mCards.mCurIndex );
589 mNormalEndColor = mCards.GetColorBackground( mCards.mCurIndex );
592 // Create and Add to window
595 mAddButton = ImageView::New();
596 mAddButton.SetImage( BUTTON_ADD_IMAGE );
597 mAddButton.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::BOTTOM_CENTER );
598 mAddButton.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::BOTTOM_CENTER );
599 mAddButton.SetProperty( Actor::Property::SIZE, BUTTON_ADD_SIZE * SCALED_WIDTH );
600 mAddButton.SetProperty( Actor::Property::POSITION, BUTTON_ADD_POSITION * SCALED_WIDTH );
602 mLabel1 = TextLabel::New( LABEL_TICKET_STR );
603 mLabel1.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_CENTER );
604 mLabel1.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_CENTER );
605 mLabel1.SetProperty( Actor::Property::SIZE, LABEL_TICKET_SIZE * SCALED_WIDTH );
606 mLabel1.SetProperty( Actor::Property::POSITION, LABEL_TICKET_POSITION * SCALED_WIDTH );
607 mLabel1.SetProperty( Actor::Property::VISIBLE, true );
608 mLabel1.SetProperty( TextLabel::Property::TEXT_COLOR, LABEL_TICKET_FONT_COLOR );
609 mLabel1.SetProperty( TextLabel::Property::POINT_SIZE, LABEL_TICKET_FONT_SIZE * FONT_SCALE );
610 mLabel1.SetProperty( TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
611 mLabel1.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
613 mLabel2 = TextLabel::New( LABEL_HOLD_STR );
614 mLabel2.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
615 mLabel2.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER );
616 mLabel2.SetProperty( Actor::Property::SIZE, LABEL_HOLD_SIZE * SCALED_WIDTH );
617 mLabel2.SetProperty( Actor::Property::POSITION, LABEL_HOLD_POSITION * SCALED_WIDTH );
618 mLabel2.SetProperty( Actor::Property::VISIBLE, false );
619 mLabel2.SetProperty( TextLabel::Property::TEXT_COLOR, LABEL_HOLD_FONT_COLOR );
620 mLabel2.SetProperty( TextLabel::Property::POINT_SIZE, LABEL_HOLD_FONT_SIZE * FONT_SCALE );
621 mLabel2.SetProperty( TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
622 mLabel2.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
624 mLabel3 = TextLabel::New( LABEL_TERMINAL_STR );
625 mLabel3.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
626 mLabel3.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER );
627 mLabel3.SetProperty( Actor::Property::SIZE, LABEL_TERMINAL_SIZE * SCALED_WIDTH );
628 mLabel3.SetProperty( Actor::Property::POSITION, LABEL_TERMINAL_POSITION * SCALED_WIDTH );
629 mLabel3.SetProperty( Actor::Property::VISIBLE, false );
630 mLabel3.SetProperty( TextLabel::Property::TEXT_COLOR, LABEL_TERMINAL_FONT_COLOR );
631 mLabel3.SetProperty( TextLabel::Property::POINT_SIZE, LABEL_TERMINAL_FONT_SIZE * FONT_SCALE );
632 mLabel3.SetProperty( TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
633 mLabel3.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
635 mWindow.Add( mAddButton );
636 mWindow.Add( mLabel1 );
637 mWindow.Add( mLabel2 );
638 mWindow.Add( mLabel3 );
641 void SetupAnimation()
643 mMoveFront = Animation::New( mDuration );
644 mMoveBack = Animation::New( mDuration );
647 // Run animations when 'index' card active
648 void RunAnimation(int index)
650 //set animated background color here
651 mColorAnimationStartStart[DevelAnimatedGradientVisual::AnimationParameter::Property::START] = mNormalStartColor;
652 mColorAnimationStartEnd[DevelAnimatedGradientVisual::AnimationParameter::Property::START] = mNormalStartColor;
653 mColorAnimationEndStart[DevelAnimatedGradientVisual::AnimationParameter::Property::START] = mNormalStartColor;
654 mColorAnimationEndEnd[DevelAnimatedGradientVisual::AnimationParameter::Property::START] = mNormalStartColor;
656 mColorAnimationStartStart[DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET] = mCards.GetColorStart( index );
657 mColorAnimationStartEnd[DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET] = mCards.GetColorEnd( index );
658 mColorAnimationEndStart[DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET] = mCards.GetColorStart( index );
659 mColorAnimationEndEnd[DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET] = mCards.GetColorEnd( index );
661 mBackgroundMapStart[Toolkit::DevelAnimatedGradientVisual::Property::START_COLOR] = mColorAnimationStartStart;
662 mBackgroundMapStart[Toolkit::DevelAnimatedGradientVisual::Property::END_COLOR] = mColorAnimationStartEnd;
663 mBackgroundMapEnd[Toolkit::DevelAnimatedGradientVisual::Property::START_COLOR] = mColorAnimationEndStart;
664 mBackgroundMapEnd[Toolkit::DevelAnimatedGradientVisual::Property::END_COLOR] = mColorAnimationEndEnd;
668 // Rotate background gradient
669 mBackgroundMapStart[Toolkit::DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT] = BuildMap( 0.0f, Math::PI * 2.0f, 0, mLoadingTime, 0.0f, -1, 0.0f, 0, 0 );
671 else if( index == 2 )
673 // Rotate background gradient more slow
674 mBackgroundMapStart[Toolkit::DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT] = BuildMap( 0.0f, Math::PI * 2.0f, 0, mLoadingTime * 2.0, 0.0f, -1, 0.0f, 0, 0 );
678 mBackgroundMapStart[Toolkit::DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT] = 0.0f;
681 mBackground.SetProperty( Control::Property::BACKGROUND, mBackgroundMapStart );
684 mBackgroundChanger = Timer::New( mLoadingTime * 1000.0f / mLoadingCountScale );
685 mBackgroundChanger.TickSignal().Connect( this, &CardController::OnTickBackground );
686 mBackgroundChanger.Start();
688 mMoveFront.AnimateTo( Property( mCards[index], Actor::Property::SIZE_WIDTH ), CARD_SIZE_BIG.x * SCALED_WIDTH );
689 mMoveFront.AnimateTo( Property( mCards[index], Actor::Property::SIZE_HEIGHT ), CARD_SIZE_BIG.y * SCALED_HEIGHT );
690 mMoveFront.AnimateTo( Property( mCards[index], Actor::Property::POSITION_Y ), CARD_BIG_OFFSET.y * SCALED_HEIGHT );
691 mMoveBack.AnimateTo( Property( mCards[index], Actor::Property::SIZE_WIDTH ), CARD_SIZE.x * SCALED_WIDTH );
692 mMoveBack.AnimateTo( Property( mCards[index], Actor::Property::SIZE_HEIGHT ), CARD_SIZE.y * SCALED_HEIGHT );
693 mMoveBack.AnimateTo( Property( mCards[index], Actor::Property::POSITION_Y ), CARD_OFFSET.y * SCALED_HEIGHT );
694 for( int i = 0; i < index; i++ )
696 mMoveFront.AnimateBy( Property( mCards[i], Actor::Property::POSITION_X ), -CARD_MOVE_DIST * SCALED_WIDTH );
697 mMoveBack.AnimateBy( Property( mCards[i], Actor::Property::POSITION_X ), CARD_MOVE_DIST * SCALED_WIDTH );
699 for( int i = index + 1; i < CARD_NUM; i++ )
701 mMoveFront.AnimateBy( Property( mCards[i], Actor::Property::POSITION_X ), CARD_MOVE_DIST * SCALED_WIDTH );
702 mMoveBack.AnimateBy( Property( mCards[i], Actor::Property::POSITION_X ), -CARD_MOVE_DIST * SCALED_WIDTH );
704 mMoveFront.AnimateTo( Property( mAddButton, Actor::Property::POSITION_Y ), BUTTON_ADD_SIZE.y * SCALED_HEIGHT );
705 mMoveBack.AnimateTo( Property( mAddButton, Actor::Property::POSITION_Y ), 0.f * SCALED_HEIGHT );
707 mMoveFront.AnimateTo( Property( mLabel1, Actor::Property::VISIBLE), false );
708 mMoveFront.AnimateTo( Property( mLabel2, Actor::Property::VISIBLE), true );
709 mMoveFront.AnimateTo( Property( mLabel3, Actor::Property::VISIBLE), true );
710 mMoveBack.AnimateTo( Property( mLabel1, Actor::Property::VISIBLE), true );
711 mMoveBack.AnimateTo( Property( mLabel2, Actor::Property::VISIBLE), false );
712 mMoveBack.AnimateTo( Property( mLabel3, Actor::Property::VISIBLE), false );
716 bool OnTickBackground()
719 if( mCancelSignal || mTickCount >= mLoadingCount * mLoadingCountScale )
721 if( mCards.mCurState == 1 )
723 mCards.mCurState = 2;
724 mBackground.SetProperty( Control::Property::BACKGROUND, mBackgroundMapEnd );
726 mBackgroundChanger.SetInterval( mDuration * 1000.0f );
739 if( mCards.MoveRight( mCardDuration ) )
741 // Set smooth background color change here
742 mNormalEndColor = mCards.GetColorBackground( mCards.mCurIndex );
743 mBackgroundMapMove[Toolkit::DevelAnimatedGradientVisual::Property::START_COLOR] = mNormalEndColor;
744 mBackgroundMapMove[Toolkit::DevelAnimatedGradientVisual::Property::END_COLOR] = mNormalStartColor;
746 (*mBackgroundMapMove[Toolkit::DevelAnimatedGradientVisual::Property::OFFSET].GetMap())[DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION] = Property::Value( DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD );
748 mBackground.SetProperty( Control::Property::BACKGROUND, mBackgroundMapMove );
753 if( mCards.MoveLeft( mCardDuration ) )
755 //Set smooth background color change here
756 mNormalEndColor = mCards.GetColorBackground( mCards.mCurIndex );
757 mBackgroundMapMove[Toolkit::DevelAnimatedGradientVisual::Property::START_COLOR] = mNormalStartColor;
758 mBackgroundMapMove[Toolkit::DevelAnimatedGradientVisual::Property::END_COLOR] = mNormalEndColor;
760 (*mBackgroundMapMove[Toolkit::DevelAnimatedGradientVisual::Property::OFFSET].GetMap())[DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION] = Property::Value( DevelAnimatedGradientVisual::AnimationParameter::DirectionType::FORWARD );
762 mBackground.SetProperty( Control::Property::BACKGROUND, mBackgroundMapMove );
768 mCards.mCurState = 0;
769 mCancelSignal = false;
773 mNormalStartColor = mNormalEndColor;
774 mBackgroundNormalMap[Toolkit::DevelAnimatedGradientVisual::Property::START_COLOR] = mNormalStartColor;
775 mBackgroundNormalMap[Toolkit::DevelAnimatedGradientVisual::Property::END_COLOR] = mNormalEndColor;
776 mBackground.SetProperty(Control::Property::BACKGROUND, mBackgroundNormalMap);
780 Application& mApplication;
787 ImageView mAddButton;
792 Timer mBackgroundChanger;
796 Animation mMoveFront;
799 // Property for background animated gradient visual
800 Property::Map mBackgroundNormalMap;
801 Property::Map mBackgroundMapStart;
802 Property::Map mBackgroundMapEnd;
803 Property::Map mBackgroundMapMove;
805 // Property for animation of color in animated gradient visual
806 Property::Map mColorAnimationStartStart;
807 Property::Map mColorAnimationStartEnd;
808 Property::Map mColorAnimationEndStart;
809 Property::Map mColorAnimationEndEnd;
811 Vector4 mNormalColor;
812 Vector4 mNormalStartColor;
813 Vector4 mNormalEndColor;
815 Vector2 mFirstTouchPos;
816 Vector2 mLastTouchPos;
822 int mLoadingCountScale;
826 bool mIsTouchedActor;
829 int DALI_EXPORT_API main(int argc, char **argv)
831 Application application = Application::New( &argc, &argv );
833 CardController test( application );
835 application.MainLoop();