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::SetButtonImage( Toolkit::PushButton& pushButton, Actor image )
93 Toolkit::Internal::PushButton& pushButtonImpl = GetImplementation( pushButton );
94 Actor& buttonImage = pushButtonImpl.GetButtonImage();
95 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
101 if( buttonImage && buttonImage.GetParent() )
103 StopFadeOutAnimation( pushButton );
104 FadeOutImage( pushButton, Foreground, buttonImage );
108 FadeInImage( pushButton, buttonImage );
110 StartFadeOutAnimation( pushButton );
111 StartFadeInAnimation();
116 pushButton.Add( buttonImage );
120 case ReleasedPressedTransition: // FALLTHROUGH
121 case ReleasedDisabledTransition:
124 if( fadeOutButtonImage )
126 opacity = fadeOutButtonImage.GetCurrentOpacity();
128 StopFadeOutAnimation( pushButton );
130 // Replaces the button image.
133 pushButton.Add( buttonImage );
134 FadeOutImage( pushButton, Foreground, buttonImage, opacity );
136 StartFadeOutAnimation( pushButton );
139 case PressedReleasedTransition: // FALLTHROUGH
140 case DisabledReleasedTransition:
142 StopFadeInAnimation();
143 pushButton.Remove( buttonImage );
147 FadeInImage( pushButton, buttonImage );
148 StartFadeInAnimation();
156 buttonImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
157 buttonImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
158 ApplyConstraint( buttonImage, FOREGROUND_DEPTH );
161 void PushButtonDefaultPainter::SetBackgroundImage( Toolkit::PushButton& pushButton, Actor image )
163 Toolkit::Internal::PushButton& pushButtonImpl = GetImplementation( pushButton );
164 Actor& backgroundImage = pushButtonImpl.GetBackgroundImage();
165 Actor& fadeOutBackgroundImage = pushButtonImpl.GetFadeOutBackgroundImage();
167 switch( mPaintState )
169 case ReleasedState: // FALLTHROUGH
171 case ReleasedPressedTransition:
172 case PressedReleasedTransition:
174 if( backgroundImage && backgroundImage.GetParent() )
176 StopFadeOutAnimation( pushButton );
177 FadeOutImage( pushButton, Background, backgroundImage );
179 backgroundImage = image;
181 FadeInImage( pushButton, backgroundImage );
183 StartFadeOutAnimation( pushButton );
184 StartFadeInAnimation();
188 backgroundImage = image;
189 pushButton.Add( backgroundImage );
193 case ReleasedDisabledTransition: // FALLTHROUGH
194 case PressedDisabledTransition:
197 if( fadeOutBackgroundImage )
199 opacity = fadeOutBackgroundImage.GetCurrentOpacity();
201 StopFadeOutAnimation( pushButton );
203 // Replaces the button image.
204 backgroundImage = image;
206 pushButton.Add( backgroundImage );
207 FadeOutImage( pushButton, Background, backgroundImage, opacity );
209 StartFadeOutAnimation( pushButton );
212 case DisabledReleasedTransition: // FALLTHROUGH
213 case DisabledPressedTransition:
215 StopFadeInAnimation();
216 pushButton.Remove( backgroundImage );
218 backgroundImage = image;
220 FadeInImage( pushButton, backgroundImage );
221 StartFadeInAnimation();
225 backgroundImage = image;
229 backgroundImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
230 backgroundImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
231 ApplyConstraint( backgroundImage, BACKGROUND_DEPTH );
234 void PushButtonDefaultPainter::SetSelectedImage( Toolkit::PushButton& pushButton, Actor image )
236 Toolkit::Internal::PushButton& pushButtonImpl = GetImplementation( pushButton );
237 Actor& selectedImage = pushButtonImpl.GetSelectedImage();
238 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
240 switch( mPaintState )
244 if( selectedImage && selectedImage.GetParent() )
246 StopFadeOutAnimation( pushButton );
247 FadeOutImage( pushButton, Foreground, selectedImage );
249 selectedImage = image;
251 FadeInImage( pushButton, selectedImage );
253 StartFadeOutAnimation( pushButton );
254 StartFadeInAnimation();
258 selectedImage = image;
259 pushButton.Add( selectedImage );
263 case PressedReleasedTransition: // FALLTHROUGH
264 case PressedDisabledTransition:
267 if( fadeOutButtonImage )
269 opacity = fadeOutButtonImage.GetCurrentOpacity();
271 StopFadeOutAnimation( pushButton );
273 // Replaces the button image.
274 selectedImage = image;
276 pushButton.Add( selectedImage );
277 FadeOutImage( pushButton, Foreground, selectedImage, opacity );
279 StartFadeOutAnimation( pushButton );
282 case ReleasedPressedTransition: // FALLTHROUGH
283 case DisabledPressedTransition:
285 StopFadeInAnimation();
286 pushButton.Remove( selectedImage );
288 selectedImage = image;
290 FadeInImage( pushButton, selectedImage );
291 StartFadeInAnimation();
295 selectedImage = image;
299 selectedImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
300 selectedImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
301 ApplyConstraint( selectedImage, FOREGROUND_DEPTH );
304 void PushButtonDefaultPainter::SetDisabledImage( Toolkit::PushButton& pushButton, Actor image )
306 Toolkit::Internal::PushButton& pushButtonImpl = GetImplementation( pushButton );
307 Actor& disabledImage = pushButtonImpl.GetDisabledImage();
308 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
310 switch( mPaintState )
312 case DisabledReleasedState: // FALLTHROUGH
313 case DisabledPressedState:
315 if( disabledImage && disabledImage.GetParent() )
317 StopFadeOutAnimation( pushButton );
318 FadeOutImage( pushButton, Foreground, disabledImage );
320 disabledImage = image;
322 FadeInImage( pushButton, disabledImage );
324 StartFadeOutAnimation( pushButton );
325 StartFadeInAnimation();
329 disabledImage = image;
330 pushButton.Add( disabledImage );
334 case ReleasedDisabledTransition: // FALLTHROUGH
335 case PressedDisabledTransition:
337 StopFadeInAnimation();
338 pushButton.Remove( disabledImage );
340 disabledImage = image;
342 FadeInImage( pushButton, disabledImage );
343 StartFadeInAnimation();
346 case DisabledReleasedTransition: // FALLTHROUGH
347 case DisabledPressedTransition:
350 if( fadeOutButtonImage )
352 opacity = fadeOutButtonImage.GetCurrentOpacity();
354 StopFadeOutAnimation( pushButton );
356 // Replaces the button image.
357 disabledImage = image;
359 pushButton.Add( disabledImage );
360 FadeOutImage( pushButton, Foreground, disabledImage, opacity );
362 StartFadeOutAnimation( pushButton );
366 disabledImage = image;
370 disabledImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
371 disabledImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
372 ApplyConstraint( disabledImage, FOREGROUND_DEPTH );
375 void PushButtonDefaultPainter::SetDisabledBackgroundImage( Toolkit::PushButton& pushButton, Actor image )
377 Toolkit::Internal::PushButton& pushButtonImpl = GetImplementation( pushButton );
378 Actor& disabledBackgroundImage = pushButtonImpl.GetDisabledBackgroundImage();
379 Actor& fadeOutBackgroundImage = pushButtonImpl.GetFadeOutBackgroundImage();
381 switch( mPaintState )
383 case DisabledReleasedState: // FALLTHROUGH
384 case DisabledPressedState:
386 if( disabledBackgroundImage && disabledBackgroundImage.GetParent() )
388 StopFadeOutAnimation( pushButton );
389 FadeOutImage( pushButton, Background, disabledBackgroundImage );
391 disabledBackgroundImage = image;
393 FadeInImage( pushButton, disabledBackgroundImage );
395 StartFadeOutAnimation( pushButton );
396 StartFadeInAnimation();
400 disabledBackgroundImage = image;
401 pushButton.Add( disabledBackgroundImage );
405 case ReleasedDisabledTransition: // FALLTHROUGH
406 case PressedDisabledTransition:
408 StopFadeInAnimation();
409 pushButton.Remove( disabledBackgroundImage );
411 disabledBackgroundImage = image;
413 FadeInImage( pushButton, disabledBackgroundImage );
414 StartFadeInAnimation();
417 case DisabledReleasedTransition: // FALLTHROUGH
418 case DisabledPressedTransition:
421 if( fadeOutBackgroundImage )
423 opacity = fadeOutBackgroundImage.GetCurrentOpacity();
425 StopFadeOutAnimation( pushButton );
427 // Replaces the button image.
428 disabledBackgroundImage = image;
430 pushButton.Add( disabledBackgroundImage );
431 FadeOutImage( pushButton, Background, disabledBackgroundImage, opacity );
433 StartFadeOutAnimation( pushButton );
437 disabledBackgroundImage = image;
441 disabledBackgroundImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
442 disabledBackgroundImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
443 ApplyConstraint( disabledBackgroundImage, BACKGROUND_DEPTH );
446 void PushButtonDefaultPainter::SetLabel( Toolkit::PushButton& pushButton, Actor label )
448 Toolkit::Internal::PushButton& pushButtonImpl = GetImplementation( pushButton );
449 Actor& labelActor = pushButtonImpl.GetLabel();
451 if( labelActor && labelActor.GetParent() )
453 labelActor.GetParent().Remove( labelActor );
457 labelActor.SetAnchorPoint( AnchorPoint::CENTER );
458 labelActor.SetParentOrigin( ParentOrigin::CENTER );
460 labelActor.SetPosition( 0.f, 0.f, LABEL_DEPTH );
461 labelActor.SetSize( mSize );
463 pushButton.Add( labelActor );
466 void PushButtonDefaultPainter::Initialize( Toolkit::Button& button )
468 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
469 Actor& buttonImage = pushButtonImpl.GetButtonImage();
470 Actor& selectedImage = pushButtonImpl.GetSelectedImage();
471 Actor& backgroundImage = pushButtonImpl.GetBackgroundImage();
472 Actor& disabledImage = pushButtonImpl.GetDisabledImage();
473 Actor& disabledBackgroundImage = pushButtonImpl.GetDisabledBackgroundImage();
474 Actor& label = pushButtonImpl.GetLabel();
476 Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
480 SetButtonImage( pushButton, buttonImage );
483 if( backgroundImage )
485 SetBackgroundImage( pushButton, backgroundImage );
490 SetSelectedImage( pushButton, selectedImage );
495 SetDisabledImage( pushButton, disabledImage );
498 if( disabledBackgroundImage )
500 SetDisabledBackgroundImage( pushButton, disabledBackgroundImage );
505 SetLabel( pushButton, label );
508 SetDisabled( pushButton, mDisabled );
511 void PushButtonDefaultPainter::SetSize( Toolkit::Button& button, const Vector3& size )
517 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
518 Actor& buttonImage = pushButtonImpl.GetButtonImage();
519 Actor& selectedImage = pushButtonImpl.GetSelectedImage();
520 Actor& backgroundImage = pushButtonImpl.GetBackgroundImage();
521 Actor& disabledImage = pushButtonImpl.GetDisabledImage();
522 Actor& disabledBackgroundImage = pushButtonImpl.GetDisabledBackgroundImage();
523 Actor& label = pushButtonImpl.GetLabel();
525 ApplyConstraint( buttonImage, FOREGROUND_DEPTH );
526 ApplyConstraint( backgroundImage, BACKGROUND_DEPTH );
527 ApplyConstraint( selectedImage, FOREGROUND_DEPTH );
528 ApplyConstraint( disabledImage, FOREGROUND_DEPTH );
529 ApplyConstraint( disabledBackgroundImage, BACKGROUND_DEPTH );
533 label.SetPosition( 0.f, 0.f, LABEL_DEPTH );
534 label.SetSize( mSize );
539 void PushButtonDefaultPainter::SetDisabled( Toolkit::Button& button, bool disabled )
541 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
542 Actor& buttonImage = pushButtonImpl.GetButtonImage();
543 Actor& selectedImage = pushButtonImpl.GetSelectedImage();
544 Actor& backgroundImage = pushButtonImpl.GetBackgroundImage();
545 Actor& disabledImage = pushButtonImpl.GetDisabledImage();
546 Actor& disabledBackgroundImage = pushButtonImpl.GetDisabledBackgroundImage();
547 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
549 Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
551 mDisabled = disabled;
553 switch( mPaintState )
559 StopFadeOutAnimation( pushButton );
560 FadeOutImage( pushButton, Background, backgroundImage );
561 FadeOutImage( pushButton, Foreground, buttonImage );
562 FadeInImage( pushButton, disabledBackgroundImage );
563 FadeInImage( pushButton, disabledImage );
564 StartFadeOutAnimation( pushButton );
565 StartFadeInAnimation();
567 if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
569 mPaintState = ReleasedDisabledTransition;
573 mPaintState = DisabledReleasedState;
582 StopFadeOutAnimation( pushButton );
583 FadeOutImage( pushButton, Background, backgroundImage );
584 FadeOutImage( pushButton, Foreground, selectedImage );
585 FadeInImage( pushButton, disabledBackgroundImage );
586 FadeInImage( pushButton, disabledImage );
587 StartFadeOutAnimation( pushButton );
588 StartFadeInAnimation();
590 if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
592 mPaintState = PressedDisabledTransition;
596 mPaintState = DisabledPressedState;
601 case DisabledReleasedState:
605 StopFadeOutAnimation( pushButton );
606 FadeOutImage( pushButton, Background, disabledBackgroundImage );
607 FadeOutImage( pushButton, Foreground, disabledImage );
608 FadeInImage( pushButton, backgroundImage );
609 FadeInImage( pushButton, buttonImage );
610 StartFadeOutAnimation( pushButton );
611 StartFadeInAnimation();
613 if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
615 mPaintState = DisabledReleasedTransition;
619 mPaintState = ReleasedState;
624 case DisabledPressedState:
628 StopFadeOutAnimation( pushButton );
629 FadeOutImage( pushButton, Background, disabledBackgroundImage );
630 FadeOutImage( pushButton, Foreground, disabledImage );
631 FadeInImage( pushButton, backgroundImage );
632 FadeInImage( pushButton, selectedImage );
633 StartFadeOutAnimation( pushButton );
634 StartFadeInAnimation();
636 if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
638 mPaintState = DisabledPressedTransition;
642 mPaintState = PressedState;
647 case ReleasedPressedTransition:
652 if( fadeOutButtonImage )
654 opacity = fadeOutButtonImage.GetCurrentOpacity();
656 StopFadeOutAnimation( pushButton );
657 StopFadeInAnimation();
659 FadeOutImage( pushButton, Foreground, selectedImage, 1.f - opacity );
660 FadeOutImage( pushButton, Background, backgroundImage );
662 FadeInImage( pushButton, disabledImage );
663 FadeInImage( pushButton, disabledBackgroundImage );
665 StartFadeOutAnimation( pushButton );
666 StartFadeInAnimation();
668 if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
670 mPaintState = PressedDisabledTransition;
674 mPaintState = DisabledPressedState;
679 case PressedReleasedTransition:
684 if( fadeOutButtonImage )
686 opacity = fadeOutButtonImage.GetCurrentOpacity();
688 StopFadeOutAnimation( pushButton );
689 StopFadeInAnimation();
691 FadeOutImage( pushButton, Foreground, buttonImage, 1.f - opacity );
692 FadeOutImage( pushButton, Background, backgroundImage );
694 FadeInImage( pushButton, disabledImage );
695 FadeInImage( pushButton, disabledBackgroundImage );
697 StartFadeOutAnimation( pushButton );
698 StartFadeInAnimation();
700 if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
702 mPaintState = ReleasedDisabledTransition;
706 mPaintState = DisabledReleasedState;
711 case ReleasedDisabledTransition:
716 if( fadeOutButtonImage )
718 opacity = fadeOutButtonImage.GetCurrentOpacity();
720 StopFadeOutAnimation( pushButton, false );
721 StopFadeInAnimation();
723 FadeOutImage( pushButton, Foreground, disabledImage, 1.f - opacity );
724 FadeOutImage( pushButton, Background, disabledBackgroundImage, 1.f - opacity );
725 FadeInImage( pushButton, buttonImage, opacity );
726 FadeInImage( pushButton, backgroundImage, opacity );
728 StartFadeOutAnimation( pushButton );
729 StartFadeInAnimation();
731 if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
733 mPaintState = DisabledReleasedTransition;
737 mPaintState = ReleasedState;
742 case DisabledReleasedTransition:
747 if( fadeOutButtonImage )
749 opacity = fadeOutButtonImage.GetCurrentOpacity();
751 StopFadeOutAnimation( pushButton, false );
752 StopFadeInAnimation();
754 FadeOutImage( pushButton, Foreground, buttonImage, 1.f - opacity );
755 FadeOutImage( pushButton, Background, backgroundImage, 1.f - opacity );
756 FadeInImage( pushButton, disabledImage, opacity );
757 FadeInImage( pushButton, disabledBackgroundImage, opacity );
759 StartFadeOutAnimation( pushButton );
760 StartFadeInAnimation();
762 if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
764 mPaintState = ReleasedDisabledTransition;
768 mPaintState = DisabledReleasedState;
773 case PressedDisabledTransition:
778 if( fadeOutButtonImage )
780 opacity = fadeOutButtonImage.GetCurrentOpacity();
782 StopFadeOutAnimation( pushButton, false );
783 StopFadeInAnimation();
785 FadeOutImage( pushButton, Foreground, disabledImage, 1.f - opacity );
786 FadeOutImage( pushButton, Background, disabledBackgroundImage, 1.f - opacity );
787 FadeInImage( pushButton, selectedImage, opacity );
788 FadeInImage( pushButton, backgroundImage, opacity );
790 StartFadeOutAnimation( pushButton );
791 StartFadeInAnimation();
793 if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
795 mPaintState = DisabledPressedTransition;
799 mPaintState = PressedState;
804 case DisabledPressedTransition:
809 if( fadeOutButtonImage )
811 opacity = fadeOutButtonImage.GetCurrentOpacity();
813 StopFadeOutAnimation( pushButton, false );
814 StopFadeInAnimation();
816 FadeOutImage( pushButton, Foreground, selectedImage, 1.f - opacity );
817 FadeOutImage( pushButton, Background, backgroundImage, 1.f - opacity );
818 FadeInImage( pushButton, disabledImage, opacity );
819 FadeInImage( pushButton, disabledBackgroundImage, opacity );
821 StartFadeOutAnimation( pushButton );
822 StartFadeInAnimation();
824 if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
826 mPaintState = PressedDisabledTransition;
830 mPaintState = DisabledPressedState;
840 void PushButtonDefaultPainter::SetAnimationTime( float animationTime )
842 mAnimationTime = animationTime;
845 float PushButtonDefaultPainter::GetAnimationTime() const
847 return mAnimationTime;
850 void PushButtonDefaultPainter::SetAutoRepeating( bool autorepeating )
852 mAutoRepeating = autorepeating;
855 void PushButtonDefaultPainter::Pressed( Toolkit::PushButton& button )
857 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
858 Actor& selectedImage = pushButtonImpl.GetSelectedImage();
859 Actor& buttonImage = pushButtonImpl.GetButtonImage();
860 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
862 switch( mPaintState )
866 StopFadeOutAnimation( button );
867 FadeOutImage( button, Foreground, buttonImage );
868 FadeInImage( button, selectedImage );
869 StartFadeOutAnimation( button );
870 StartFadeInAnimation();
872 if( buttonImage || selectedImage )
874 mPaintState = ReleasedPressedTransition;
878 mPaintState = PressedState;
882 case ReleasedPressedTransition:
884 if( !mAutoRepeating )
886 mPaintState = PressedReleasedTransition;
890 case PressedReleasedTransition:
893 if( fadeOutButtonImage )
895 opacity = fadeOutButtonImage.GetCurrentOpacity();
897 StopFadeOutAnimation( button, false );
898 StopFadeInAnimation();
900 FadeOutImage( button, Foreground, buttonImage, 1.f - opacity );
901 FadeInImage( button, selectedImage, opacity );
903 StartFadeOutAnimation( button );
904 StartFadeInAnimation();
906 if( buttonImage || selectedImage )
908 mPaintState = ReleasedPressedTransition;
912 mPaintState = PressedState;
921 void PushButtonDefaultPainter::Released( Toolkit::PushButton& button )
923 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
924 Actor& selectedImage = pushButtonImpl.GetSelectedImage();
925 Actor& buttonImage = pushButtonImpl.GetButtonImage();
926 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
928 switch( mPaintState )
932 StopFadeOutAnimation( button );
933 FadeOutImage( button, Foreground, selectedImage );
934 FadeInImage( button, buttonImage );
935 StartFadeOutAnimation( button );
936 StartFadeInAnimation();
938 if( buttonImage || selectedImage )
940 mPaintState = PressedReleasedTransition;
944 mPaintState = ReleasedState;
948 case ReleasedPressedTransition:
951 if( fadeOutButtonImage )
953 opacity = fadeOutButtonImage.GetCurrentOpacity();
955 StopFadeOutAnimation( button, false );
956 StopFadeInAnimation();
958 FadeOutImage( button, Foreground, selectedImage, 1.f - opacity );
959 FadeInImage( button, buttonImage, opacity );
961 StartFadeOutAnimation( button );
962 StartFadeInAnimation();
964 if( buttonImage || selectedImage )
966 mPaintState = PressedReleasedTransition;
970 mPaintState = ReleasedState;
981 void PushButtonDefaultPainter::Clicked( Toolkit::PushButton& button )
986 void PushButtonDefaultPainter::Toggled( Toolkit::PushButton& button )
988 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
989 Actor& selectedImage = pushButtonImpl.GetSelectedImage();
990 Actor& buttonImage = pushButtonImpl.GetButtonImage();
991 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
993 switch( mPaintState )
997 StopFadeOutAnimation( button );
998 FadeOutImage( button, Foreground, buttonImage );
999 FadeInImage( button, selectedImage );
1000 StartFadeOutAnimation( button );
1001 StartFadeInAnimation();
1003 if( buttonImage || selectedImage )
1005 mPaintState = ReleasedPressedTransition;
1009 mPaintState = PressedState;
1015 StopFadeOutAnimation( button );
1016 FadeOutImage( button, Foreground, selectedImage );
1017 FadeInImage( button, buttonImage );
1018 StartFadeOutAnimation( button );
1019 StartFadeInAnimation();
1021 if( buttonImage || selectedImage )
1023 mPaintState = PressedReleasedTransition;
1027 mPaintState = ReleasedState;
1031 case ReleasedPressedTransition:
1033 float opacity = 1.f;
1034 if( fadeOutButtonImage )
1036 opacity = fadeOutButtonImage.GetCurrentOpacity();
1038 StopFadeOutAnimation( button, false );
1039 StopFadeInAnimation();
1041 FadeOutImage( button, Foreground, selectedImage, 1.f - opacity );
1042 FadeInImage( button, buttonImage, opacity );
1044 StartFadeOutAnimation( button );
1045 StartFadeInAnimation();
1047 if( buttonImage || selectedImage )
1049 mPaintState = PressedReleasedTransition;
1053 mPaintState = ReleasedState;
1057 case PressedReleasedTransition:
1059 float opacity = 0.f;
1060 if( fadeOutButtonImage )
1062 opacity = 1.f - fadeOutButtonImage.GetCurrentOpacity();
1064 StopFadeOutAnimation( button, false );
1065 StopFadeInAnimation();
1067 FadeOutImage( button, Foreground, buttonImage, 1.f - opacity );
1068 FadeInImage( button, selectedImage, opacity );
1070 StartFadeOutAnimation( button );
1071 StartFadeInAnimation();
1073 if( buttonImage || selectedImage )
1075 mPaintState = ReleasedPressedTransition;
1079 mPaintState = PressedState;
1090 void PushButtonDefaultPainter::ApplyConstraint( Actor& actor, float depth )
1094 actor.SetPosition( 0.f, 0.f, depth );
1095 actor.RemoveConstraints();
1096 actor.ApplyConstraint( Constraint::New<Vector3>( Actor::SIZE, ParentSource( Actor::SIZE ), EqualToConstraint() ) );
1100 void PushButtonDefaultPainter::AddToFadeInAnimation( const Actor& actor )
1102 if( !mFadeInAnimation )
1104 mFadeInAnimation = Dali::Animation::New( mAnimationTime );
1107 mFadeInAnimation.OpacityTo( actor, 1.f );
1110 void PushButtonDefaultPainter::StartFadeInAnimation()
1112 if( mFadeInAnimation )
1114 mFadeInAnimation.FinishedSignal().Connect( this, &PushButtonDefaultPainter::PressedReleasedFadeInAnimationFinished );
1115 mFadeInAnimation.Play();
1119 void PushButtonDefaultPainter::StopFadeInAnimation()
1121 if( mFadeInAnimation )
1123 mFadeInAnimation.Clear();
1124 mFadeInAnimation.Reset();
1128 void PushButtonDefaultPainter::AddToFadeOutAnimation( const Actor& actor )
1130 if( !mFadeOutAnimation )
1132 mFadeOutAnimation = Dali::Animation::New( mAnimationTime );
1135 mFadeOutAnimation.OpacityTo( actor, 0.f );
1138 void PushButtonDefaultPainter::StartFadeOutAnimation( Toolkit::PushButton& pushButton )
1140 if( mFadeOutAnimation )
1142 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( pushButton );
1143 mButton = &pushButtonImpl;
1145 mFadeOutAnimation.FinishedSignal().Connect( this, &PushButtonDefaultPainter::PressedReleasedFadeOutAnimationFinished );
1146 mFadeOutAnimation.Play();
1150 void PushButtonDefaultPainter::StopFadeOutAnimation( Toolkit::PushButton& pushButton, bool remove )
1152 if( mFadeOutAnimation )
1154 mFadeOutAnimation.Clear();
1157 mFadeOutAnimation.Reset();
1161 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( pushButton );
1162 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
1163 Actor& fadeOutBackgroundImage = pushButtonImpl.GetFadeOutBackgroundImage();
1165 if( fadeOutButtonImage && fadeOutButtonImage.GetParent() )
1167 fadeOutButtonImage.GetParent().Remove( fadeOutButtonImage );
1170 if( fadeOutBackgroundImage && fadeOutBackgroundImage.GetParent() )
1172 fadeOutBackgroundImage.GetParent().Remove( fadeOutBackgroundImage );
1175 fadeOutButtonImage.Reset();
1176 fadeOutBackgroundImage.Reset();
1180 void PushButtonDefaultPainter::FadeInImage( Toolkit::PushButton& pushButton, Actor& image, float opacity )
1184 image.SetOpacity( opacity );
1185 if( !image.GetParent() )
1187 pushButton.Add( image );
1190 AddToFadeInAnimation( image );
1194 void PushButtonDefaultPainter::FadeOutImage( Toolkit::PushButton& pushButton, ImageLayer layer, Actor& image, float opacity )
1198 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( pushButton );
1199 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
1200 Actor& fadeOutBackgroundImage = pushButtonImpl.GetFadeOutBackgroundImage();
1202 Actor& actorLayer = ( ( Background == layer ) ? fadeOutBackgroundImage : fadeOutButtonImage );
1205 actorLayer.SetOpacity( opacity );
1207 AddToFadeOutAnimation( actorLayer );
1211 void PushButtonDefaultPainter::PressedReleasedFadeOutAnimationFinished( Dali::Animation& source )
1213 switch( mPaintState )
1215 case ReleasedPressedTransition:
1217 mPaintState = PressedState;
1220 case PressedReleasedTransition:
1222 mPaintState = ReleasedState;
1225 case ReleasedDisabledTransition:
1227 mPaintState = DisabledReleasedState;
1230 case DisabledReleasedTransition:
1232 mPaintState = ReleasedState;
1235 case PressedDisabledTransition:
1237 mPaintState = DisabledPressedState;
1240 case DisabledPressedTransition:
1242 mPaintState = PressedState;
1251 Toolkit::PushButton handle( mButton->GetOwner() );
1252 StopFadeOutAnimation( handle );
1256 void PushButtonDefaultPainter::PressedReleasedFadeInAnimationFinished( Dali::Animation& source )
1258 switch( mPaintState )
1260 case ReleasedPressedTransition:
1262 mPaintState = PressedState;
1265 case PressedReleasedTransition:
1267 mPaintState = ReleasedState;
1270 case ReleasedDisabledTransition:
1272 mPaintState = DisabledReleasedState;
1275 case DisabledReleasedTransition:
1277 mPaintState = ReleasedState;
1280 case PressedDisabledTransition:
1282 mPaintState = DisabledPressedState;
1285 case DisabledPressedTransition:
1287 mPaintState = PressedState;
1296 StopFadeInAnimation();
1299 } // namespace Internal
1301 } // namespace Toolkit