2 * Copyright (c) 2014 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.
19 #include "push-button-default-painter-impl.h"
22 #include <dali/public-api/actors/image-actor.h>
23 #include <dali/public-api/adaptor-framework/timer.h>
24 #include <dali/public-api/animation/constraints.h>
25 #include <dali/public-api/object/ref-object.h>
28 #include <dali-toolkit/public-api/controls/buttons/push-button.h>
29 #include <dali-toolkit/public-api/controls/text-view/text-view.h>
30 #include "push-button-impl.h"
43 const float LABEL_DEPTH( 0.75f );
44 const float FOREGROUND_DEPTH( 0.5f );
45 const float BACKGROUND_DEPTH( 0.25f );
47 const float ANIMATION_TIME( 0.2f );
49 inline Toolkit::Internal::PushButton& GetPushButtonImpl( Toolkit::Button& button )
51 DALI_ASSERT_ALWAYS( button );
53 Dali::RefObject& handle = button.GetImplementation();
55 return static_cast<Toolkit::Internal::PushButton&>( handle );
58 inline const Toolkit::Internal::PushButton& GetPushButtonImpl( const Toolkit::Button& button )
60 DALI_ASSERT_ALWAYS( button );
62 const Dali::RefObject& handle = button.GetImplementation();
64 return static_cast<const Toolkit::Internal::PushButton&>( handle );
69 PushButtonDefaultPainter::PushButtonDefaultPainter()
70 : PushButtonPainter(),
71 mAutoRepeating( false ),
73 mPaintState( ReleasedState ),
75 mAnimationTime( ANIMATION_TIME ),
80 PushButtonDefaultPainter::~PushButtonDefaultPainter()
82 if( mFadeInAnimation )
84 mFadeInAnimation.Clear();
86 if( mFadeOutAnimation )
88 mFadeOutAnimation.Clear();
92 void PushButtonDefaultPainter::SetButtonImage( Toolkit::PushButton& pushButton, Actor image )
94 Toolkit::Internal::PushButton& pushButtonImpl = GetImplementation( pushButton );
95 Actor& buttonImage = pushButtonImpl.GetButtonImage();
96 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
102 if( buttonImage && buttonImage.GetParent() )
104 StopFadeOutAnimation( pushButton );
105 FadeOutImage( pushButton, Foreground, buttonImage );
109 FadeInImage( pushButton, buttonImage );
111 StartFadeOutAnimation( pushButton );
112 StartFadeInAnimation();
117 pushButton.Add( buttonImage );
121 case ReleasedPressedTransition: // FALLTHROUGH
122 case ReleasedDimmedTransition:
125 if( fadeOutButtonImage )
127 opacity = fadeOutButtonImage.GetCurrentOpacity();
129 StopFadeOutAnimation( pushButton );
131 // Replaces the button image.
134 pushButton.Add( buttonImage );
135 FadeOutImage( pushButton, Foreground, buttonImage, opacity );
137 StartFadeOutAnimation( pushButton );
140 case PressedReleasedTransition: // FALLTHROUGH
141 case DimmedReleasedTransition:
143 StopFadeInAnimation();
144 pushButton.Remove( buttonImage );
148 FadeInImage( pushButton, buttonImage );
149 StartFadeInAnimation();
157 buttonImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
158 buttonImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
159 ApplyConstraint( buttonImage, FOREGROUND_DEPTH );
162 void PushButtonDefaultPainter::SetBackgroundImage( Toolkit::PushButton& pushButton, Actor image )
164 Toolkit::Internal::PushButton& pushButtonImpl = GetImplementation( pushButton );
165 Actor& backgroundImage = pushButtonImpl.GetBackgroundImage();
166 Actor& fadeOutBackgroundImage = pushButtonImpl.GetFadeOutBackgroundImage();
168 switch( mPaintState )
170 case ReleasedState: // FALLTHROUGH
172 case ReleasedPressedTransition:
173 case PressedReleasedTransition:
175 if( backgroundImage && backgroundImage.GetParent() )
177 StopFadeOutAnimation( pushButton );
178 FadeOutImage( pushButton, Background, backgroundImage );
180 backgroundImage = image;
182 FadeInImage( pushButton, backgroundImage );
184 StartFadeOutAnimation( pushButton );
185 StartFadeInAnimation();
189 backgroundImage = image;
190 pushButton.Add( backgroundImage );
194 case ReleasedDimmedTransition: // FALLTHROUGH
195 case PressedDimmedTransition:
198 if( fadeOutBackgroundImage )
200 opacity = fadeOutBackgroundImage.GetCurrentOpacity();
202 StopFadeOutAnimation( pushButton );
204 // Replaces the button image.
205 backgroundImage = image;
207 pushButton.Add( backgroundImage );
208 FadeOutImage( pushButton, Background, backgroundImage, opacity );
210 StartFadeOutAnimation( pushButton );
213 case DimmedReleasedTransition: // FALLTHROUGH
214 case DimmedPressedTransition:
216 StopFadeInAnimation();
217 pushButton.Remove( backgroundImage );
219 backgroundImage = image;
221 FadeInImage( pushButton, backgroundImage );
222 StartFadeInAnimation();
226 backgroundImage = image;
230 backgroundImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
231 backgroundImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
232 ApplyConstraint( backgroundImage, BACKGROUND_DEPTH );
235 void PushButtonDefaultPainter::SetPressedImage( Toolkit::PushButton& pushButton, Actor image )
237 Toolkit::Internal::PushButton& pushButtonImpl = GetImplementation( pushButton );
238 Actor& pressedImage = pushButtonImpl.GetPressedImage();
239 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
241 switch( mPaintState )
245 if( pressedImage && pressedImage.GetParent() )
247 StopFadeOutAnimation( pushButton );
248 FadeOutImage( pushButton, Foreground, pressedImage );
250 pressedImage = image;
252 FadeInImage( pushButton, pressedImage );
254 StartFadeOutAnimation( pushButton );
255 StartFadeInAnimation();
259 pressedImage = image;
260 pushButton.Add( pressedImage );
264 case PressedReleasedTransition: // FALLTHROUGH
265 case PressedDimmedTransition:
268 if( fadeOutButtonImage )
270 opacity = fadeOutButtonImage.GetCurrentOpacity();
272 StopFadeOutAnimation( pushButton );
274 // Replaces the button image.
275 pressedImage = image;
277 pushButton.Add( pressedImage );
278 FadeOutImage( pushButton, Foreground, pressedImage, opacity );
280 StartFadeOutAnimation( pushButton );
283 case ReleasedPressedTransition: // FALLTHROUGH
284 case DimmedPressedTransition:
286 StopFadeInAnimation();
287 pushButton.Remove( pressedImage );
289 pressedImage = image;
291 FadeInImage( pushButton, pressedImage );
292 StartFadeInAnimation();
296 pressedImage = image;
300 pressedImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
301 pressedImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
302 ApplyConstraint( pressedImage, FOREGROUND_DEPTH );
305 void PushButtonDefaultPainter::SetDimmedImage( Toolkit::PushButton& pushButton, Actor image )
307 Toolkit::Internal::PushButton& pushButtonImpl = GetImplementation( pushButton );
308 Actor& dimmedImage = pushButtonImpl.GetDimmedImage();
309 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
311 switch( mPaintState )
313 case DimmedReleasedState: // FALLTHROUGH
314 case DimmedPressedState:
316 if( dimmedImage && dimmedImage.GetParent() )
318 StopFadeOutAnimation( pushButton );
319 FadeOutImage( pushButton, Foreground, dimmedImage );
323 FadeInImage( pushButton, dimmedImage );
325 StartFadeOutAnimation( pushButton );
326 StartFadeInAnimation();
331 pushButton.Add( dimmedImage );
335 case ReleasedDimmedTransition: // FALLTHROUGH
336 case PressedDimmedTransition:
338 StopFadeInAnimation();
339 pushButton.Remove( dimmedImage );
343 FadeInImage( pushButton, dimmedImage );
344 StartFadeInAnimation();
347 case DimmedReleasedTransition: // FALLTHROUGH
348 case DimmedPressedTransition:
351 if( fadeOutButtonImage )
353 opacity = fadeOutButtonImage.GetCurrentOpacity();
355 StopFadeOutAnimation( pushButton );
357 // Replaces the button image.
360 pushButton.Add( dimmedImage );
361 FadeOutImage( pushButton, Foreground, dimmedImage, opacity );
363 StartFadeOutAnimation( pushButton );
371 dimmedImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
372 dimmedImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
373 ApplyConstraint( dimmedImage, FOREGROUND_DEPTH );
376 void PushButtonDefaultPainter::SetDimmedBackgroundImage( Toolkit::PushButton& pushButton, Actor image )
378 Toolkit::Internal::PushButton& pushButtonImpl = GetImplementation( pushButton );
379 Actor& dimmedBackgroundImage = pushButtonImpl.GetDimmedBackgroundImage();
380 Actor& fadeOutBackgroundImage = pushButtonImpl.GetFadeOutBackgroundImage();
382 switch( mPaintState )
384 case DimmedReleasedState: // FALLTHROUGH
385 case DimmedPressedState:
387 if( dimmedBackgroundImage && dimmedBackgroundImage.GetParent() )
389 StopFadeOutAnimation( pushButton );
390 FadeOutImage( pushButton, Background, dimmedBackgroundImage );
392 dimmedBackgroundImage = image;
394 FadeInImage( pushButton, dimmedBackgroundImage );
396 StartFadeOutAnimation( pushButton );
397 StartFadeInAnimation();
401 dimmedBackgroundImage = image;
402 pushButton.Add( dimmedBackgroundImage );
406 case ReleasedDimmedTransition: // FALLTHROUGH
407 case PressedDimmedTransition:
409 StopFadeInAnimation();
410 pushButton.Remove( dimmedBackgroundImage );
412 dimmedBackgroundImage = image;
414 FadeInImage( pushButton, dimmedBackgroundImage );
415 StartFadeInAnimation();
418 case DimmedReleasedTransition: // FALLTHROUGH
419 case DimmedPressedTransition:
422 if( fadeOutBackgroundImage )
424 opacity = fadeOutBackgroundImage.GetCurrentOpacity();
426 StopFadeOutAnimation( pushButton );
428 // Replaces the button image.
429 dimmedBackgroundImage = image;
431 pushButton.Add( dimmedBackgroundImage );
432 FadeOutImage( pushButton, Background, dimmedBackgroundImage, opacity );
434 StartFadeOutAnimation( pushButton );
438 dimmedBackgroundImage = image;
442 dimmedBackgroundImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
443 dimmedBackgroundImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
444 ApplyConstraint( dimmedBackgroundImage, BACKGROUND_DEPTH );
447 void PushButtonDefaultPainter::SetLabelText( Toolkit::PushButton& pushButton, Actor text )
449 Toolkit::Internal::PushButton& pushButtonImpl = GetImplementation( pushButton );
450 Actor& label = pushButtonImpl.GetLabel();
452 if( label && label.GetParent() )
454 label.GetParent().Remove( label );
458 label.SetAnchorPoint( AnchorPoint::CENTER );
459 label.SetParentOrigin( ParentOrigin::CENTER );
461 label.SetPosition( 0.f, 0.f, LABEL_DEPTH );
462 label.SetSize( mSize );
464 pushButton.Add( label );
467 void PushButtonDefaultPainter::Initialize( Toolkit::Button& button )
469 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
470 Actor& buttonImage = pushButtonImpl.GetButtonImage();
471 Actor& pressedImage = pushButtonImpl.GetPressedImage();
472 Actor& backgroundImage = pushButtonImpl.GetBackgroundImage();
473 Actor& dimmedImage = pushButtonImpl.GetDimmedImage();
474 Actor& dimmedBackgroundImage = pushButtonImpl.GetDimmedBackgroundImage();
475 Actor& label = pushButtonImpl.GetLabel();
477 Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
481 SetButtonImage( pushButton, buttonImage );
484 if( backgroundImage )
486 SetBackgroundImage( pushButton, backgroundImage );
491 SetPressedImage( pushButton, pressedImage );
496 SetDimmedImage( pushButton, dimmedImage );
499 if( dimmedBackgroundImage )
501 SetDimmedBackgroundImage( pushButton, dimmedBackgroundImage );
506 SetLabelText( pushButton, label );
509 SetDimmed( pushButton, mDimmed );
512 void PushButtonDefaultPainter::SetSize( Toolkit::Button& button, const Vector3& size )
518 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
519 Actor& buttonImage = pushButtonImpl.GetButtonImage();
520 Actor& pressedImage = pushButtonImpl.GetPressedImage();
521 Actor& backgroundImage = pushButtonImpl.GetBackgroundImage();
522 Actor& dimmedImage = pushButtonImpl.GetDimmedImage();
523 Actor& dimmedBackgroundImage = pushButtonImpl.GetDimmedBackgroundImage();
524 Actor& label = pushButtonImpl.GetLabel();
526 ApplyConstraint( buttonImage, FOREGROUND_DEPTH );
527 ApplyConstraint( backgroundImage, BACKGROUND_DEPTH );
528 ApplyConstraint( pressedImage, FOREGROUND_DEPTH );
529 ApplyConstraint( dimmedImage, FOREGROUND_DEPTH );
530 ApplyConstraint( dimmedBackgroundImage, BACKGROUND_DEPTH );
534 label.SetPosition( 0.f, 0.f, LABEL_DEPTH );
535 label.SetSize( mSize );
540 void PushButtonDefaultPainter::SetDimmed( Toolkit::Button& button, bool dimmed )
542 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
543 Actor& buttonImage = pushButtonImpl.GetButtonImage();
544 Actor& pressedImage = pushButtonImpl.GetPressedImage();
545 Actor& backgroundImage = pushButtonImpl.GetBackgroundImage();
546 Actor& dimmedImage = pushButtonImpl.GetDimmedImage();
547 Actor& dimmedBackgroundImage = pushButtonImpl.GetDimmedBackgroundImage();
548 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
550 Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
554 switch( mPaintState )
560 StopFadeOutAnimation( pushButton );
561 FadeOutImage( pushButton, Background, backgroundImage );
562 FadeOutImage( pushButton, Foreground, buttonImage );
563 FadeInImage( pushButton, dimmedBackgroundImage );
564 FadeInImage( pushButton, dimmedImage );
565 StartFadeOutAnimation( pushButton );
566 StartFadeInAnimation();
568 if( buttonImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
570 mPaintState = ReleasedDimmedTransition;
574 mPaintState = DimmedReleasedState;
583 StopFadeOutAnimation( pushButton );
584 FadeOutImage( pushButton, Background, backgroundImage );
585 FadeOutImage( pushButton, Foreground, pressedImage );
586 FadeInImage( pushButton, dimmedBackgroundImage );
587 FadeInImage( pushButton, dimmedImage );
588 StartFadeOutAnimation( pushButton );
589 StartFadeInAnimation();
591 if( pressedImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
593 mPaintState = PressedDimmedTransition;
597 mPaintState = DimmedPressedState;
602 case DimmedReleasedState:
606 StopFadeOutAnimation( pushButton );
607 FadeOutImage( pushButton, Background, dimmedBackgroundImage );
608 FadeOutImage( pushButton, Foreground, dimmedImage );
609 FadeInImage( pushButton, backgroundImage );
610 FadeInImage( pushButton, buttonImage );
611 StartFadeOutAnimation( pushButton );
612 StartFadeInAnimation();
614 if( buttonImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
616 mPaintState = DimmedReleasedTransition;
620 mPaintState = ReleasedState;
625 case DimmedPressedState:
629 StopFadeOutAnimation( pushButton );
630 FadeOutImage( pushButton, Background, dimmedBackgroundImage );
631 FadeOutImage( pushButton, Foreground, dimmedImage );
632 FadeInImage( pushButton, backgroundImage );
633 FadeInImage( pushButton, pressedImage );
634 StartFadeOutAnimation( pushButton );
635 StartFadeInAnimation();
637 if( pressedImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
639 mPaintState = DimmedPressedTransition;
643 mPaintState = PressedState;
648 case ReleasedPressedTransition:
653 if( fadeOutButtonImage )
655 opacity = fadeOutButtonImage.GetCurrentOpacity();
657 StopFadeOutAnimation( pushButton );
658 StopFadeInAnimation();
660 FadeOutImage( pushButton, Foreground, pressedImage, 1.f - opacity );
661 FadeOutImage( pushButton, Background, backgroundImage );
663 FadeInImage( pushButton, dimmedImage );
664 FadeInImage( pushButton, dimmedBackgroundImage );
666 StartFadeOutAnimation( pushButton );
667 StartFadeInAnimation();
669 if( pressedImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
671 mPaintState = PressedDimmedTransition;
675 mPaintState = DimmedPressedState;
680 case PressedReleasedTransition:
685 if( fadeOutButtonImage )
687 opacity = fadeOutButtonImage.GetCurrentOpacity();
689 StopFadeOutAnimation( pushButton );
690 StopFadeInAnimation();
692 FadeOutImage( pushButton, Foreground, buttonImage, 1.f - opacity );
693 FadeOutImage( pushButton, Background, backgroundImage );
695 FadeInImage( pushButton, dimmedImage );
696 FadeInImage( pushButton, dimmedBackgroundImage );
698 StartFadeOutAnimation( pushButton );
699 StartFadeInAnimation();
701 if( buttonImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
703 mPaintState = ReleasedDimmedTransition;
707 mPaintState = DimmedReleasedState;
712 case ReleasedDimmedTransition:
717 if( fadeOutButtonImage )
719 opacity = fadeOutButtonImage.GetCurrentOpacity();
721 StopFadeOutAnimation( pushButton, false );
722 StopFadeInAnimation();
724 FadeOutImage( pushButton, Foreground, dimmedImage, 1.f - opacity );
725 FadeOutImage( pushButton, Background, dimmedBackgroundImage, 1.f - opacity );
726 FadeInImage( pushButton, buttonImage, opacity );
727 FadeInImage( pushButton, backgroundImage, opacity );
729 StartFadeOutAnimation( pushButton );
730 StartFadeInAnimation();
732 if( buttonImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
734 mPaintState = DimmedReleasedTransition;
738 mPaintState = ReleasedState;
743 case DimmedReleasedTransition:
748 if( fadeOutButtonImage )
750 opacity = fadeOutButtonImage.GetCurrentOpacity();
752 StopFadeOutAnimation( pushButton, false );
753 StopFadeInAnimation();
755 FadeOutImage( pushButton, Foreground, buttonImage, 1.f - opacity );
756 FadeOutImage( pushButton, Background, backgroundImage, 1.f - opacity );
757 FadeInImage( pushButton, dimmedImage, opacity );
758 FadeInImage( pushButton, dimmedBackgroundImage, opacity );
760 StartFadeOutAnimation( pushButton );
761 StartFadeInAnimation();
763 if( buttonImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
765 mPaintState = ReleasedDimmedTransition;
769 mPaintState = DimmedReleasedState;
774 case PressedDimmedTransition:
779 if( fadeOutButtonImage )
781 opacity = fadeOutButtonImage.GetCurrentOpacity();
783 StopFadeOutAnimation( pushButton, false );
784 StopFadeInAnimation();
786 FadeOutImage( pushButton, Foreground, dimmedImage, 1.f - opacity );
787 FadeOutImage( pushButton, Background, dimmedBackgroundImage, 1.f - opacity );
788 FadeInImage( pushButton, pressedImage, opacity );
789 FadeInImage( pushButton, backgroundImage, opacity );
791 StartFadeOutAnimation( pushButton );
792 StartFadeInAnimation();
794 if( pressedImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
796 mPaintState = DimmedPressedTransition;
800 mPaintState = PressedState;
805 case DimmedPressedTransition:
810 if( fadeOutButtonImage )
812 opacity = fadeOutButtonImage.GetCurrentOpacity();
814 StopFadeOutAnimation( pushButton, false );
815 StopFadeInAnimation();
817 FadeOutImage( pushButton, Foreground, pressedImage, 1.f - opacity );
818 FadeOutImage( pushButton, Background, backgroundImage, 1.f - opacity );
819 FadeInImage( pushButton, dimmedImage, opacity );
820 FadeInImage( pushButton, dimmedBackgroundImage, opacity );
822 StartFadeOutAnimation( pushButton );
823 StartFadeInAnimation();
825 if( pressedImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
827 mPaintState = PressedDimmedTransition;
831 mPaintState = DimmedPressedState;
841 void PushButtonDefaultPainter::SetAnimationTime( float animationTime )
843 mAnimationTime = animationTime;
846 float PushButtonDefaultPainter::GetAnimationTime() const
848 return mAnimationTime;
851 void PushButtonDefaultPainter::SetAutoRepeating( bool autorepeating )
853 mAutoRepeating = autorepeating;
856 void PushButtonDefaultPainter::Pressed( Toolkit::PushButton& button )
858 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
859 Actor& pressedImage = pushButtonImpl.GetPressedImage();
860 Actor& buttonImage = pushButtonImpl.GetButtonImage();
861 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
863 switch( mPaintState )
867 StopFadeOutAnimation( button );
868 FadeOutImage( button, Foreground, buttonImage );
869 FadeInImage( button, pressedImage );
870 StartFadeOutAnimation( button );
871 StartFadeInAnimation();
873 if( buttonImage || pressedImage )
875 mPaintState = ReleasedPressedTransition;
879 mPaintState = PressedState;
883 case ReleasedPressedTransition:
885 if( !mAutoRepeating )
887 mPaintState = PressedReleasedTransition;
891 case PressedReleasedTransition:
894 if( fadeOutButtonImage )
896 opacity = fadeOutButtonImage.GetCurrentOpacity();
898 StopFadeOutAnimation( button, false );
899 StopFadeInAnimation();
901 FadeOutImage( button, Foreground, buttonImage, 1.f - opacity );
902 FadeInImage( button, pressedImage, opacity );
904 StartFadeOutAnimation( button );
905 StartFadeInAnimation();
907 if( buttonImage || pressedImage )
909 mPaintState = ReleasedPressedTransition;
913 mPaintState = PressedState;
922 void PushButtonDefaultPainter::Released( Toolkit::PushButton& button )
924 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
925 Actor& pressedImage = pushButtonImpl.GetPressedImage();
926 Actor& buttonImage = pushButtonImpl.GetButtonImage();
927 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
929 switch( mPaintState )
933 StopFadeOutAnimation( button );
934 FadeOutImage( button, Foreground, pressedImage );
935 FadeInImage( button, buttonImage );
936 StartFadeOutAnimation( button );
937 StartFadeInAnimation();
939 if( buttonImage || pressedImage )
941 mPaintState = PressedReleasedTransition;
945 mPaintState = ReleasedState;
949 case ReleasedPressedTransition:
952 if( fadeOutButtonImage )
954 opacity = fadeOutButtonImage.GetCurrentOpacity();
956 StopFadeOutAnimation( button, false );
957 StopFadeInAnimation();
959 FadeOutImage( button, Foreground, pressedImage, 1.f - opacity );
960 FadeInImage( button, buttonImage, opacity );
962 StartFadeOutAnimation( button );
963 StartFadeInAnimation();
965 if( buttonImage || pressedImage )
967 mPaintState = PressedReleasedTransition;
971 mPaintState = ReleasedState;
982 void PushButtonDefaultPainter::Clicked( Toolkit::PushButton& button )
987 void PushButtonDefaultPainter::Toggled( Toolkit::PushButton& button )
989 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
990 Actor& pressedImage = pushButtonImpl.GetPressedImage();
991 Actor& buttonImage = pushButtonImpl.GetButtonImage();
992 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
994 switch( mPaintState )
998 StopFadeOutAnimation( button );
999 FadeOutImage( button, Foreground, buttonImage );
1000 FadeInImage( button, pressedImage );
1001 StartFadeOutAnimation( button );
1002 StartFadeInAnimation();
1004 if( buttonImage || pressedImage )
1006 mPaintState = ReleasedPressedTransition;
1010 mPaintState = PressedState;
1016 StopFadeOutAnimation( button );
1017 FadeOutImage( button, Foreground, pressedImage );
1018 FadeInImage( button, buttonImage );
1019 StartFadeOutAnimation( button );
1020 StartFadeInAnimation();
1022 if( buttonImage || pressedImage )
1024 mPaintState = PressedReleasedTransition;
1028 mPaintState = ReleasedState;
1032 case ReleasedPressedTransition:
1034 float opacity = 1.f;
1035 if( fadeOutButtonImage )
1037 opacity = fadeOutButtonImage.GetCurrentOpacity();
1039 StopFadeOutAnimation( button, false );
1040 StopFadeInAnimation();
1042 FadeOutImage( button, Foreground, pressedImage, 1.f - opacity );
1043 FadeInImage( button, buttonImage, opacity );
1045 StartFadeOutAnimation( button );
1046 StartFadeInAnimation();
1048 if( buttonImage || pressedImage )
1050 mPaintState = PressedReleasedTransition;
1054 mPaintState = ReleasedState;
1058 case PressedReleasedTransition:
1060 float opacity = 0.f;
1061 if( fadeOutButtonImage )
1063 opacity = 1.f - fadeOutButtonImage.GetCurrentOpacity();
1065 StopFadeOutAnimation( button, false );
1066 StopFadeInAnimation();
1068 FadeOutImage( button, Foreground, buttonImage, 1.f - opacity );
1069 FadeInImage( button, pressedImage, opacity );
1071 StartFadeOutAnimation( button );
1072 StartFadeInAnimation();
1074 if( buttonImage || pressedImage )
1076 mPaintState = ReleasedPressedTransition;
1080 mPaintState = PressedState;
1091 void PushButtonDefaultPainter::ApplyConstraint( Actor& actor, float depth )
1095 actor.SetPosition( 0.f, 0.f, depth );
1096 actor.RemoveConstraints();
1097 actor.ApplyConstraint( Constraint::New<Vector3>( Actor::SIZE, ParentSource( Actor::SIZE ), EqualToConstraint() ) );
1101 void PushButtonDefaultPainter::AddToFadeInAnimation( const Actor& actor )
1103 if( !mFadeInAnimation )
1105 mFadeInAnimation = Dali::Animation::New( mAnimationTime );
1108 mFadeInAnimation.OpacityTo( actor, 1.f );
1111 void PushButtonDefaultPainter::StartFadeInAnimation()
1113 if( mFadeInAnimation )
1115 mFadeInAnimation.FinishedSignal().Connect( this, &PushButtonDefaultPainter::PressedReleasedFadeInAnimationFinished );
1116 mFadeInAnimation.Play();
1120 void PushButtonDefaultPainter::StopFadeInAnimation()
1122 if( mFadeInAnimation )
1124 mFadeInAnimation.Clear();
1125 mFadeInAnimation.Reset();
1129 void PushButtonDefaultPainter::AddToFadeOutAnimation( const Actor& actor )
1131 if( !mFadeOutAnimation )
1133 mFadeOutAnimation = Dali::Animation::New( mAnimationTime );
1136 mFadeOutAnimation.OpacityTo( actor, 0.f );
1139 void PushButtonDefaultPainter::StartFadeOutAnimation( Toolkit::PushButton& pushButton )
1141 if( mFadeOutAnimation )
1143 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( pushButton );
1144 mButton = &pushButtonImpl;
1146 mFadeOutAnimation.FinishedSignal().Connect( this, &PushButtonDefaultPainter::PressedReleasedFadeOutAnimationFinished );
1147 mFadeOutAnimation.Play();
1151 void PushButtonDefaultPainter::StopFadeOutAnimation( Toolkit::PushButton& pushButton, bool remove )
1153 if( mFadeOutAnimation )
1155 mFadeOutAnimation.Clear();
1158 mFadeOutAnimation.Reset();
1162 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( pushButton );
1163 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
1164 Actor& fadeOutBackgroundImage = pushButtonImpl.GetFadeOutBackgroundImage();
1166 if( fadeOutButtonImage && fadeOutButtonImage.GetParent() )
1168 fadeOutButtonImage.GetParent().Remove( fadeOutButtonImage );
1171 if( fadeOutBackgroundImage && fadeOutBackgroundImage.GetParent() )
1173 fadeOutBackgroundImage.GetParent().Remove( fadeOutBackgroundImage );
1176 fadeOutButtonImage.Reset();
1177 fadeOutBackgroundImage.Reset();
1181 void PushButtonDefaultPainter::FadeInImage( Toolkit::PushButton& pushButton, Actor& image, float opacity )
1185 image.SetOpacity( opacity );
1186 if( !image.GetParent() )
1188 pushButton.Add( image );
1191 AddToFadeInAnimation( image );
1195 void PushButtonDefaultPainter::FadeOutImage( Toolkit::PushButton& pushButton, ImageLayer layer, Actor& image, float opacity )
1199 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( pushButton );
1200 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
1201 Actor& fadeOutBackgroundImage = pushButtonImpl.GetFadeOutBackgroundImage();
1203 Actor& actorLayer = ( ( Background == layer ) ? fadeOutBackgroundImage : fadeOutButtonImage );
1206 actorLayer.SetOpacity( opacity );
1208 AddToFadeOutAnimation( actorLayer );
1212 void PushButtonDefaultPainter::PressedReleasedFadeOutAnimationFinished( Dali::Animation& source )
1214 switch( mPaintState )
1216 case ReleasedPressedTransition:
1218 mPaintState = PressedState;
1221 case PressedReleasedTransition:
1223 mPaintState = ReleasedState;
1226 case ReleasedDimmedTransition:
1228 mPaintState = DimmedReleasedState;
1231 case DimmedReleasedTransition:
1233 mPaintState = ReleasedState;
1236 case PressedDimmedTransition:
1238 mPaintState = DimmedPressedState;
1241 case DimmedPressedTransition:
1243 mPaintState = PressedState;
1252 Toolkit::PushButton handle( mButton->GetOwner() );
1253 StopFadeOutAnimation( handle );
1257 void PushButtonDefaultPainter::PressedReleasedFadeInAnimationFinished( Dali::Animation& source )
1259 switch( mPaintState )
1261 case ReleasedPressedTransition:
1263 mPaintState = PressedState;
1266 case PressedReleasedTransition:
1268 mPaintState = ReleasedState;
1271 case ReleasedDimmedTransition:
1273 mPaintState = DimmedReleasedState;
1276 case DimmedReleasedTransition:
1278 mPaintState = ReleasedState;
1281 case PressedDimmedTransition:
1283 mPaintState = DimmedPressedState;
1286 case DimmedPressedTransition:
1288 mPaintState = PressedState;
1297 StopFadeInAnimation();
1300 } // namespace Internal
1302 } // namespace Toolkit