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 "push-button-impl.h"
42 const float LABEL_DEPTH( 0.75f );
43 const float FOREGROUND_DEPTH( 0.5f );
44 const float BACKGROUND_DEPTH( 0.25f );
46 const float ANIMATION_TIME( 0.2f );
48 inline Toolkit::Internal::PushButton& GetPushButtonImpl( Toolkit::Button& button )
50 DALI_ASSERT_ALWAYS( button );
52 Dali::RefObject& handle = button.GetImplementation();
54 return static_cast<Toolkit::Internal::PushButton&>( handle );
57 inline const Toolkit::Internal::PushButton& GetPushButtonImpl( const Toolkit::Button& button )
59 DALI_ASSERT_ALWAYS( button );
61 const Dali::RefObject& handle = button.GetImplementation();
63 return static_cast<const Toolkit::Internal::PushButton&>( handle );
68 PushButtonDefaultPainter::PushButtonDefaultPainter()
69 : PushButtonPainter(),
70 mAutoRepeating( false ),
72 mPaintState( ReleasedState ),
74 mAnimationTime( ANIMATION_TIME ),
79 PushButtonDefaultPainter::~PushButtonDefaultPainter()
81 if( mFadeInAnimation )
83 mFadeInAnimation.Clear();
85 if( mFadeOutAnimation )
87 mFadeOutAnimation.Clear();
91 void PushButtonDefaultPainter::Initialize( Toolkit::Button& button )
93 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
94 Actor& buttonImage = pushButtonImpl.GetButtonImage();
95 Actor& selectedImage = pushButtonImpl.GetSelectedImage();
96 Actor& backgroundImage = pushButtonImpl.GetBackgroundImage();
97 Actor& disabledImage = pushButtonImpl.GetDisabledImage();
98 Actor& disabledBackgroundImage = pushButtonImpl.GetDisabledBackgroundImage();
99 Actor& label = pushButtonImpl.GetLabel();
101 Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
105 SetButtonImage( pushButton, buttonImage );
108 if( backgroundImage )
110 SetBackgroundImage( pushButton, backgroundImage );
115 SetSelectedImage( pushButton, selectedImage );
120 SetDisabledImage( pushButton, disabledImage );
123 if( disabledBackgroundImage )
125 SetDisabledBackgroundImage( pushButton, disabledBackgroundImage );
130 SetLabel( pushButton, label );
133 SetDisabled( pushButton, mDisabled );
136 void PushButtonDefaultPainter::SetSize( Toolkit::Button& button, const Vector3& size )
142 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
143 Actor& buttonImage = pushButtonImpl.GetButtonImage();
144 Actor& selectedImage = pushButtonImpl.GetSelectedImage();
145 Actor& backgroundImage = pushButtonImpl.GetBackgroundImage();
146 Actor& disabledImage = pushButtonImpl.GetDisabledImage();
147 Actor& disabledBackgroundImage = pushButtonImpl.GetDisabledBackgroundImage();
148 Actor& label = pushButtonImpl.GetLabel();
150 ApplyConstraint( buttonImage, FOREGROUND_DEPTH );
151 ApplyConstraint( backgroundImage, BACKGROUND_DEPTH );
152 ApplyConstraint( selectedImage, FOREGROUND_DEPTH );
153 ApplyConstraint( disabledImage, FOREGROUND_DEPTH );
154 ApplyConstraint( disabledBackgroundImage, BACKGROUND_DEPTH );
158 label.SetPosition( 0.f, 0.f, LABEL_DEPTH );
159 label.SetSize( mSize );
164 void PushButtonDefaultPainter::SetDisabled( Toolkit::Button& button, bool disabled )
166 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
167 Actor& buttonImage = pushButtonImpl.GetButtonImage();
168 Actor& selectedImage = pushButtonImpl.GetSelectedImage();
169 Actor& backgroundImage = pushButtonImpl.GetBackgroundImage();
170 Actor& disabledImage = pushButtonImpl.GetDisabledImage();
171 Actor& disabledBackgroundImage = pushButtonImpl.GetDisabledBackgroundImage();
172 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
174 Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
176 mDisabled = disabled;
178 switch( mPaintState )
184 StopFadeOutAnimation( pushButton );
185 FadeOutImage( pushButton, Background, backgroundImage );
186 FadeOutImage( pushButton, Foreground, buttonImage );
187 FadeInImage( pushButton, disabledBackgroundImage );
188 FadeInImage( pushButton, disabledImage );
189 StartFadeOutAnimation( pushButton );
190 StartFadeInAnimation();
192 if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
194 mPaintState = ReleasedDisabledTransition;
198 mPaintState = DisabledReleasedState;
207 StopFadeOutAnimation( pushButton );
208 FadeOutImage( pushButton, Background, backgroundImage );
209 FadeOutImage( pushButton, Foreground, selectedImage );
210 FadeInImage( pushButton, disabledBackgroundImage );
211 FadeInImage( pushButton, disabledImage );
212 StartFadeOutAnimation( pushButton );
213 StartFadeInAnimation();
215 if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
217 mPaintState = PressedDisabledTransition;
221 mPaintState = DisabledPressedState;
226 case DisabledReleasedState:
230 StopFadeOutAnimation( pushButton );
231 FadeOutImage( pushButton, Background, disabledBackgroundImage );
232 FadeOutImage( pushButton, Foreground, disabledImage );
233 FadeInImage( pushButton, backgroundImage );
234 FadeInImage( pushButton, buttonImage );
235 StartFadeOutAnimation( pushButton );
236 StartFadeInAnimation();
238 if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
240 mPaintState = DisabledReleasedTransition;
244 mPaintState = ReleasedState;
249 case DisabledPressedState:
253 StopFadeOutAnimation( pushButton );
254 FadeOutImage( pushButton, Background, disabledBackgroundImage );
255 FadeOutImage( pushButton, Foreground, disabledImage );
256 FadeInImage( pushButton, backgroundImage );
257 FadeInImage( pushButton, selectedImage );
258 StartFadeOutAnimation( pushButton );
259 StartFadeInAnimation();
261 if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
263 mPaintState = DisabledPressedTransition;
267 mPaintState = PressedState;
272 case ReleasedPressedTransition:
277 if( fadeOutButtonImage )
279 opacity = fadeOutButtonImage.GetCurrentOpacity();
281 StopFadeOutAnimation( pushButton );
282 StopFadeInAnimation();
284 FadeOutImage( pushButton, Foreground, selectedImage, 1.f - opacity );
285 FadeOutImage( pushButton, Background, backgroundImage );
287 FadeInImage( pushButton, disabledImage );
288 FadeInImage( pushButton, disabledBackgroundImage );
290 StartFadeOutAnimation( pushButton );
291 StartFadeInAnimation();
293 if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
295 mPaintState = PressedDisabledTransition;
299 mPaintState = DisabledPressedState;
304 case PressedReleasedTransition:
309 if( fadeOutButtonImage )
311 opacity = fadeOutButtonImage.GetCurrentOpacity();
313 StopFadeOutAnimation( pushButton );
314 StopFadeInAnimation();
316 FadeOutImage( pushButton, Foreground, buttonImage, 1.f - opacity );
317 FadeOutImage( pushButton, Background, backgroundImage );
319 FadeInImage( pushButton, disabledImage );
320 FadeInImage( pushButton, disabledBackgroundImage );
322 StartFadeOutAnimation( pushButton );
323 StartFadeInAnimation();
325 if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
327 mPaintState = ReleasedDisabledTransition;
331 mPaintState = DisabledReleasedState;
336 case ReleasedDisabledTransition:
341 if( fadeOutButtonImage )
343 opacity = fadeOutButtonImage.GetCurrentOpacity();
345 StopFadeOutAnimation( pushButton, false );
346 StopFadeInAnimation();
348 FadeOutImage( pushButton, Foreground, disabledImage, 1.f - opacity );
349 FadeOutImage( pushButton, Background, disabledBackgroundImage, 1.f - opacity );
350 FadeInImage( pushButton, buttonImage, opacity );
351 FadeInImage( pushButton, backgroundImage, opacity );
353 StartFadeOutAnimation( pushButton );
354 StartFadeInAnimation();
356 if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
358 mPaintState = DisabledReleasedTransition;
362 mPaintState = ReleasedState;
367 case DisabledReleasedTransition:
372 if( fadeOutButtonImage )
374 opacity = fadeOutButtonImage.GetCurrentOpacity();
376 StopFadeOutAnimation( pushButton, false );
377 StopFadeInAnimation();
379 FadeOutImage( pushButton, Foreground, buttonImage, 1.f - opacity );
380 FadeOutImage( pushButton, Background, backgroundImage, 1.f - opacity );
381 FadeInImage( pushButton, disabledImage, opacity );
382 FadeInImage( pushButton, disabledBackgroundImage, opacity );
384 StartFadeOutAnimation( pushButton );
385 StartFadeInAnimation();
387 if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
389 mPaintState = ReleasedDisabledTransition;
393 mPaintState = DisabledReleasedState;
398 case PressedDisabledTransition:
403 if( fadeOutButtonImage )
405 opacity = fadeOutButtonImage.GetCurrentOpacity();
407 StopFadeOutAnimation( pushButton, false );
408 StopFadeInAnimation();
410 FadeOutImage( pushButton, Foreground, disabledImage, 1.f - opacity );
411 FadeOutImage( pushButton, Background, disabledBackgroundImage, 1.f - opacity );
412 FadeInImage( pushButton, selectedImage, opacity );
413 FadeInImage( pushButton, backgroundImage, opacity );
415 StartFadeOutAnimation( pushButton );
416 StartFadeInAnimation();
418 if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
420 mPaintState = DisabledPressedTransition;
424 mPaintState = PressedState;
429 case DisabledPressedTransition:
434 if( fadeOutButtonImage )
436 opacity = fadeOutButtonImage.GetCurrentOpacity();
438 StopFadeOutAnimation( pushButton, false );
439 StopFadeInAnimation();
441 FadeOutImage( pushButton, Foreground, selectedImage, 1.f - opacity );
442 FadeOutImage( pushButton, Background, backgroundImage, 1.f - opacity );
443 FadeInImage( pushButton, disabledImage, opacity );
444 FadeInImage( pushButton, disabledBackgroundImage, opacity );
446 StartFadeOutAnimation( pushButton );
447 StartFadeInAnimation();
449 if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
451 mPaintState = PressedDisabledTransition;
455 mPaintState = DisabledPressedState;
465 void PushButtonDefaultPainter::SetAnimationTime( float animationTime )
467 mAnimationTime = animationTime;
470 float PushButtonDefaultPainter::GetAnimationTime() const
472 return mAnimationTime;
475 void PushButtonDefaultPainter::SetAutoRepeating( bool autorepeating )
477 mAutoRepeating = autorepeating;
480 void PushButtonDefaultPainter::SetLabel( Toolkit::Button& button, Actor label )
482 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
483 Actor& labelActor = pushButtonImpl.GetLabel();
485 Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
487 if( labelActor && labelActor.GetParent() )
489 labelActor.GetParent().Remove( labelActor );
493 labelActor.SetAnchorPoint( AnchorPoint::CENTER );
494 labelActor.SetParentOrigin( ParentOrigin::CENTER );
496 labelActor.SetPosition( 0.f, 0.f, LABEL_DEPTH );
497 labelActor.SetSize( mSize );
499 pushButton.Add( labelActor );
502 void PushButtonDefaultPainter::SetButtonImage( Toolkit::Button& button, Actor image )
504 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
505 Actor& buttonImage = pushButtonImpl.GetButtonImage();
506 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
508 Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
510 switch( mPaintState )
514 if( buttonImage && buttonImage.GetParent() )
516 StopFadeOutAnimation( pushButton );
517 FadeOutImage( pushButton, Foreground, buttonImage );
521 FadeInImage( pushButton, buttonImage );
523 StartFadeOutAnimation( pushButton );
524 StartFadeInAnimation();
529 pushButton.Add( buttonImage );
533 case ReleasedPressedTransition: // FALLTHROUGH
534 case ReleasedDisabledTransition:
537 if( fadeOutButtonImage )
539 opacity = fadeOutButtonImage.GetCurrentOpacity();
541 StopFadeOutAnimation( pushButton );
543 // Replaces the button image.
546 pushButton.Add( buttonImage );
547 FadeOutImage( pushButton, Foreground, buttonImage, opacity );
549 StartFadeOutAnimation( pushButton );
552 case PressedReleasedTransition: // FALLTHROUGH
553 case DisabledReleasedTransition:
555 StopFadeInAnimation();
556 pushButton.Remove( buttonImage );
560 FadeInImage( pushButton, buttonImage );
561 StartFadeInAnimation();
569 buttonImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
570 buttonImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
571 ApplyConstraint( buttonImage, FOREGROUND_DEPTH );
574 void PushButtonDefaultPainter::SetSelectedImage( Toolkit::Button& button, Actor image )
576 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
577 Actor& selectedImage = pushButtonImpl.GetSelectedImage();
578 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
580 Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
582 switch( mPaintState )
586 if( selectedImage && selectedImage.GetParent() )
588 StopFadeOutAnimation( pushButton );
589 FadeOutImage( pushButton, Foreground, selectedImage );
591 selectedImage = image;
593 FadeInImage( pushButton, selectedImage );
595 StartFadeOutAnimation( pushButton );
596 StartFadeInAnimation();
600 selectedImage = image;
601 pushButton.Add( selectedImage );
605 case PressedReleasedTransition: // FALLTHROUGH
606 case PressedDisabledTransition:
609 if( fadeOutButtonImage )
611 opacity = fadeOutButtonImage.GetCurrentOpacity();
613 StopFadeOutAnimation( pushButton );
615 // Replaces the button image.
616 selectedImage = image;
618 pushButton.Add( selectedImage );
619 FadeOutImage( pushButton, Foreground, selectedImage, opacity );
621 StartFadeOutAnimation( pushButton );
624 case ReleasedPressedTransition: // FALLTHROUGH
625 case DisabledPressedTransition:
627 StopFadeInAnimation();
628 pushButton.Remove( selectedImage );
630 selectedImage = image;
632 FadeInImage( pushButton, selectedImage );
633 StartFadeInAnimation();
637 selectedImage = image;
641 selectedImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
642 selectedImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
643 ApplyConstraint( selectedImage, FOREGROUND_DEPTH );
646 void PushButtonDefaultPainter::SetBackgroundImage( Toolkit::Button& button, Actor image )
648 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
649 Actor& backgroundImage = pushButtonImpl.GetBackgroundImage();
650 Actor& fadeOutBackgroundImage = pushButtonImpl.GetFadeOutBackgroundImage();
652 Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
654 switch( mPaintState )
656 case ReleasedState: // FALLTHROUGH
658 case ReleasedPressedTransition:
659 case PressedReleasedTransition:
661 if( backgroundImage && backgroundImage.GetParent() )
663 StopFadeOutAnimation( pushButton );
664 FadeOutImage( pushButton, Background, backgroundImage );
666 backgroundImage = image;
668 FadeInImage( pushButton, backgroundImage );
670 StartFadeOutAnimation( pushButton );
671 StartFadeInAnimation();
675 backgroundImage = image;
676 pushButton.Add( backgroundImage );
680 case ReleasedDisabledTransition: // FALLTHROUGH
681 case PressedDisabledTransition:
684 if( fadeOutBackgroundImage )
686 opacity = fadeOutBackgroundImage.GetCurrentOpacity();
688 StopFadeOutAnimation( pushButton );
690 // Replaces the button image.
691 backgroundImage = image;
693 pushButton.Add( backgroundImage );
694 FadeOutImage( pushButton, Background, backgroundImage, opacity );
696 StartFadeOutAnimation( pushButton );
699 case DisabledReleasedTransition: // FALLTHROUGH
700 case DisabledPressedTransition:
702 StopFadeInAnimation();
703 pushButton.Remove( backgroundImage );
705 backgroundImage = image;
707 FadeInImage( pushButton, backgroundImage );
708 StartFadeInAnimation();
712 backgroundImage = image;
716 backgroundImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
717 backgroundImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
718 ApplyConstraint( backgroundImage, BACKGROUND_DEPTH );
721 void PushButtonDefaultPainter::SetDisabledImage( Toolkit::Button& button, Actor image )
723 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
724 Actor& disabledImage = pushButtonImpl.GetDisabledImage();
725 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
727 Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
729 switch( mPaintState )
731 case DisabledReleasedState: // FALLTHROUGH
732 case DisabledPressedState:
734 if( disabledImage && disabledImage.GetParent() )
736 StopFadeOutAnimation( pushButton );
737 FadeOutImage( pushButton, Foreground, disabledImage );
739 disabledImage = image;
741 FadeInImage( pushButton, disabledImage );
743 StartFadeOutAnimation( pushButton );
744 StartFadeInAnimation();
748 disabledImage = image;
749 pushButton.Add( disabledImage );
753 case ReleasedDisabledTransition: // FALLTHROUGH
754 case PressedDisabledTransition:
756 StopFadeInAnimation();
757 pushButton.Remove( disabledImage );
759 disabledImage = image;
761 FadeInImage( pushButton, disabledImage );
762 StartFadeInAnimation();
765 case DisabledReleasedTransition: // FALLTHROUGH
766 case DisabledPressedTransition:
769 if( fadeOutButtonImage )
771 opacity = fadeOutButtonImage.GetCurrentOpacity();
773 StopFadeOutAnimation( pushButton );
775 // Replaces the button image.
776 disabledImage = image;
778 pushButton.Add( disabledImage );
779 FadeOutImage( pushButton, Foreground, disabledImage, opacity );
781 StartFadeOutAnimation( pushButton );
785 disabledImage = image;
789 disabledImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
790 disabledImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
791 ApplyConstraint( disabledImage, FOREGROUND_DEPTH );
794 void PushButtonDefaultPainter::SetDisabledBackgroundImage( Toolkit::Button& button, Actor image )
796 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
797 Actor& disabledBackgroundImage = pushButtonImpl.GetDisabledBackgroundImage();
798 Actor& fadeOutBackgroundImage = pushButtonImpl.GetFadeOutBackgroundImage();
800 Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
802 switch( mPaintState )
804 case DisabledReleasedState: // FALLTHROUGH
805 case DisabledPressedState:
807 if( disabledBackgroundImage && disabledBackgroundImage.GetParent() )
809 StopFadeOutAnimation( pushButton );
810 FadeOutImage( pushButton, Background, disabledBackgroundImage );
812 disabledBackgroundImage = image;
814 FadeInImage( pushButton, disabledBackgroundImage );
816 StartFadeOutAnimation( pushButton );
817 StartFadeInAnimation();
821 disabledBackgroundImage = image;
822 pushButton.Add( disabledBackgroundImage );
826 case ReleasedDisabledTransition: // FALLTHROUGH
827 case PressedDisabledTransition:
829 StopFadeInAnimation();
830 pushButton.Remove( disabledBackgroundImage );
832 disabledBackgroundImage = image;
834 FadeInImage( pushButton, disabledBackgroundImage );
835 StartFadeInAnimation();
838 case DisabledReleasedTransition: // FALLTHROUGH
839 case DisabledPressedTransition:
842 if( fadeOutBackgroundImage )
844 opacity = fadeOutBackgroundImage.GetCurrentOpacity();
846 StopFadeOutAnimation( pushButton );
848 // Replaces the button image.
849 disabledBackgroundImage = image;
851 pushButton.Add( disabledBackgroundImage );
852 FadeOutImage( pushButton, Background, disabledBackgroundImage, opacity );
854 StartFadeOutAnimation( pushButton );
858 disabledBackgroundImage = image;
862 disabledBackgroundImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
863 disabledBackgroundImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
864 ApplyConstraint( disabledBackgroundImage, BACKGROUND_DEPTH );
867 void PushButtonDefaultPainter::Pressed( Toolkit::Button& button )
869 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
870 Actor& selectedImage = pushButtonImpl.GetSelectedImage();
871 Actor& buttonImage = pushButtonImpl.GetButtonImage();
872 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
874 Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
876 switch( mPaintState )
880 StopFadeOutAnimation( pushButton );
881 FadeOutImage( pushButton, Foreground, buttonImage );
882 FadeInImage( pushButton, selectedImage );
883 StartFadeOutAnimation( pushButton );
884 StartFadeInAnimation();
886 if( buttonImage || selectedImage )
888 mPaintState = ReleasedPressedTransition;
892 mPaintState = PressedState;
896 case ReleasedPressedTransition:
898 if( !mAutoRepeating )
900 mPaintState = PressedReleasedTransition;
904 case PressedReleasedTransition:
907 if( fadeOutButtonImage )
909 opacity = fadeOutButtonImage.GetCurrentOpacity();
911 StopFadeOutAnimation( pushButton, false );
912 StopFadeInAnimation();
914 FadeOutImage( pushButton, Foreground, buttonImage, 1.f - opacity );
915 FadeInImage( pushButton, selectedImage, opacity );
917 StartFadeOutAnimation( pushButton );
918 StartFadeInAnimation();
920 if( buttonImage || selectedImage )
922 mPaintState = ReleasedPressedTransition;
926 mPaintState = PressedState;
935 void PushButtonDefaultPainter::Released( Toolkit::Button& button )
937 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
938 Actor& selectedImage = pushButtonImpl.GetSelectedImage();
939 Actor& buttonImage = pushButtonImpl.GetButtonImage();
940 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
942 Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
944 switch( mPaintState )
948 StopFadeOutAnimation( pushButton );
949 FadeOutImage( pushButton, Foreground, selectedImage );
950 FadeInImage( pushButton, buttonImage );
951 StartFadeOutAnimation( pushButton );
952 StartFadeInAnimation();
954 if( buttonImage || selectedImage )
956 mPaintState = PressedReleasedTransition;
960 mPaintState = ReleasedState;
964 case ReleasedPressedTransition:
967 if( fadeOutButtonImage )
969 opacity = fadeOutButtonImage.GetCurrentOpacity();
971 StopFadeOutAnimation( pushButton, false );
972 StopFadeInAnimation();
974 FadeOutImage( pushButton, Foreground, selectedImage, 1.f - opacity );
975 FadeInImage( pushButton, buttonImage, opacity );
977 StartFadeOutAnimation( pushButton );
978 StartFadeInAnimation();
980 if( buttonImage || selectedImage )
982 mPaintState = PressedReleasedTransition;
986 mPaintState = ReleasedState;
997 void PushButtonDefaultPainter::Clicked( Toolkit::Button& button )
1002 void PushButtonDefaultPainter::Selected( Toolkit::Button& button )
1004 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
1005 Actor& selectedImage = pushButtonImpl.GetSelectedImage();
1006 Actor& buttonImage = pushButtonImpl.GetButtonImage();
1007 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
1009 Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
1011 switch( mPaintState )
1015 StopFadeOutAnimation( pushButton );
1016 FadeOutImage( pushButton, Foreground, buttonImage );
1017 FadeInImage( pushButton, selectedImage );
1018 StartFadeOutAnimation( pushButton );
1019 StartFadeInAnimation();
1021 if( buttonImage || selectedImage )
1023 mPaintState = ReleasedPressedTransition;
1027 mPaintState = PressedState;
1033 StopFadeOutAnimation( pushButton );
1034 FadeOutImage( pushButton, Foreground, selectedImage );
1035 FadeInImage( pushButton, buttonImage );
1036 StartFadeOutAnimation( pushButton );
1037 StartFadeInAnimation();
1039 if( buttonImage || selectedImage )
1041 mPaintState = PressedReleasedTransition;
1045 mPaintState = ReleasedState;
1049 case ReleasedPressedTransition:
1051 float opacity = 1.f;
1052 if( fadeOutButtonImage )
1054 opacity = fadeOutButtonImage.GetCurrentOpacity();
1056 StopFadeOutAnimation( pushButton, false );
1057 StopFadeInAnimation();
1059 FadeOutImage( pushButton, Foreground, selectedImage, 1.f - opacity );
1060 FadeInImage( pushButton, buttonImage, opacity );
1062 StartFadeOutAnimation( pushButton );
1063 StartFadeInAnimation();
1065 if( buttonImage || selectedImage )
1067 mPaintState = PressedReleasedTransition;
1071 mPaintState = ReleasedState;
1075 case PressedReleasedTransition:
1077 float opacity = 0.f;
1078 if( fadeOutButtonImage )
1080 opacity = 1.f - fadeOutButtonImage.GetCurrentOpacity();
1082 StopFadeOutAnimation( pushButton, false );
1083 StopFadeInAnimation();
1085 FadeOutImage( pushButton, Foreground, buttonImage, 1.f - opacity );
1086 FadeInImage( pushButton, selectedImage, opacity );
1088 StartFadeOutAnimation( pushButton );
1089 StartFadeInAnimation();
1091 if( buttonImage || selectedImage )
1093 mPaintState = ReleasedPressedTransition;
1097 mPaintState = PressedState;
1108 void PushButtonDefaultPainter::ApplyConstraint( Actor& actor, float depth )
1112 actor.SetPosition( 0.f, 0.f, depth );
1113 actor.RemoveConstraints();
1114 actor.ApplyConstraint( Constraint::New<Vector3>( Actor::SIZE, ParentSource( Actor::SIZE ), EqualToConstraint() ) );
1118 void PushButtonDefaultPainter::AddToFadeInAnimation( const Actor& actor )
1120 if( !mFadeInAnimation )
1122 mFadeInAnimation = Dali::Animation::New( mAnimationTime );
1125 mFadeInAnimation.OpacityTo( actor, 1.f );
1128 void PushButtonDefaultPainter::StartFadeInAnimation()
1130 if( mFadeInAnimation )
1132 mFadeInAnimation.FinishedSignal().Connect( this, &PushButtonDefaultPainter::PressedReleasedFadeInAnimationFinished );
1133 mFadeInAnimation.Play();
1137 void PushButtonDefaultPainter::StopFadeInAnimation()
1139 if( mFadeInAnimation )
1141 mFadeInAnimation.Clear();
1142 mFadeInAnimation.Reset();
1146 void PushButtonDefaultPainter::AddToFadeOutAnimation( const Actor& actor )
1148 if( !mFadeOutAnimation )
1150 mFadeOutAnimation = Dali::Animation::New( mAnimationTime );
1153 mFadeOutAnimation.OpacityTo( actor, 0.f );
1156 void PushButtonDefaultPainter::StartFadeOutAnimation( Toolkit::PushButton& pushButton )
1158 if( mFadeOutAnimation )
1160 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( pushButton );
1161 mButton = &pushButtonImpl;
1163 mFadeOutAnimation.FinishedSignal().Connect( this, &PushButtonDefaultPainter::PressedReleasedFadeOutAnimationFinished );
1164 mFadeOutAnimation.Play();
1168 void PushButtonDefaultPainter::StopFadeOutAnimation( Toolkit::PushButton& pushButton, bool remove )
1170 if( mFadeOutAnimation )
1172 mFadeOutAnimation.Clear();
1175 mFadeOutAnimation.Reset();
1179 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( pushButton );
1180 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
1181 Actor& fadeOutBackgroundImage = pushButtonImpl.GetFadeOutBackgroundImage();
1183 if( fadeOutButtonImage && fadeOutButtonImage.GetParent() )
1185 fadeOutButtonImage.GetParent().Remove( fadeOutButtonImage );
1188 if( fadeOutBackgroundImage && fadeOutBackgroundImage.GetParent() )
1190 fadeOutBackgroundImage.GetParent().Remove( fadeOutBackgroundImage );
1193 fadeOutButtonImage.Reset();
1194 fadeOutBackgroundImage.Reset();
1198 void PushButtonDefaultPainter::FadeInImage( Toolkit::PushButton& pushButton, Actor& image, float opacity )
1202 image.SetOpacity( opacity );
1203 if( !image.GetParent() )
1205 pushButton.Add( image );
1208 AddToFadeInAnimation( image );
1212 void PushButtonDefaultPainter::FadeOutImage( Toolkit::PushButton& pushButton, ImageLayer layer, Actor& image, float opacity )
1216 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( pushButton );
1217 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
1218 Actor& fadeOutBackgroundImage = pushButtonImpl.GetFadeOutBackgroundImage();
1220 Actor& actorLayer = ( ( Background == layer ) ? fadeOutBackgroundImage : fadeOutButtonImage );
1223 actorLayer.SetOpacity( opacity );
1225 AddToFadeOutAnimation( actorLayer );
1229 void PushButtonDefaultPainter::PressedReleasedFadeOutAnimationFinished( Dali::Animation& source )
1231 switch( mPaintState )
1233 case ReleasedPressedTransition:
1235 mPaintState = PressedState;
1238 case PressedReleasedTransition:
1240 mPaintState = ReleasedState;
1243 case ReleasedDisabledTransition:
1245 mPaintState = DisabledReleasedState;
1248 case DisabledReleasedTransition:
1250 mPaintState = ReleasedState;
1253 case PressedDisabledTransition:
1255 mPaintState = DisabledPressedState;
1258 case DisabledPressedTransition:
1260 mPaintState = PressedState;
1269 Toolkit::PushButton handle( mButton->GetOwner() );
1270 StopFadeOutAnimation( handle );
1274 void PushButtonDefaultPainter::PressedReleasedFadeInAnimationFinished( Dali::Animation& source )
1276 switch( mPaintState )
1278 case ReleasedPressedTransition:
1280 mPaintState = PressedState;
1283 case PressedReleasedTransition:
1285 mPaintState = ReleasedState;
1288 case ReleasedDisabledTransition:
1290 mPaintState = DisabledReleasedState;
1293 case DisabledReleasedTransition:
1295 mPaintState = ReleasedState;
1298 case PressedDisabledTransition:
1300 mPaintState = DisabledPressedState;
1303 case DisabledPressedTransition:
1305 mPaintState = PressedState;
1314 StopFadeInAnimation();
1317 } // namespace Internal
1319 } // namespace Toolkit