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/active-constraint.h>
25 #include <dali/public-api/animation/constraint.h>
26 #include <dali/public-api/animation/constraints.h>
27 #include <dali/public-api/object/ref-object.h>
30 #include <dali-toolkit/public-api/controls/buttons/push-button.h>
31 #include "push-button-impl.h"
44 const float LABEL_DEPTH( 0.75f );
45 const float FOREGROUND_DEPTH( 0.5f );
46 const float BACKGROUND_DEPTH( 0.25f );
48 const float ANIMATION_TIME( 0.2f );
50 inline Toolkit::Internal::PushButton& GetPushButtonImpl( Toolkit::Button& button )
52 DALI_ASSERT_ALWAYS( button );
54 Dali::RefObject& handle = button.GetImplementation();
56 return static_cast<Toolkit::Internal::PushButton&>( handle );
59 inline const Toolkit::Internal::PushButton& GetPushButtonImpl( const Toolkit::Button& button )
61 DALI_ASSERT_ALWAYS( button );
63 const Dali::RefObject& handle = button.GetImplementation();
65 return static_cast<const Toolkit::Internal::PushButton&>( handle );
70 PushButtonDefaultPainter::PushButtonDefaultPainter()
71 : PushButtonPainter(),
72 mAutoRepeating( false ),
74 mPaintState( ReleasedState ),
76 mAnimationTime( ANIMATION_TIME ),
81 PushButtonDefaultPainter::~PushButtonDefaultPainter()
83 if( mFadeInAnimation )
85 mFadeInAnimation.Clear();
87 if( mFadeOutAnimation )
89 mFadeOutAnimation.Clear();
93 void PushButtonDefaultPainter::Initialize( Toolkit::Button& button )
95 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
96 Actor& buttonImage = pushButtonImpl.GetButtonImage();
97 Actor& selectedImage = pushButtonImpl.GetSelectedImage();
98 Actor& backgroundImage = pushButtonImpl.GetBackgroundImage();
99 Actor& disabledImage = pushButtonImpl.GetDisabledImage();
100 Actor& disabledBackgroundImage = pushButtonImpl.GetDisabledBackgroundImage();
101 Actor& label = pushButtonImpl.GetLabel();
103 Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
107 SetButtonImage( pushButton, buttonImage );
110 if( backgroundImage )
112 SetBackgroundImage( pushButton, backgroundImage );
117 SetSelectedImage( pushButton, selectedImage );
122 SetDisabledImage( pushButton, disabledImage );
125 if( disabledBackgroundImage )
127 SetDisabledBackgroundImage( pushButton, disabledBackgroundImage );
132 SetLabel( pushButton, label );
135 SetDisabled( pushButton, mDisabled );
138 void PushButtonDefaultPainter::SetSize( Toolkit::Button& button, const Vector3& size )
144 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
145 Actor& buttonImage = pushButtonImpl.GetButtonImage();
146 Actor& selectedImage = pushButtonImpl.GetSelectedImage();
147 Actor& backgroundImage = pushButtonImpl.GetBackgroundImage();
148 Actor& disabledImage = pushButtonImpl.GetDisabledImage();
149 Actor& disabledBackgroundImage = pushButtonImpl.GetDisabledBackgroundImage();
150 Actor& label = pushButtonImpl.GetLabel();
152 ApplyConstraint( buttonImage, FOREGROUND_DEPTH );
153 ApplyConstraint( backgroundImage, BACKGROUND_DEPTH );
154 ApplyConstraint( selectedImage, FOREGROUND_DEPTH );
155 ApplyConstraint( disabledImage, FOREGROUND_DEPTH );
156 ApplyConstraint( disabledBackgroundImage, BACKGROUND_DEPTH );
160 label.SetPosition( 0.f, 0.f, LABEL_DEPTH );
161 label.SetSize( mSize );
166 void PushButtonDefaultPainter::SetDisabled( Toolkit::Button& button, bool disabled )
168 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
169 Actor& buttonImage = pushButtonImpl.GetButtonImage();
170 Actor& selectedImage = pushButtonImpl.GetSelectedImage();
171 Actor& backgroundImage = pushButtonImpl.GetBackgroundImage();
172 Actor& disabledImage = pushButtonImpl.GetDisabledImage();
173 Actor& disabledBackgroundImage = pushButtonImpl.GetDisabledBackgroundImage();
174 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
176 Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
178 mDisabled = disabled;
180 switch( mPaintState )
186 StopFadeOutAnimation( pushButton );
187 FadeOutImage( pushButton, Background, backgroundImage );
188 FadeOutImage( pushButton, Foreground, buttonImage );
189 FadeInImage( pushButton, disabledBackgroundImage );
190 FadeInImage( pushButton, disabledImage );
191 StartFadeOutAnimation( pushButton );
192 StartFadeInAnimation();
194 if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
196 mPaintState = ReleasedDisabledTransition;
200 mPaintState = DisabledReleasedState;
209 StopFadeOutAnimation( pushButton );
210 FadeOutImage( pushButton, Background, backgroundImage );
211 FadeOutImage( pushButton, Foreground, selectedImage );
212 FadeInImage( pushButton, disabledBackgroundImage );
213 FadeInImage( pushButton, disabledImage );
214 StartFadeOutAnimation( pushButton );
215 StartFadeInAnimation();
217 if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
219 mPaintState = PressedDisabledTransition;
223 mPaintState = DisabledPressedState;
228 case DisabledReleasedState:
232 StopFadeOutAnimation( pushButton );
233 FadeOutImage( pushButton, Background, disabledBackgroundImage );
234 FadeOutImage( pushButton, Foreground, disabledImage );
235 FadeInImage( pushButton, backgroundImage );
236 FadeInImage( pushButton, buttonImage );
237 StartFadeOutAnimation( pushButton );
238 StartFadeInAnimation();
240 if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
242 mPaintState = DisabledReleasedTransition;
246 mPaintState = ReleasedState;
251 case DisabledPressedState:
255 StopFadeOutAnimation( pushButton );
256 FadeOutImage( pushButton, Background, disabledBackgroundImage );
257 FadeOutImage( pushButton, Foreground, disabledImage );
258 FadeInImage( pushButton, backgroundImage );
259 FadeInImage( pushButton, selectedImage );
260 StartFadeOutAnimation( pushButton );
261 StartFadeInAnimation();
263 if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
265 mPaintState = DisabledPressedTransition;
269 mPaintState = PressedState;
274 case ReleasedPressedTransition:
279 if( fadeOutButtonImage )
281 opacity = fadeOutButtonImage.GetCurrentOpacity();
283 StopFadeOutAnimation( pushButton );
284 StopFadeInAnimation();
286 FadeOutImage( pushButton, Foreground, selectedImage, 1.f - opacity );
287 FadeOutImage( pushButton, Background, backgroundImage );
289 FadeInImage( pushButton, disabledImage );
290 FadeInImage( pushButton, disabledBackgroundImage );
292 StartFadeOutAnimation( pushButton );
293 StartFadeInAnimation();
295 if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
297 mPaintState = PressedDisabledTransition;
301 mPaintState = DisabledPressedState;
306 case PressedReleasedTransition:
311 if( fadeOutButtonImage )
313 opacity = fadeOutButtonImage.GetCurrentOpacity();
315 StopFadeOutAnimation( pushButton );
316 StopFadeInAnimation();
318 FadeOutImage( pushButton, Foreground, buttonImage, 1.f - opacity );
319 FadeOutImage( pushButton, Background, backgroundImage );
321 FadeInImage( pushButton, disabledImage );
322 FadeInImage( pushButton, disabledBackgroundImage );
324 StartFadeOutAnimation( pushButton );
325 StartFadeInAnimation();
327 if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
329 mPaintState = ReleasedDisabledTransition;
333 mPaintState = DisabledReleasedState;
338 case ReleasedDisabledTransition:
343 if( fadeOutButtonImage )
345 opacity = fadeOutButtonImage.GetCurrentOpacity();
347 StopFadeOutAnimation( pushButton, false );
348 StopFadeInAnimation();
350 FadeOutImage( pushButton, Foreground, disabledImage, 1.f - opacity );
351 FadeOutImage( pushButton, Background, disabledBackgroundImage, 1.f - opacity );
352 FadeInImage( pushButton, buttonImage, opacity );
353 FadeInImage( pushButton, backgroundImage, opacity );
355 StartFadeOutAnimation( pushButton );
356 StartFadeInAnimation();
358 if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
360 mPaintState = DisabledReleasedTransition;
364 mPaintState = ReleasedState;
369 case DisabledReleasedTransition:
374 if( fadeOutButtonImage )
376 opacity = fadeOutButtonImage.GetCurrentOpacity();
378 StopFadeOutAnimation( pushButton, false );
379 StopFadeInAnimation();
381 FadeOutImage( pushButton, Foreground, buttonImage, 1.f - opacity );
382 FadeOutImage( pushButton, Background, backgroundImage, 1.f - opacity );
383 FadeInImage( pushButton, disabledImage, opacity );
384 FadeInImage( pushButton, disabledBackgroundImage, opacity );
386 StartFadeOutAnimation( pushButton );
387 StartFadeInAnimation();
389 if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
391 mPaintState = ReleasedDisabledTransition;
395 mPaintState = DisabledReleasedState;
400 case PressedDisabledTransition:
405 if( fadeOutButtonImage )
407 opacity = fadeOutButtonImage.GetCurrentOpacity();
409 StopFadeOutAnimation( pushButton, false );
410 StopFadeInAnimation();
412 FadeOutImage( pushButton, Foreground, disabledImage, 1.f - opacity );
413 FadeOutImage( pushButton, Background, disabledBackgroundImage, 1.f - opacity );
414 FadeInImage( pushButton, selectedImage, opacity );
415 FadeInImage( pushButton, backgroundImage, opacity );
417 StartFadeOutAnimation( pushButton );
418 StartFadeInAnimation();
420 if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
422 mPaintState = DisabledPressedTransition;
426 mPaintState = PressedState;
431 case DisabledPressedTransition:
436 if( fadeOutButtonImage )
438 opacity = fadeOutButtonImage.GetCurrentOpacity();
440 StopFadeOutAnimation( pushButton, false );
441 StopFadeInAnimation();
443 FadeOutImage( pushButton, Foreground, selectedImage, 1.f - opacity );
444 FadeOutImage( pushButton, Background, backgroundImage, 1.f - opacity );
445 FadeInImage( pushButton, disabledImage, opacity );
446 FadeInImage( pushButton, disabledBackgroundImage, opacity );
448 StartFadeOutAnimation( pushButton );
449 StartFadeInAnimation();
451 if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
453 mPaintState = PressedDisabledTransition;
457 mPaintState = DisabledPressedState;
467 void PushButtonDefaultPainter::SetAnimationTime( float animationTime )
469 mAnimationTime = animationTime;
472 float PushButtonDefaultPainter::GetAnimationTime() const
474 return mAnimationTime;
477 void PushButtonDefaultPainter::SetAutoRepeating( bool autorepeating )
479 mAutoRepeating = autorepeating;
482 void PushButtonDefaultPainter::SetLabel( Toolkit::Button& button, Actor label )
484 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
485 Actor& labelActor = pushButtonImpl.GetLabel();
487 Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
489 if( labelActor && labelActor.GetParent() )
491 labelActor.GetParent().Remove( labelActor );
495 labelActor.SetAnchorPoint( AnchorPoint::CENTER );
496 labelActor.SetParentOrigin( ParentOrigin::CENTER );
498 labelActor.SetPosition( 0.f, 0.f, LABEL_DEPTH );
499 labelActor.SetSize( mSize );
501 pushButton.Add( labelActor );
504 void PushButtonDefaultPainter::SetButtonImage( Toolkit::Button& button, Actor image )
506 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
507 Actor& buttonImage = pushButtonImpl.GetButtonImage();
508 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
510 Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
512 switch( mPaintState )
516 if( buttonImage && buttonImage.GetParent() )
518 StopFadeOutAnimation( pushButton );
519 FadeOutImage( pushButton, Foreground, buttonImage );
523 FadeInImage( pushButton, buttonImage );
525 StartFadeOutAnimation( pushButton );
526 StartFadeInAnimation();
531 pushButton.Add( buttonImage );
535 case ReleasedPressedTransition: // FALLTHROUGH
536 case ReleasedDisabledTransition:
539 if( fadeOutButtonImage )
541 opacity = fadeOutButtonImage.GetCurrentOpacity();
543 StopFadeOutAnimation( pushButton );
545 // Replaces the button image.
548 pushButton.Add( buttonImage );
549 FadeOutImage( pushButton, Foreground, buttonImage, opacity );
551 StartFadeOutAnimation( pushButton );
554 case PressedReleasedTransition: // FALLTHROUGH
555 case DisabledReleasedTransition:
557 StopFadeInAnimation();
558 pushButton.Remove( buttonImage );
562 FadeInImage( pushButton, buttonImage );
563 StartFadeInAnimation();
571 buttonImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
572 buttonImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
573 ApplyConstraint( buttonImage, FOREGROUND_DEPTH );
576 void PushButtonDefaultPainter::SetSelectedImage( Toolkit::Button& button, Actor image )
578 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
579 Actor& selectedImage = pushButtonImpl.GetSelectedImage();
580 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
582 Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
584 switch( mPaintState )
588 if( selectedImage && selectedImage.GetParent() )
590 StopFadeOutAnimation( pushButton );
591 FadeOutImage( pushButton, Foreground, selectedImage );
593 selectedImage = image;
595 FadeInImage( pushButton, selectedImage );
597 StartFadeOutAnimation( pushButton );
598 StartFadeInAnimation();
602 selectedImage = image;
603 pushButton.Add( selectedImage );
607 case PressedReleasedTransition: // FALLTHROUGH
608 case PressedDisabledTransition:
611 if( fadeOutButtonImage )
613 opacity = fadeOutButtonImage.GetCurrentOpacity();
615 StopFadeOutAnimation( pushButton );
617 // Replaces the button image.
618 selectedImage = image;
620 pushButton.Add( selectedImage );
621 FadeOutImage( pushButton, Foreground, selectedImage, opacity );
623 StartFadeOutAnimation( pushButton );
626 case ReleasedPressedTransition: // FALLTHROUGH
627 case DisabledPressedTransition:
629 StopFadeInAnimation();
630 pushButton.Remove( selectedImage );
632 selectedImage = image;
634 FadeInImage( pushButton, selectedImage );
635 StartFadeInAnimation();
639 selectedImage = image;
643 selectedImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
644 selectedImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
645 ApplyConstraint( selectedImage, FOREGROUND_DEPTH );
648 void PushButtonDefaultPainter::SetBackgroundImage( Toolkit::Button& button, Actor image )
650 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
651 Actor& backgroundImage = pushButtonImpl.GetBackgroundImage();
652 Actor& fadeOutBackgroundImage = pushButtonImpl.GetFadeOutBackgroundImage();
654 Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
656 switch( mPaintState )
658 case ReleasedState: // FALLTHROUGH
660 case ReleasedPressedTransition:
661 case PressedReleasedTransition:
663 if( backgroundImage && backgroundImage.GetParent() )
665 StopFadeOutAnimation( pushButton );
666 FadeOutImage( pushButton, Background, backgroundImage );
668 backgroundImage = image;
670 FadeInImage( pushButton, backgroundImage );
672 StartFadeOutAnimation( pushButton );
673 StartFadeInAnimation();
677 backgroundImage = image;
678 pushButton.Add( backgroundImage );
682 case ReleasedDisabledTransition: // FALLTHROUGH
683 case PressedDisabledTransition:
686 if( fadeOutBackgroundImage )
688 opacity = fadeOutBackgroundImage.GetCurrentOpacity();
690 StopFadeOutAnimation( pushButton );
692 // Replaces the button image.
693 backgroundImage = image;
695 pushButton.Add( backgroundImage );
696 FadeOutImage( pushButton, Background, backgroundImage, opacity );
698 StartFadeOutAnimation( pushButton );
701 case DisabledReleasedTransition: // FALLTHROUGH
702 case DisabledPressedTransition:
704 StopFadeInAnimation();
705 pushButton.Remove( backgroundImage );
707 backgroundImage = image;
709 FadeInImage( pushButton, backgroundImage );
710 StartFadeInAnimation();
714 backgroundImage = image;
718 backgroundImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
719 backgroundImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
720 ApplyConstraint( backgroundImage, BACKGROUND_DEPTH );
723 void PushButtonDefaultPainter::SetDisabledImage( Toolkit::Button& button, Actor image )
725 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
726 Actor& disabledImage = pushButtonImpl.GetDisabledImage();
727 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
729 Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
731 switch( mPaintState )
733 case DisabledReleasedState: // FALLTHROUGH
734 case DisabledPressedState:
736 if( disabledImage && disabledImage.GetParent() )
738 StopFadeOutAnimation( pushButton );
739 FadeOutImage( pushButton, Foreground, disabledImage );
741 disabledImage = image;
743 FadeInImage( pushButton, disabledImage );
745 StartFadeOutAnimation( pushButton );
746 StartFadeInAnimation();
750 disabledImage = image;
751 pushButton.Add( disabledImage );
755 case ReleasedDisabledTransition: // FALLTHROUGH
756 case PressedDisabledTransition:
758 StopFadeInAnimation();
759 pushButton.Remove( disabledImage );
761 disabledImage = image;
763 FadeInImage( pushButton, disabledImage );
764 StartFadeInAnimation();
767 case DisabledReleasedTransition: // FALLTHROUGH
768 case DisabledPressedTransition:
771 if( fadeOutButtonImage )
773 opacity = fadeOutButtonImage.GetCurrentOpacity();
775 StopFadeOutAnimation( pushButton );
777 // Replaces the button image.
778 disabledImage = image;
780 pushButton.Add( disabledImage );
781 FadeOutImage( pushButton, Foreground, disabledImage, opacity );
783 StartFadeOutAnimation( pushButton );
787 disabledImage = image;
791 disabledImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
792 disabledImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
793 ApplyConstraint( disabledImage, FOREGROUND_DEPTH );
796 void PushButtonDefaultPainter::SetDisabledBackgroundImage( Toolkit::Button& button, Actor image )
798 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
799 Actor& disabledBackgroundImage = pushButtonImpl.GetDisabledBackgroundImage();
800 Actor& fadeOutBackgroundImage = pushButtonImpl.GetFadeOutBackgroundImage();
802 Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
804 switch( mPaintState )
806 case DisabledReleasedState: // FALLTHROUGH
807 case DisabledPressedState:
809 if( disabledBackgroundImage && disabledBackgroundImage.GetParent() )
811 StopFadeOutAnimation( pushButton );
812 FadeOutImage( pushButton, Background, disabledBackgroundImage );
814 disabledBackgroundImage = image;
816 FadeInImage( pushButton, disabledBackgroundImage );
818 StartFadeOutAnimation( pushButton );
819 StartFadeInAnimation();
823 disabledBackgroundImage = image;
824 pushButton.Add( disabledBackgroundImage );
828 case ReleasedDisabledTransition: // FALLTHROUGH
829 case PressedDisabledTransition:
831 StopFadeInAnimation();
832 pushButton.Remove( disabledBackgroundImage );
834 disabledBackgroundImage = image;
836 FadeInImage( pushButton, disabledBackgroundImage );
837 StartFadeInAnimation();
840 case DisabledReleasedTransition: // FALLTHROUGH
841 case DisabledPressedTransition:
844 if( fadeOutBackgroundImage )
846 opacity = fadeOutBackgroundImage.GetCurrentOpacity();
848 StopFadeOutAnimation( pushButton );
850 // Replaces the button image.
851 disabledBackgroundImage = image;
853 pushButton.Add( disabledBackgroundImage );
854 FadeOutImage( pushButton, Background, disabledBackgroundImage, opacity );
856 StartFadeOutAnimation( pushButton );
860 disabledBackgroundImage = image;
864 disabledBackgroundImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
865 disabledBackgroundImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
866 ApplyConstraint( disabledBackgroundImage, BACKGROUND_DEPTH );
869 void PushButtonDefaultPainter::Pressed( Toolkit::Button& button )
871 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
872 Actor& selectedImage = pushButtonImpl.GetSelectedImage();
873 Actor& buttonImage = pushButtonImpl.GetButtonImage();
874 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
876 Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
878 switch( mPaintState )
882 StopFadeOutAnimation( pushButton );
883 FadeOutImage( pushButton, Foreground, buttonImage );
884 FadeInImage( pushButton, selectedImage );
885 StartFadeOutAnimation( pushButton );
886 StartFadeInAnimation();
888 if( buttonImage || selectedImage )
890 mPaintState = ReleasedPressedTransition;
894 mPaintState = PressedState;
898 case ReleasedPressedTransition:
900 if( !mAutoRepeating )
902 mPaintState = PressedReleasedTransition;
906 case PressedReleasedTransition:
909 if( fadeOutButtonImage )
911 opacity = fadeOutButtonImage.GetCurrentOpacity();
913 StopFadeOutAnimation( pushButton, false );
914 StopFadeInAnimation();
916 FadeOutImage( pushButton, Foreground, buttonImage, 1.f - opacity );
917 FadeInImage( pushButton, selectedImage, opacity );
919 StartFadeOutAnimation( pushButton );
920 StartFadeInAnimation();
922 if( buttonImage || selectedImage )
924 mPaintState = ReleasedPressedTransition;
928 mPaintState = PressedState;
937 void PushButtonDefaultPainter::Released( Toolkit::Button& button )
939 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
940 Actor& selectedImage = pushButtonImpl.GetSelectedImage();
941 Actor& buttonImage = pushButtonImpl.GetButtonImage();
942 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
944 Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
946 switch( mPaintState )
950 StopFadeOutAnimation( pushButton );
951 FadeOutImage( pushButton, Foreground, selectedImage );
952 FadeInImage( pushButton, buttonImage );
953 StartFadeOutAnimation( pushButton );
954 StartFadeInAnimation();
956 if( buttonImage || selectedImage )
958 mPaintState = PressedReleasedTransition;
962 mPaintState = ReleasedState;
966 case ReleasedPressedTransition:
969 if( fadeOutButtonImage )
971 opacity = fadeOutButtonImage.GetCurrentOpacity();
973 StopFadeOutAnimation( pushButton, false );
974 StopFadeInAnimation();
976 FadeOutImage( pushButton, Foreground, selectedImage, 1.f - opacity );
977 FadeInImage( pushButton, buttonImage, opacity );
979 StartFadeOutAnimation( pushButton );
980 StartFadeInAnimation();
982 if( buttonImage || selectedImage )
984 mPaintState = PressedReleasedTransition;
988 mPaintState = ReleasedState;
999 void PushButtonDefaultPainter::Clicked( Toolkit::Button& button )
1004 void PushButtonDefaultPainter::Selected( Toolkit::Button& button )
1006 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
1007 Actor& selectedImage = pushButtonImpl.GetSelectedImage();
1008 Actor& buttonImage = pushButtonImpl.GetButtonImage();
1009 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
1011 Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
1013 switch( mPaintState )
1017 StopFadeOutAnimation( pushButton );
1018 FadeOutImage( pushButton, Foreground, buttonImage );
1019 FadeInImage( pushButton, selectedImage );
1020 StartFadeOutAnimation( pushButton );
1021 StartFadeInAnimation();
1023 if( buttonImage || selectedImage )
1025 mPaintState = ReleasedPressedTransition;
1029 mPaintState = PressedState;
1035 StopFadeOutAnimation( pushButton );
1036 FadeOutImage( pushButton, Foreground, selectedImage );
1037 FadeInImage( pushButton, buttonImage );
1038 StartFadeOutAnimation( pushButton );
1039 StartFadeInAnimation();
1041 if( buttonImage || selectedImage )
1043 mPaintState = PressedReleasedTransition;
1047 mPaintState = ReleasedState;
1051 case ReleasedPressedTransition:
1053 float opacity = 1.f;
1054 if( fadeOutButtonImage )
1056 opacity = fadeOutButtonImage.GetCurrentOpacity();
1058 StopFadeOutAnimation( pushButton, false );
1059 StopFadeInAnimation();
1061 FadeOutImage( pushButton, Foreground, selectedImage, 1.f - opacity );
1062 FadeInImage( pushButton, buttonImage, opacity );
1064 StartFadeOutAnimation( pushButton );
1065 StartFadeInAnimation();
1067 if( buttonImage || selectedImage )
1069 mPaintState = PressedReleasedTransition;
1073 mPaintState = ReleasedState;
1077 case PressedReleasedTransition:
1079 float opacity = 0.f;
1080 if( fadeOutButtonImage )
1082 opacity = 1.f - fadeOutButtonImage.GetCurrentOpacity();
1084 StopFadeOutAnimation( pushButton, false );
1085 StopFadeInAnimation();
1087 FadeOutImage( pushButton, Foreground, buttonImage, 1.f - opacity );
1088 FadeInImage( pushButton, selectedImage, opacity );
1090 StartFadeOutAnimation( pushButton );
1091 StartFadeInAnimation();
1093 if( buttonImage || selectedImage )
1095 mPaintState = ReleasedPressedTransition;
1099 mPaintState = PressedState;
1110 void PushButtonDefaultPainter::ApplyConstraint( Actor& actor, float depth )
1114 actor.SetPosition( 0.f, 0.f, depth );
1115 actor.RemoveConstraints();
1116 actor.ApplyConstraint( Constraint::New<Vector3>( Actor::SIZE, ParentSource( Actor::SIZE ), EqualToConstraint() ) );
1120 void PushButtonDefaultPainter::AddToFadeInAnimation( const Actor& actor )
1122 if( !mFadeInAnimation )
1124 mFadeInAnimation = Dali::Animation::New( mAnimationTime );
1127 mFadeInAnimation.OpacityTo( actor, 1.f );
1130 void PushButtonDefaultPainter::StartFadeInAnimation()
1132 if( mFadeInAnimation )
1134 mFadeInAnimation.FinishedSignal().Connect( this, &PushButtonDefaultPainter::PressedReleasedFadeInAnimationFinished );
1135 mFadeInAnimation.Play();
1139 void PushButtonDefaultPainter::StopFadeInAnimation()
1141 if( mFadeInAnimation )
1143 mFadeInAnimation.Clear();
1144 mFadeInAnimation.Reset();
1148 void PushButtonDefaultPainter::AddToFadeOutAnimation( const Actor& actor )
1150 if( !mFadeOutAnimation )
1152 mFadeOutAnimation = Dali::Animation::New( mAnimationTime );
1155 mFadeOutAnimation.OpacityTo( actor, 0.f );
1158 void PushButtonDefaultPainter::StartFadeOutAnimation( Toolkit::PushButton& pushButton )
1160 if( mFadeOutAnimation )
1162 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( pushButton );
1163 mButton = &pushButtonImpl;
1165 mFadeOutAnimation.FinishedSignal().Connect( this, &PushButtonDefaultPainter::PressedReleasedFadeOutAnimationFinished );
1166 mFadeOutAnimation.Play();
1170 void PushButtonDefaultPainter::StopFadeOutAnimation( Toolkit::PushButton& pushButton, bool remove )
1172 if( mFadeOutAnimation )
1174 mFadeOutAnimation.Clear();
1177 mFadeOutAnimation.Reset();
1181 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( pushButton );
1182 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
1183 Actor& fadeOutBackgroundImage = pushButtonImpl.GetFadeOutBackgroundImage();
1185 if( fadeOutButtonImage && fadeOutButtonImage.GetParent() )
1187 fadeOutButtonImage.GetParent().Remove( fadeOutButtonImage );
1190 if( fadeOutBackgroundImage && fadeOutBackgroundImage.GetParent() )
1192 fadeOutBackgroundImage.GetParent().Remove( fadeOutBackgroundImage );
1195 fadeOutButtonImage.Reset();
1196 fadeOutBackgroundImage.Reset();
1200 void PushButtonDefaultPainter::FadeInImage( Toolkit::PushButton& pushButton, Actor& image, float opacity )
1204 image.SetOpacity( opacity );
1205 if( !image.GetParent() )
1207 pushButton.Add( image );
1210 AddToFadeInAnimation( image );
1214 void PushButtonDefaultPainter::FadeOutImage( Toolkit::PushButton& pushButton, ImageLayer layer, Actor& image, float opacity )
1218 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( pushButton );
1219 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
1220 Actor& fadeOutBackgroundImage = pushButtonImpl.GetFadeOutBackgroundImage();
1222 Actor& actorLayer = ( ( Background == layer ) ? fadeOutBackgroundImage : fadeOutButtonImage );
1225 actorLayer.SetOpacity( opacity );
1227 AddToFadeOutAnimation( actorLayer );
1231 void PushButtonDefaultPainter::PressedReleasedFadeOutAnimationFinished( Dali::Animation& source )
1233 switch( mPaintState )
1235 case ReleasedPressedTransition:
1237 mPaintState = PressedState;
1240 case PressedReleasedTransition:
1242 mPaintState = ReleasedState;
1245 case ReleasedDisabledTransition:
1247 mPaintState = DisabledReleasedState;
1250 case DisabledReleasedTransition:
1252 mPaintState = ReleasedState;
1255 case PressedDisabledTransition:
1257 mPaintState = DisabledPressedState;
1260 case DisabledPressedTransition:
1262 mPaintState = PressedState;
1271 Toolkit::PushButton handle( mButton->GetOwner() );
1272 StopFadeOutAnimation( handle );
1276 void PushButtonDefaultPainter::PressedReleasedFadeInAnimationFinished( Dali::Animation& source )
1278 switch( mPaintState )
1280 case ReleasedPressedTransition:
1282 mPaintState = PressedState;
1285 case PressedReleasedTransition:
1287 mPaintState = ReleasedState;
1290 case ReleasedDisabledTransition:
1292 mPaintState = DisabledReleasedState;
1295 case DisabledReleasedTransition:
1297 mPaintState = ReleasedState;
1300 case PressedDisabledTransition:
1302 mPaintState = DisabledPressedState;
1305 case DisabledPressedTransition:
1307 mPaintState = PressedState;
1316 StopFadeInAnimation();
1319 } // namespace Internal
1321 } // namespace Toolkit