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-impl.h"
22 #include <dali/public-api/actors/image-actor.h>
23 #include <dali/public-api/object/type-registry.h>
26 #include <dali-toolkit/internal/controls/relayout-helper.h>
40 const float TEXT_PADDING = 12.0f;
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 );
50 return Toolkit::PushButton::New();
53 TypeRegistration typeRegistration( typeid(Toolkit::PushButton), typeid(Toolkit::Button), Create );
55 } // unnamed namespace
61 * Find the first image actor in the actor hierarchy
63 ImageActor FindImageActor( Actor root )
65 ImageActor imageActor = ImageActor::DownCast( root );
66 if( !imageActor && root )
68 for( unsigned int i = 0, numChildren = root.GetChildCount(); i < numChildren; ++i )
70 ImageActor childImageActor = FindImageActor( root.GetChildAt( i ) );
73 return childImageActor;
81 } // unnamed namespace
83 Dali::Toolkit::PushButton PushButton::New()
85 // Create the implementation, temporarily owned on stack
86 IntrusivePtr< PushButton > internalPushButton = new PushButton();
88 // Pass ownership to CustomActor
89 Dali::Toolkit::PushButton pushButton( *internalPushButton );
91 // Second-phase init of the implementation
92 // This can only be done after the CustomActor connection has been made...
93 internalPushButton->Initialize();
98 PushButton::PushButton()
101 mPaintState( UnselectedState )
103 SetAnimationTime( ANIMATION_TIME );
106 PushButton::~PushButton()
110 void PushButton::SetButtonImage( Actor image )
112 Actor& buttonImage = GetButtonImage();
113 Actor& fadeOutButtonImage = GetFadeOutButtonImage();
115 switch( mPaintState )
117 case UnselectedState:
119 if( buttonImage && buttonImage.GetParent() )
121 StopFadeOutAnimation();
122 FadeOutImage( Foreground, buttonImage );
126 FadeInImage( buttonImage );
128 StartFadeOutAnimation();
129 StartFadeInAnimation();
134 Self().Add( buttonImage );
138 case UnselectedSelectedTransition: // FALLTHROUGH
139 case UnselectedDisabledTransition:
142 if( fadeOutButtonImage )
144 opacity = fadeOutButtonImage.GetCurrentOpacity();
146 StopFadeOutAnimation();
148 // Replaces the button image.
151 Self().Add( buttonImage );
152 FadeOutImage( Foreground, buttonImage, opacity );
154 StartFadeOutAnimation();
157 case SelectedUnselectedTransition: // FALLTHROUGH
158 case DisabledUnselectedTransition:
160 StopFadeInAnimation();
161 Self().Remove( buttonImage );
165 FadeInImage( buttonImage );
166 StartFadeInAnimation();
174 buttonImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
175 buttonImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
176 buttonImage.SetPosition( 0.f, 0.f, FOREGROUND_DEPTH );
177 buttonImage.SetSizeMode( SIZE_EQUAL_TO_PARENT );
180 void PushButton::SetSelectedImage( Actor image )
182 Actor& selectedImage = GetSelectedImage();
183 Actor& fadeOutButtonImage = GetFadeOutButtonImage();
185 switch( mPaintState )
189 if( selectedImage && selectedImage.GetParent() )
191 StopFadeOutAnimation();
192 FadeOutImage( Foreground, selectedImage );
194 selectedImage = image;
196 FadeInImage( selectedImage );
198 StartFadeOutAnimation();
199 StartFadeInAnimation();
203 selectedImage = image;
204 Self().Add( selectedImage );
208 case SelectedUnselectedTransition: // FALLTHROUGH
209 case SelectedDisabledTransition:
212 if( fadeOutButtonImage )
214 opacity = fadeOutButtonImage.GetCurrentOpacity();
216 StopFadeOutAnimation();
218 // Replaces the button image.
219 selectedImage = image;
221 Self().Add( selectedImage );
222 FadeOutImage( Foreground, selectedImage, opacity );
224 StartFadeOutAnimation();
227 case UnselectedSelectedTransition: // FALLTHROUGH
228 case DisabledSelectedTransition:
230 StopFadeInAnimation();
231 Self().Remove( selectedImage );
233 selectedImage = image;
235 FadeInImage( selectedImage );
236 StartFadeInAnimation();
240 selectedImage = image;
244 selectedImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
245 selectedImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
246 selectedImage.SetPosition( 0.f, 0.f, FOREGROUND_DEPTH );
247 selectedImage.SetSizeMode( SIZE_EQUAL_TO_PARENT );
250 void PushButton::SetBackgroundImage( Actor image )
252 Actor& backgroundImage = GetBackgroundImage();
253 Actor& fadeOutBackgroundImage = GetFadeOutBackgroundImage();
255 switch( mPaintState )
257 case UnselectedState: // FALLTHROUGH
259 case UnselectedSelectedTransition:
260 case SelectedUnselectedTransition:
262 if( backgroundImage && backgroundImage.GetParent() )
264 StopFadeOutAnimation();
265 FadeOutImage( Background, backgroundImage );
267 backgroundImage = image;
269 FadeInImage( backgroundImage );
271 StartFadeOutAnimation();
272 StartFadeInAnimation();
276 backgroundImage = image;
277 Self().Add( backgroundImage );
281 case UnselectedDisabledTransition: // FALLTHROUGH
282 case SelectedDisabledTransition:
285 if( fadeOutBackgroundImage )
287 opacity = fadeOutBackgroundImage.GetCurrentOpacity();
289 StopFadeOutAnimation();
291 // Replaces the button image.
292 backgroundImage = image;
294 Self().Add( backgroundImage );
295 FadeOutImage( Background, backgroundImage, opacity );
297 StartFadeOutAnimation();
300 case DisabledUnselectedTransition: // FALLTHROUGH
301 case DisabledSelectedTransition:
303 StopFadeInAnimation();
304 Self().Remove( backgroundImage );
306 backgroundImage = image;
308 FadeInImage( backgroundImage );
309 StartFadeInAnimation();
313 backgroundImage = image;
317 backgroundImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
318 backgroundImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
319 backgroundImage.SetPosition( 0.f, 0.f, BACKGROUND_DEPTH );
320 backgroundImage.SetSizeMode( SIZE_EQUAL_TO_PARENT );
323 void PushButton::SetDisabledImage( Actor image )
325 Actor& disabledImage = GetDisabledImage();
326 Actor& fadeOutButtonImage = GetFadeOutButtonImage();
328 switch( mPaintState )
330 case DisabledUnselectedState: // FALLTHROUGH
331 case DisabledSelectedState:
333 if( disabledImage && disabledImage.GetParent() )
335 StopFadeOutAnimation();
336 FadeOutImage( Foreground, disabledImage );
338 disabledImage = image;
340 FadeInImage( disabledImage );
342 StartFadeOutAnimation();
343 StartFadeInAnimation();
347 disabledImage = image;
348 Self().Add( disabledImage );
352 case UnselectedDisabledTransition: // FALLTHROUGH
353 case SelectedDisabledTransition:
355 StopFadeInAnimation();
356 Self().Remove( disabledImage );
358 disabledImage = image;
360 FadeInImage( disabledImage );
361 StartFadeInAnimation();
364 case DisabledUnselectedTransition: // FALLTHROUGH
365 case DisabledSelectedTransition:
368 if( fadeOutButtonImage )
370 opacity = fadeOutButtonImage.GetCurrentOpacity();
372 StopFadeOutAnimation();
374 // Replaces the button image.
375 disabledImage = image;
377 Self().Add( disabledImage );
378 FadeOutImage( Foreground, disabledImage, opacity );
380 StartFadeOutAnimation();
384 disabledImage = image;
388 disabledImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
389 disabledImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
390 disabledImage.SetPosition( 0.f, 0.f, FOREGROUND_DEPTH );
391 disabledImage.SetSizeMode( SIZE_EQUAL_TO_PARENT );
394 void PushButton::SetDisabledBackgroundImage( Actor image )
396 Actor& disabledBackgroundImage = GetDisabledBackgroundImage();
397 Actor& fadeOutBackgroundImage = GetFadeOutBackgroundImage();
399 switch( mPaintState )
401 case DisabledUnselectedState: // FALLTHROUGH
402 case DisabledSelectedState:
404 if( disabledBackgroundImage && disabledBackgroundImage.GetParent() )
406 StopFadeOutAnimation();
407 FadeOutImage( Background, disabledBackgroundImage );
409 disabledBackgroundImage = image;
411 FadeInImage( disabledBackgroundImage );
413 StartFadeOutAnimation();
414 StartFadeInAnimation();
418 disabledBackgroundImage = image;
419 Self().Add( disabledBackgroundImage );
423 case UnselectedDisabledTransition: // FALLTHROUGH
424 case SelectedDisabledTransition:
426 StopFadeInAnimation();
427 Self().Remove( disabledBackgroundImage );
429 disabledBackgroundImage = image;
431 FadeInImage( disabledBackgroundImage );
432 StartFadeInAnimation();
435 case DisabledUnselectedTransition: // FALLTHROUGH
436 case DisabledSelectedTransition:
439 if( fadeOutBackgroundImage )
441 opacity = fadeOutBackgroundImage.GetCurrentOpacity();
443 StopFadeOutAnimation();
445 // Replaces the button image.
446 disabledBackgroundImage = image;
448 Self().Add( disabledBackgroundImage );
449 FadeOutImage( Background, disabledBackgroundImage, opacity );
451 StartFadeOutAnimation();
455 disabledBackgroundImage = image;
459 disabledBackgroundImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
460 disabledBackgroundImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
461 disabledBackgroundImage.SetPosition( 0.f, 0.f, BACKGROUND_DEPTH );
462 disabledBackgroundImage.SetSizeMode( SIZE_EQUAL_TO_PARENT );
465 void PushButton::OnButtonInitialize()
467 // Push button requires the Leave event.
469 root.SetLeaveRequired( true );
472 void PushButton::OnLabelSet()
474 Actor& label = GetLabel();
478 label.SetAnchorPoint( AnchorPoint::CENTER );
479 label.SetParentOrigin( ParentOrigin::CENTER );
480 label.SetPosition( 0.f, 0.f, LABEL_DEPTH );
481 label.SetSize( mSize );
487 void PushButton::OnSelected( bool selected )
489 Actor& selectedImage = GetSelectedImage();
490 Actor& buttonImage = GetButtonImage();
491 Actor& fadeOutButtonImage = GetFadeOutButtonImage();
493 switch( mPaintState )
495 case UnselectedState:
497 StopFadeOutAnimation();
498 FadeOutImage( Foreground, buttonImage );
499 FadeInImage( selectedImage );
500 StartFadeOutAnimation();
501 StartFadeInAnimation();
503 if( buttonImage || selectedImage )
505 mPaintState = UnselectedSelectedTransition;
509 mPaintState = SelectedState;
515 StopFadeOutAnimation();
516 FadeOutImage( Foreground, selectedImage );
517 FadeInImage( buttonImage );
518 StartFadeOutAnimation();
519 StartFadeInAnimation();
521 if( buttonImage || selectedImage )
523 mPaintState = SelectedUnselectedTransition;
527 mPaintState = UnselectedState;
531 case UnselectedSelectedTransition:
534 if( fadeOutButtonImage )
536 opacity = fadeOutButtonImage.GetCurrentOpacity();
538 StopFadeOutAnimation( false );
539 StopFadeInAnimation();
541 FadeOutImage( Foreground, selectedImage, 1.f - opacity );
542 FadeInImage( buttonImage, opacity );
544 StartFadeOutAnimation();
545 StartFadeInAnimation();
547 if( buttonImage || selectedImage )
549 mPaintState = SelectedUnselectedTransition;
553 mPaintState = UnselectedState;
557 case SelectedUnselectedTransition:
560 if( fadeOutButtonImage )
562 opacity = 1.f - fadeOutButtonImage.GetCurrentOpacity();
564 StopFadeOutAnimation( false );
565 StopFadeInAnimation();
567 FadeOutImage( Foreground, buttonImage, 1.f - opacity );
568 FadeInImage( selectedImage, opacity );
570 StartFadeOutAnimation();
571 StartFadeInAnimation();
573 if( buttonImage || selectedImage )
575 mPaintState = UnselectedSelectedTransition;
579 mPaintState = SelectedState;
590 void PushButton::OnDisabled( bool disabled )
592 Actor& buttonImage = GetButtonImage();
593 Actor& selectedImage = GetSelectedImage();
594 Actor& backgroundImage = GetBackgroundImage();
595 Actor& disabledImage = GetDisabledImage();
596 Actor& disabledBackgroundImage = GetDisabledBackgroundImage();
597 Actor& fadeOutButtonImage = GetFadeOutButtonImage();
599 switch( mPaintState )
601 case UnselectedState:
605 StopFadeOutAnimation();
606 FadeOutImage( Background, backgroundImage );
607 FadeOutImage( Foreground, buttonImage );
608 FadeInImage( disabledBackgroundImage );
609 FadeInImage( disabledImage );
610 StartFadeOutAnimation();
611 StartFadeInAnimation();
613 if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
615 mPaintState = UnselectedDisabledTransition;
619 mPaintState = DisabledUnselectedState;
628 StopFadeOutAnimation();
629 FadeOutImage( Background, backgroundImage );
630 FadeOutImage( Foreground, selectedImage );
631 FadeInImage( disabledBackgroundImage );
632 FadeInImage( disabledImage );
633 StartFadeOutAnimation();
634 StartFadeInAnimation();
636 if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
638 mPaintState = SelectedDisabledTransition;
642 mPaintState = DisabledSelectedState;
647 case DisabledUnselectedState:
651 StopFadeOutAnimation();
652 FadeOutImage( Background, disabledBackgroundImage );
653 FadeOutImage( Foreground, disabledImage );
654 FadeInImage( backgroundImage );
655 FadeInImage( buttonImage );
656 StartFadeOutAnimation();
657 StartFadeInAnimation();
659 if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
661 mPaintState = DisabledUnselectedTransition;
665 mPaintState = UnselectedState;
670 case DisabledSelectedState:
674 StopFadeOutAnimation();
675 FadeOutImage( Background, disabledBackgroundImage );
676 FadeOutImage( Foreground, disabledImage );
677 FadeInImage( backgroundImage );
678 FadeInImage( selectedImage );
679 StartFadeOutAnimation();
680 StartFadeInAnimation();
682 if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
684 mPaintState = DisabledSelectedTransition;
688 mPaintState = SelectedState;
693 case UnselectedSelectedTransition:
698 if( fadeOutButtonImage )
700 opacity = fadeOutButtonImage.GetCurrentOpacity();
702 StopFadeOutAnimation();
703 StopFadeInAnimation();
705 FadeOutImage( Foreground, selectedImage, 1.f - opacity );
706 FadeOutImage( Background, backgroundImage );
708 FadeInImage( disabledImage );
709 FadeInImage( disabledBackgroundImage );
711 StartFadeOutAnimation();
712 StartFadeInAnimation();
714 if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
716 mPaintState = SelectedDisabledTransition;
720 mPaintState = DisabledSelectedState;
725 case SelectedUnselectedTransition:
730 if( fadeOutButtonImage )
732 opacity = fadeOutButtonImage.GetCurrentOpacity();
734 StopFadeOutAnimation();
735 StopFadeInAnimation();
737 FadeOutImage( Foreground, buttonImage, 1.f - opacity );
738 FadeOutImage( Background, backgroundImage );
740 FadeInImage( disabledImage );
741 FadeInImage( disabledBackgroundImage );
743 StartFadeOutAnimation();
744 StartFadeInAnimation();
746 if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
748 mPaintState = UnselectedDisabledTransition;
752 mPaintState = DisabledUnselectedState;
757 case UnselectedDisabledTransition:
762 if( fadeOutButtonImage )
764 opacity = fadeOutButtonImage.GetCurrentOpacity();
766 StopFadeOutAnimation( false );
767 StopFadeInAnimation();
769 FadeOutImage( Foreground, disabledImage, 1.f - opacity );
770 FadeOutImage( Background, disabledBackgroundImage, 1.f - opacity );
771 FadeInImage( buttonImage, opacity );
772 FadeInImage( backgroundImage, opacity );
774 StartFadeOutAnimation();
775 StartFadeInAnimation();
777 if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
779 mPaintState = DisabledUnselectedTransition;
783 mPaintState = UnselectedState;
788 case DisabledUnselectedTransition:
793 if( fadeOutButtonImage )
795 opacity = fadeOutButtonImage.GetCurrentOpacity();
797 StopFadeOutAnimation( false );
798 StopFadeInAnimation();
800 FadeOutImage( Foreground, buttonImage, 1.f - opacity );
801 FadeOutImage( Background, backgroundImage, 1.f - opacity );
802 FadeInImage( disabledImage, opacity );
803 FadeInImage( disabledBackgroundImage, opacity );
805 StartFadeOutAnimation();
806 StartFadeInAnimation();
808 if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
810 mPaintState = UnselectedDisabledTransition;
814 mPaintState = DisabledUnselectedState;
819 case SelectedDisabledTransition:
824 if( fadeOutButtonImage )
826 opacity = fadeOutButtonImage.GetCurrentOpacity();
828 StopFadeOutAnimation( false );
829 StopFadeInAnimation();
831 FadeOutImage( Foreground, disabledImage, 1.f - opacity );
832 FadeOutImage( Background, disabledBackgroundImage, 1.f - opacity );
833 FadeInImage( selectedImage, opacity );
834 FadeInImage( backgroundImage, opacity );
836 StartFadeOutAnimation();
837 StartFadeInAnimation();
839 if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
841 mPaintState = DisabledSelectedTransition;
845 mPaintState = SelectedState;
850 case DisabledSelectedTransition:
855 if( fadeOutButtonImage )
857 opacity = fadeOutButtonImage.GetCurrentOpacity();
859 StopFadeOutAnimation( false );
860 StopFadeInAnimation();
862 FadeOutImage( Foreground, selectedImage, 1.f - opacity );
863 FadeOutImage( Background, backgroundImage, 1.f - opacity );
864 FadeInImage( disabledImage, opacity );
865 FadeInImage( disabledBackgroundImage, opacity );
867 StartFadeOutAnimation();
868 StartFadeInAnimation();
870 if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
872 mPaintState = SelectedDisabledTransition;
876 mPaintState = DisabledSelectedState;
886 void PushButton::OnPressed()
888 Actor& selectedImage = GetSelectedImage();
889 Actor& buttonImage = GetButtonImage();
890 Actor& fadeOutButtonImage = GetFadeOutButtonImage();
892 switch( mPaintState )
894 case UnselectedState:
896 StopFadeOutAnimation();
897 FadeOutImage( Foreground, buttonImage );
898 FadeInImage( selectedImage );
899 StartFadeOutAnimation();
900 StartFadeInAnimation();
902 if( buttonImage || selectedImage )
904 mPaintState = UnselectedSelectedTransition;
908 mPaintState = SelectedState;
912 case UnselectedSelectedTransition:
914 if( !IsAutoRepeating() )
916 mPaintState = SelectedUnselectedTransition;
920 case SelectedUnselectedTransition:
923 if( fadeOutButtonImage )
925 opacity = fadeOutButtonImage.GetCurrentOpacity();
927 StopFadeOutAnimation( false );
928 StopFadeInAnimation();
930 FadeOutImage( Foreground, buttonImage, 1.f - opacity );
931 FadeInImage( selectedImage, opacity );
933 StartFadeOutAnimation();
934 StartFadeInAnimation();
936 if( buttonImage || selectedImage )
938 mPaintState = UnselectedSelectedTransition;
942 mPaintState = SelectedState;
951 void PushButton::OnReleased()
953 Actor& selectedImage = GetSelectedImage();
954 Actor& buttonImage = GetButtonImage();
955 Actor& fadeOutButtonImage = GetFadeOutButtonImage();
957 switch( mPaintState )
961 StopFadeOutAnimation();
962 FadeOutImage( Foreground, selectedImage );
963 FadeInImage( buttonImage );
964 StartFadeOutAnimation();
965 StartFadeInAnimation();
967 if( buttonImage || selectedImage )
969 mPaintState = SelectedUnselectedTransition;
973 mPaintState = UnselectedState;
977 case UnselectedSelectedTransition:
980 if( fadeOutButtonImage )
982 opacity = fadeOutButtonImage.GetCurrentOpacity();
984 StopFadeOutAnimation( false );
985 StopFadeInAnimation();
987 FadeOutImage( Foreground, selectedImage, 1.f - opacity );
988 FadeInImage( buttonImage, opacity );
990 StartFadeOutAnimation();
991 StartFadeInAnimation();
993 if( buttonImage || selectedImage )
995 mPaintState = SelectedUnselectedTransition;
999 mPaintState = UnselectedState;
1010 void PushButton::OnClicked()
1015 void PushButton::OnControlSizeSet( const Vector3& targetSize )
1017 if( targetSize != mSize )
1021 Actor& label = GetLabel();
1025 label.SetSize( mSize );
1030 Vector3 PushButton::GetNaturalSize()
1032 Vector3 size = Control::GetNaturalSize();
1034 const bool widthIsZero = EqualsZero( size.width );
1035 const bool heightIsZero = EqualsZero( size.height );
1037 if( widthIsZero || heightIsZero )
1039 // If background and background not scale9 try get size from that
1040 ImageActor imageActor = FindImageActor( GetButtonImage() );
1041 if( imageActor && imageActor.GetStyle() != ImageActor::STYLE_NINE_PATCH )
1043 Vector3 imageSize = RelayoutHelper::GetNaturalSize( imageActor );
1047 size.width = imageSize.width;
1052 size.height = imageSize.height;
1056 ImageActor backgroundImageActor = FindImageActor( GetBackgroundImage() );
1057 if( backgroundImageActor && backgroundImageActor.GetStyle() != ImageActor::STYLE_NINE_PATCH )
1059 Vector3 imageSize = RelayoutHelper::GetNaturalSize( backgroundImageActor );
1063 size.width = std::max( size.width, imageSize.width );
1068 size.height = std::max( size.height, imageSize.height );
1076 Actor& PushButton::GetFadeOutButtonImage()
1078 return mFadeOutButtonContent;
1081 Actor& PushButton::GetFadeOutBackgroundImage()
1083 return mFadeOutBackgroundContent;
1086 void PushButton::AddToFadeInAnimation( const Actor& actor )
1088 if( !mFadeInAnimation )
1090 mFadeInAnimation = Dali::Animation::New( GetAnimationTime() );
1093 mFadeInAnimation.OpacityTo( actor, 1.f );
1096 void PushButton::StartFadeInAnimation()
1098 if( mFadeInAnimation )
1100 mFadeInAnimation.FinishedSignal().Connect( this, &PushButton::FadeInAnimationFinished );
1101 mFadeInAnimation.Play();
1105 void PushButton::StopFadeInAnimation()
1107 if( mFadeInAnimation )
1109 mFadeInAnimation.Clear();
1110 mFadeInAnimation.Reset();
1114 void PushButton::AddToFadeOutAnimation( const Actor& actor )
1116 if( !mFadeOutAnimation )
1118 mFadeOutAnimation = Dali::Animation::New( GetAnimationTime() );
1121 mFadeOutAnimation.OpacityTo( actor, 0.f );
1124 void PushButton::StartFadeOutAnimation()
1126 if( mFadeOutAnimation )
1128 mFadeOutAnimation.FinishedSignal().Connect( this, &PushButton::FadeOutAnimationFinished );
1129 mFadeOutAnimation.Play();
1133 void PushButton::StopFadeOutAnimation( bool remove )
1135 if( mFadeOutAnimation )
1137 mFadeOutAnimation.Clear();
1138 mFadeOutAnimation.Reset();
1143 Actor& fadeOutButtonImage = GetFadeOutButtonImage();
1144 Actor& fadeOutBackgroundImage = GetFadeOutBackgroundImage();
1146 if( fadeOutButtonImage && fadeOutButtonImage.GetParent() )
1148 fadeOutButtonImage.GetParent().Remove( fadeOutButtonImage );
1151 if( fadeOutBackgroundImage && fadeOutBackgroundImage.GetParent() )
1153 fadeOutBackgroundImage.GetParent().Remove( fadeOutBackgroundImage );
1156 fadeOutButtonImage.Reset();
1157 fadeOutBackgroundImage.Reset();
1161 void PushButton::FadeInImage( Actor& image, float opacity )
1165 image.SetOpacity( opacity );
1166 if( !image.GetParent() )
1168 Self().Add( image );
1171 AddToFadeInAnimation( image );
1175 void PushButton::FadeOutImage( ImageLayer layer, Actor& image, float opacity )
1179 Actor& fadeOutButtonImage = GetFadeOutButtonImage();
1180 Actor& fadeOutBackgroundImage = GetFadeOutBackgroundImage();
1182 Actor& actorLayer = ( ( Background == layer ) ? fadeOutBackgroundImage : fadeOutButtonImage );
1185 actorLayer.SetOpacity( opacity );
1187 AddToFadeOutAnimation( actorLayer );
1191 void PushButton::FadeOutAnimationFinished( Dali::Animation& source )
1193 switch( mPaintState )
1195 case UnselectedSelectedTransition:
1197 mPaintState = SelectedState;
1200 case SelectedUnselectedTransition:
1202 mPaintState = UnselectedState;
1205 case UnselectedDisabledTransition:
1207 mPaintState = DisabledUnselectedState;
1210 case DisabledUnselectedTransition:
1212 mPaintState = UnselectedState;
1215 case SelectedDisabledTransition:
1217 mPaintState = DisabledSelectedState;
1220 case DisabledSelectedTransition:
1222 mPaintState = SelectedState;
1231 StopFadeOutAnimation();
1234 void PushButton::FadeInAnimationFinished( Dali::Animation& source )
1236 switch( mPaintState )
1238 case UnselectedSelectedTransition:
1240 mPaintState = SelectedState;
1243 case SelectedUnselectedTransition:
1245 mPaintState = UnselectedState;
1248 case UnselectedDisabledTransition:
1250 mPaintState = DisabledUnselectedState;
1253 case DisabledUnselectedTransition:
1255 mPaintState = UnselectedState;
1258 case SelectedDisabledTransition:
1260 mPaintState = DisabledSelectedState;
1263 case DisabledSelectedTransition:
1265 mPaintState = SelectedState;
1274 StopFadeInAnimation();
1277 } // namespace Internal
1279 } // namespace Toolkit