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/public-api/controls/text-view/text-view.h>
27 #include <dali-toolkit/internal/controls/relayout-helper.h>
41 const float TEXT_PADDING = 12.0f;
43 const float LABEL_DEPTH( 0.75f );
44 const float FOREGROUND_DEPTH( 0.5f );
45 const float BACKGROUND_DEPTH( 0.25f );
47 const float ANIMATION_TIME( 0.2f );
51 return Toolkit::PushButton::New();
54 TypeRegistration typeRegistration( typeid(Toolkit::PushButton), typeid(Toolkit::Button), Create );
56 } // unnamed namespace
62 * Find the first image actor in the actor hierarchy
64 ImageActor FindImageActor( Actor root )
66 ImageActor imageActor = ImageActor::DownCast( root );
67 if( !imageActor && root )
69 for( unsigned int i = 0, numChildren = root.GetChildCount(); i < numChildren; ++i )
71 ImageActor childImageActor = FindImageActor( root.GetChildAt( i ) );
74 return childImageActor;
82 } // unnamed namespace
84 Dali::Toolkit::PushButton PushButton::New()
86 // Create the implementation, temporarily owned on stack
87 IntrusivePtr< PushButton > internalPushButton = new PushButton();
89 // Pass ownership to CustomActor
90 Dali::Toolkit::PushButton pushButton( *internalPushButton );
92 // Second-phase init of the implementation
93 // This can only be done after the CustomActor connection has been made...
94 internalPushButton->Initialize();
99 PushButton::PushButton()
102 mPaintState( UnselectedState )
104 SetAnimationTime( ANIMATION_TIME );
107 PushButton::~PushButton()
111 void PushButton::SetButtonImage( Actor image )
113 Actor& buttonImage = GetButtonImage();
114 Actor& fadeOutButtonImage = GetFadeOutButtonImage();
116 switch( mPaintState )
118 case UnselectedState:
120 if( buttonImage && buttonImage.GetParent() )
122 StopFadeOutAnimation();
123 FadeOutImage( Foreground, buttonImage );
127 FadeInImage( buttonImage );
129 StartFadeOutAnimation();
130 StartFadeInAnimation();
135 Self().Add( buttonImage );
139 case UnselectedSelectedTransition: // FALLTHROUGH
140 case UnselectedDisabledTransition:
143 if( fadeOutButtonImage )
145 opacity = fadeOutButtonImage.GetCurrentOpacity();
147 StopFadeOutAnimation();
149 // Replaces the button image.
152 Self().Add( buttonImage );
153 FadeOutImage( Foreground, buttonImage, opacity );
155 StartFadeOutAnimation();
158 case SelectedUnselectedTransition: // FALLTHROUGH
159 case DisabledUnselectedTransition:
161 StopFadeInAnimation();
162 Self().Remove( buttonImage );
166 FadeInImage( buttonImage );
167 StartFadeInAnimation();
175 buttonImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
176 buttonImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
177 buttonImage.SetPosition( 0.f, 0.f, FOREGROUND_DEPTH );
178 buttonImage.SetSizeMode( SIZE_EQUAL_TO_PARENT );
181 void PushButton::SetSelectedImage( Actor image )
183 Actor& selectedImage = GetSelectedImage();
184 Actor& fadeOutButtonImage = GetFadeOutButtonImage();
186 switch( mPaintState )
190 if( selectedImage && selectedImage.GetParent() )
192 StopFadeOutAnimation();
193 FadeOutImage( Foreground, selectedImage );
195 selectedImage = image;
197 FadeInImage( selectedImage );
199 StartFadeOutAnimation();
200 StartFadeInAnimation();
204 selectedImage = image;
205 Self().Add( selectedImage );
209 case SelectedUnselectedTransition: // FALLTHROUGH
210 case SelectedDisabledTransition:
213 if( fadeOutButtonImage )
215 opacity = fadeOutButtonImage.GetCurrentOpacity();
217 StopFadeOutAnimation();
219 // Replaces the button image.
220 selectedImage = image;
222 Self().Add( selectedImage );
223 FadeOutImage( Foreground, selectedImage, opacity );
225 StartFadeOutAnimation();
228 case UnselectedSelectedTransition: // FALLTHROUGH
229 case DisabledSelectedTransition:
231 StopFadeInAnimation();
232 Self().Remove( selectedImage );
234 selectedImage = image;
236 FadeInImage( selectedImage );
237 StartFadeInAnimation();
241 selectedImage = image;
245 selectedImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
246 selectedImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
247 selectedImage.SetPosition( 0.f, 0.f, FOREGROUND_DEPTH );
248 selectedImage.SetSizeMode( SIZE_EQUAL_TO_PARENT );
251 void PushButton::SetBackgroundImage( Actor image )
253 Actor& backgroundImage = GetBackgroundImage();
254 Actor& fadeOutBackgroundImage = GetFadeOutBackgroundImage();
256 switch( mPaintState )
258 case UnselectedState: // FALLTHROUGH
260 case UnselectedSelectedTransition:
261 case SelectedUnselectedTransition:
263 if( backgroundImage && backgroundImage.GetParent() )
265 StopFadeOutAnimation();
266 FadeOutImage( Background, backgroundImage );
268 backgroundImage = image;
270 FadeInImage( backgroundImage );
272 StartFadeOutAnimation();
273 StartFadeInAnimation();
277 backgroundImage = image;
278 Self().Add( backgroundImage );
282 case UnselectedDisabledTransition: // FALLTHROUGH
283 case SelectedDisabledTransition:
286 if( fadeOutBackgroundImage )
288 opacity = fadeOutBackgroundImage.GetCurrentOpacity();
290 StopFadeOutAnimation();
292 // Replaces the button image.
293 backgroundImage = image;
295 Self().Add( backgroundImage );
296 FadeOutImage( Background, backgroundImage, opacity );
298 StartFadeOutAnimation();
301 case DisabledUnselectedTransition: // FALLTHROUGH
302 case DisabledSelectedTransition:
304 StopFadeInAnimation();
305 Self().Remove( backgroundImage );
307 backgroundImage = image;
309 FadeInImage( backgroundImage );
310 StartFadeInAnimation();
314 backgroundImage = image;
318 backgroundImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
319 backgroundImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
320 backgroundImage.SetPosition( 0.f, 0.f, BACKGROUND_DEPTH );
321 backgroundImage.SetSizeMode( SIZE_EQUAL_TO_PARENT );
324 void PushButton::SetDisabledImage( Actor image )
326 Actor& disabledImage = GetDisabledImage();
327 Actor& fadeOutButtonImage = GetFadeOutButtonImage();
329 switch( mPaintState )
331 case DisabledUnselectedState: // FALLTHROUGH
332 case DisabledSelectedState:
334 if( disabledImage && disabledImage.GetParent() )
336 StopFadeOutAnimation();
337 FadeOutImage( Foreground, disabledImage );
339 disabledImage = image;
341 FadeInImage( disabledImage );
343 StartFadeOutAnimation();
344 StartFadeInAnimation();
348 disabledImage = image;
349 Self().Add( disabledImage );
353 case UnselectedDisabledTransition: // FALLTHROUGH
354 case SelectedDisabledTransition:
356 StopFadeInAnimation();
357 Self().Remove( disabledImage );
359 disabledImage = image;
361 FadeInImage( disabledImage );
362 StartFadeInAnimation();
365 case DisabledUnselectedTransition: // FALLTHROUGH
366 case DisabledSelectedTransition:
369 if( fadeOutButtonImage )
371 opacity = fadeOutButtonImage.GetCurrentOpacity();
373 StopFadeOutAnimation();
375 // Replaces the button image.
376 disabledImage = image;
378 Self().Add( disabledImage );
379 FadeOutImage( Foreground, disabledImage, opacity );
381 StartFadeOutAnimation();
385 disabledImage = image;
389 disabledImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
390 disabledImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
391 disabledImage.SetPosition( 0.f, 0.f, FOREGROUND_DEPTH );
392 disabledImage.SetSizeMode( SIZE_EQUAL_TO_PARENT );
395 void PushButton::SetDisabledBackgroundImage( Actor image )
397 Actor& disabledBackgroundImage = GetDisabledBackgroundImage();
398 Actor& fadeOutBackgroundImage = GetFadeOutBackgroundImage();
400 switch( mPaintState )
402 case DisabledUnselectedState: // FALLTHROUGH
403 case DisabledSelectedState:
405 if( disabledBackgroundImage && disabledBackgroundImage.GetParent() )
407 StopFadeOutAnimation();
408 FadeOutImage( Background, disabledBackgroundImage );
410 disabledBackgroundImage = image;
412 FadeInImage( disabledBackgroundImage );
414 StartFadeOutAnimation();
415 StartFadeInAnimation();
419 disabledBackgroundImage = image;
420 Self().Add( disabledBackgroundImage );
424 case UnselectedDisabledTransition: // FALLTHROUGH
425 case SelectedDisabledTransition:
427 StopFadeInAnimation();
428 Self().Remove( disabledBackgroundImage );
430 disabledBackgroundImage = image;
432 FadeInImage( disabledBackgroundImage );
433 StartFadeInAnimation();
436 case DisabledUnselectedTransition: // FALLTHROUGH
437 case DisabledSelectedTransition:
440 if( fadeOutBackgroundImage )
442 opacity = fadeOutBackgroundImage.GetCurrentOpacity();
444 StopFadeOutAnimation();
446 // Replaces the button image.
447 disabledBackgroundImage = image;
449 Self().Add( disabledBackgroundImage );
450 FadeOutImage( Background, disabledBackgroundImage, opacity );
452 StartFadeOutAnimation();
456 disabledBackgroundImage = image;
460 disabledBackgroundImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
461 disabledBackgroundImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
462 disabledBackgroundImage.SetPosition( 0.f, 0.f, BACKGROUND_DEPTH );
463 disabledBackgroundImage.SetSizeMode( SIZE_EQUAL_TO_PARENT );
466 void PushButton::OnButtonInitialize()
468 // Push button requires the Leave event.
470 root.SetLeaveRequired( true );
473 void PushButton::OnLabelSet()
475 Actor& label = GetLabel();
479 label.SetAnchorPoint( AnchorPoint::CENTER );
480 label.SetParentOrigin( ParentOrigin::CENTER );
481 label.SetPosition( 0.f, 0.f, LABEL_DEPTH );
482 label.SetSize( mSize );
488 void PushButton::OnSelected( bool selected )
490 Actor& selectedImage = GetSelectedImage();
491 Actor& buttonImage = GetButtonImage();
492 Actor& fadeOutButtonImage = GetFadeOutButtonImage();
494 switch( mPaintState )
496 case UnselectedState:
498 StopFadeOutAnimation();
499 FadeOutImage( Foreground, buttonImage );
500 FadeInImage( selectedImage );
501 StartFadeOutAnimation();
502 StartFadeInAnimation();
504 if( buttonImage || selectedImage )
506 mPaintState = UnselectedSelectedTransition;
510 mPaintState = SelectedState;
516 StopFadeOutAnimation();
517 FadeOutImage( Foreground, selectedImage );
518 FadeInImage( buttonImage );
519 StartFadeOutAnimation();
520 StartFadeInAnimation();
522 if( buttonImage || selectedImage )
524 mPaintState = SelectedUnselectedTransition;
528 mPaintState = UnselectedState;
532 case UnselectedSelectedTransition:
535 if( fadeOutButtonImage )
537 opacity = fadeOutButtonImage.GetCurrentOpacity();
539 StopFadeOutAnimation( false );
540 StopFadeInAnimation();
542 FadeOutImage( Foreground, selectedImage, 1.f - opacity );
543 FadeInImage( buttonImage, opacity );
545 StartFadeOutAnimation();
546 StartFadeInAnimation();
548 if( buttonImage || selectedImage )
550 mPaintState = SelectedUnselectedTransition;
554 mPaintState = UnselectedState;
558 case SelectedUnselectedTransition:
561 if( fadeOutButtonImage )
563 opacity = 1.f - fadeOutButtonImage.GetCurrentOpacity();
565 StopFadeOutAnimation( false );
566 StopFadeInAnimation();
568 FadeOutImage( Foreground, buttonImage, 1.f - opacity );
569 FadeInImage( selectedImage, opacity );
571 StartFadeOutAnimation();
572 StartFadeInAnimation();
574 if( buttonImage || selectedImage )
576 mPaintState = UnselectedSelectedTransition;
580 mPaintState = SelectedState;
591 void PushButton::OnDisabled( bool disabled )
593 Actor& buttonImage = GetButtonImage();
594 Actor& selectedImage = GetSelectedImage();
595 Actor& backgroundImage = GetBackgroundImage();
596 Actor& disabledImage = GetDisabledImage();
597 Actor& disabledBackgroundImage = GetDisabledBackgroundImage();
598 Actor& fadeOutButtonImage = GetFadeOutButtonImage();
600 switch( mPaintState )
602 case UnselectedState:
606 StopFadeOutAnimation();
607 FadeOutImage( Background, backgroundImage );
608 FadeOutImage( Foreground, buttonImage );
609 FadeInImage( disabledBackgroundImage );
610 FadeInImage( disabledImage );
611 StartFadeOutAnimation();
612 StartFadeInAnimation();
614 if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
616 mPaintState = UnselectedDisabledTransition;
620 mPaintState = DisabledUnselectedState;
629 StopFadeOutAnimation();
630 FadeOutImage( Background, backgroundImage );
631 FadeOutImage( Foreground, selectedImage );
632 FadeInImage( disabledBackgroundImage );
633 FadeInImage( disabledImage );
634 StartFadeOutAnimation();
635 StartFadeInAnimation();
637 if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
639 mPaintState = SelectedDisabledTransition;
643 mPaintState = DisabledSelectedState;
648 case DisabledUnselectedState:
652 StopFadeOutAnimation();
653 FadeOutImage( Background, disabledBackgroundImage );
654 FadeOutImage( Foreground, disabledImage );
655 FadeInImage( backgroundImage );
656 FadeInImage( buttonImage );
657 StartFadeOutAnimation();
658 StartFadeInAnimation();
660 if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
662 mPaintState = DisabledUnselectedTransition;
666 mPaintState = UnselectedState;
671 case DisabledSelectedState:
675 StopFadeOutAnimation();
676 FadeOutImage( Background, disabledBackgroundImage );
677 FadeOutImage( Foreground, disabledImage );
678 FadeInImage( backgroundImage );
679 FadeInImage( selectedImage );
680 StartFadeOutAnimation();
681 StartFadeInAnimation();
683 if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
685 mPaintState = DisabledSelectedTransition;
689 mPaintState = SelectedState;
694 case UnselectedSelectedTransition:
699 if( fadeOutButtonImage )
701 opacity = fadeOutButtonImage.GetCurrentOpacity();
703 StopFadeOutAnimation();
704 StopFadeInAnimation();
706 FadeOutImage( Foreground, selectedImage, 1.f - opacity );
707 FadeOutImage( Background, backgroundImage );
709 FadeInImage( disabledImage );
710 FadeInImage( disabledBackgroundImage );
712 StartFadeOutAnimation();
713 StartFadeInAnimation();
715 if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
717 mPaintState = SelectedDisabledTransition;
721 mPaintState = DisabledSelectedState;
726 case SelectedUnselectedTransition:
731 if( fadeOutButtonImage )
733 opacity = fadeOutButtonImage.GetCurrentOpacity();
735 StopFadeOutAnimation();
736 StopFadeInAnimation();
738 FadeOutImage( Foreground, buttonImage, 1.f - opacity );
739 FadeOutImage( Background, backgroundImage );
741 FadeInImage( disabledImage );
742 FadeInImage( disabledBackgroundImage );
744 StartFadeOutAnimation();
745 StartFadeInAnimation();
747 if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
749 mPaintState = UnselectedDisabledTransition;
753 mPaintState = DisabledUnselectedState;
758 case UnselectedDisabledTransition:
763 if( fadeOutButtonImage )
765 opacity = fadeOutButtonImage.GetCurrentOpacity();
767 StopFadeOutAnimation( false );
768 StopFadeInAnimation();
770 FadeOutImage( Foreground, disabledImage, 1.f - opacity );
771 FadeOutImage( Background, disabledBackgroundImage, 1.f - opacity );
772 FadeInImage( buttonImage, opacity );
773 FadeInImage( backgroundImage, opacity );
775 StartFadeOutAnimation();
776 StartFadeInAnimation();
778 if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
780 mPaintState = DisabledUnselectedTransition;
784 mPaintState = UnselectedState;
789 case DisabledUnselectedTransition:
794 if( fadeOutButtonImage )
796 opacity = fadeOutButtonImage.GetCurrentOpacity();
798 StopFadeOutAnimation( false );
799 StopFadeInAnimation();
801 FadeOutImage( Foreground, buttonImage, 1.f - opacity );
802 FadeOutImage( Background, backgroundImage, 1.f - opacity );
803 FadeInImage( disabledImage, opacity );
804 FadeInImage( disabledBackgroundImage, opacity );
806 StartFadeOutAnimation();
807 StartFadeInAnimation();
809 if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
811 mPaintState = UnselectedDisabledTransition;
815 mPaintState = DisabledUnselectedState;
820 case SelectedDisabledTransition:
825 if( fadeOutButtonImage )
827 opacity = fadeOutButtonImage.GetCurrentOpacity();
829 StopFadeOutAnimation( false );
830 StopFadeInAnimation();
832 FadeOutImage( Foreground, disabledImage, 1.f - opacity );
833 FadeOutImage( Background, disabledBackgroundImage, 1.f - opacity );
834 FadeInImage( selectedImage, opacity );
835 FadeInImage( backgroundImage, opacity );
837 StartFadeOutAnimation();
838 StartFadeInAnimation();
840 if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
842 mPaintState = DisabledSelectedTransition;
846 mPaintState = SelectedState;
851 case DisabledSelectedTransition:
856 if( fadeOutButtonImage )
858 opacity = fadeOutButtonImage.GetCurrentOpacity();
860 StopFadeOutAnimation( false );
861 StopFadeInAnimation();
863 FadeOutImage( Foreground, selectedImage, 1.f - opacity );
864 FadeOutImage( Background, backgroundImage, 1.f - opacity );
865 FadeInImage( disabledImage, opacity );
866 FadeInImage( disabledBackgroundImage, opacity );
868 StartFadeOutAnimation();
869 StartFadeInAnimation();
871 if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
873 mPaintState = SelectedDisabledTransition;
877 mPaintState = DisabledSelectedState;
887 void PushButton::OnPressed()
889 Actor& selectedImage = GetSelectedImage();
890 Actor& buttonImage = GetButtonImage();
891 Actor& fadeOutButtonImage = GetFadeOutButtonImage();
893 switch( mPaintState )
895 case UnselectedState:
897 StopFadeOutAnimation();
898 FadeOutImage( Foreground, buttonImage );
899 FadeInImage( selectedImage );
900 StartFadeOutAnimation();
901 StartFadeInAnimation();
903 if( buttonImage || selectedImage )
905 mPaintState = UnselectedSelectedTransition;
909 mPaintState = SelectedState;
913 case UnselectedSelectedTransition:
915 if( !IsAutoRepeating() )
917 mPaintState = SelectedUnselectedTransition;
921 case SelectedUnselectedTransition:
924 if( fadeOutButtonImage )
926 opacity = fadeOutButtonImage.GetCurrentOpacity();
928 StopFadeOutAnimation( false );
929 StopFadeInAnimation();
931 FadeOutImage( Foreground, buttonImage, 1.f - opacity );
932 FadeInImage( selectedImage, opacity );
934 StartFadeOutAnimation();
935 StartFadeInAnimation();
937 if( buttonImage || selectedImage )
939 mPaintState = UnselectedSelectedTransition;
943 mPaintState = SelectedState;
952 void PushButton::OnReleased()
954 Actor& selectedImage = GetSelectedImage();
955 Actor& buttonImage = GetButtonImage();
956 Actor& fadeOutButtonImage = GetFadeOutButtonImage();
958 switch( mPaintState )
962 StopFadeOutAnimation();
963 FadeOutImage( Foreground, selectedImage );
964 FadeInImage( buttonImage );
965 StartFadeOutAnimation();
966 StartFadeInAnimation();
968 if( buttonImage || selectedImage )
970 mPaintState = SelectedUnselectedTransition;
974 mPaintState = UnselectedState;
978 case UnselectedSelectedTransition:
981 if( fadeOutButtonImage )
983 opacity = fadeOutButtonImage.GetCurrentOpacity();
985 StopFadeOutAnimation( false );
986 StopFadeInAnimation();
988 FadeOutImage( Foreground, selectedImage, 1.f - opacity );
989 FadeInImage( buttonImage, opacity );
991 StartFadeOutAnimation();
992 StartFadeInAnimation();
994 if( buttonImage || selectedImage )
996 mPaintState = SelectedUnselectedTransition;
1000 mPaintState = UnselectedState;
1011 void PushButton::OnClicked()
1016 void PushButton::OnControlSizeSet( const Vector3& targetSize )
1018 if( targetSize != mSize )
1022 Actor& label = GetLabel();
1026 label.SetSize( mSize );
1031 Vector3 PushButton::GetNaturalSize()
1033 Vector3 size = Control::GetNaturalSize();
1035 const bool widthIsZero = EqualsZero( size.width );
1036 const bool heightIsZero = EqualsZero( size.height );
1038 if( widthIsZero || heightIsZero )
1040 // If background and background not scale9 try get size from that
1041 ImageActor imageActor = FindImageActor( GetButtonImage() );
1042 if( imageActor && imageActor.GetStyle() != ImageActor::STYLE_NINE_PATCH )
1044 Vector3 imageSize = RelayoutHelper::GetNaturalSize( imageActor );
1048 size.width = imageSize.width;
1053 size.height = imageSize.height;
1057 ImageActor backgroundImageActor = FindImageActor( GetBackgroundImage() );
1058 if( backgroundImageActor && backgroundImageActor.GetStyle() != ImageActor::STYLE_NINE_PATCH )
1060 Vector3 imageSize = RelayoutHelper::GetNaturalSize( backgroundImageActor );
1064 size.width = std::max( size.width, imageSize.width );
1069 size.height = std::max( size.height, imageSize.height );
1073 // If label, test against it's size
1074 Toolkit::TextView textView = Toolkit::TextView::DownCast( GetLabel() );
1077 Vector3 textViewSize = textView.GetNaturalSize();
1081 size.width = std::max( size.width, textViewSize.width + TEXT_PADDING * 2.0f );
1086 size.height = std::max( size.height, textViewSize.height + TEXT_PADDING * 2.0f );
1094 Actor& PushButton::GetFadeOutButtonImage()
1096 return mFadeOutButtonContent;
1099 Actor& PushButton::GetFadeOutBackgroundImage()
1101 return mFadeOutBackgroundContent;
1104 void PushButton::AddToFadeInAnimation( const Actor& actor )
1106 if( !mFadeInAnimation )
1108 mFadeInAnimation = Dali::Animation::New( GetAnimationTime() );
1111 mFadeInAnimation.OpacityTo( actor, 1.f );
1114 void PushButton::StartFadeInAnimation()
1116 if( mFadeInAnimation )
1118 mFadeInAnimation.FinishedSignal().Connect( this, &PushButton::FadeInAnimationFinished );
1119 mFadeInAnimation.Play();
1123 void PushButton::StopFadeInAnimation()
1125 if( mFadeInAnimation )
1127 mFadeInAnimation.Clear();
1128 mFadeInAnimation.Reset();
1132 void PushButton::AddToFadeOutAnimation( const Actor& actor )
1134 if( !mFadeOutAnimation )
1136 mFadeOutAnimation = Dali::Animation::New( GetAnimationTime() );
1139 mFadeOutAnimation.OpacityTo( actor, 0.f );
1142 void PushButton::StartFadeOutAnimation()
1144 if( mFadeOutAnimation )
1146 mFadeOutAnimation.FinishedSignal().Connect( this, &PushButton::FadeOutAnimationFinished );
1147 mFadeOutAnimation.Play();
1151 void PushButton::StopFadeOutAnimation( bool remove )
1153 if( mFadeOutAnimation )
1155 mFadeOutAnimation.Clear();
1156 mFadeOutAnimation.Reset();
1161 Actor& fadeOutButtonImage = GetFadeOutButtonImage();
1162 Actor& fadeOutBackgroundImage = GetFadeOutBackgroundImage();
1164 if( fadeOutButtonImage && fadeOutButtonImage.GetParent() )
1166 fadeOutButtonImage.GetParent().Remove( fadeOutButtonImage );
1169 if( fadeOutBackgroundImage && fadeOutBackgroundImage.GetParent() )
1171 fadeOutBackgroundImage.GetParent().Remove( fadeOutBackgroundImage );
1174 fadeOutButtonImage.Reset();
1175 fadeOutBackgroundImage.Reset();
1179 void PushButton::FadeInImage( Actor& image, float opacity )
1183 image.SetOpacity( opacity );
1184 if( !image.GetParent() )
1186 Self().Add( image );
1189 AddToFadeInAnimation( image );
1193 void PushButton::FadeOutImage( ImageLayer layer, Actor& image, float opacity )
1197 Actor& fadeOutButtonImage = GetFadeOutButtonImage();
1198 Actor& fadeOutBackgroundImage = GetFadeOutBackgroundImage();
1200 Actor& actorLayer = ( ( Background == layer ) ? fadeOutBackgroundImage : fadeOutButtonImage );
1203 actorLayer.SetOpacity( opacity );
1205 AddToFadeOutAnimation( actorLayer );
1209 void PushButton::FadeOutAnimationFinished( Dali::Animation& source )
1211 switch( mPaintState )
1213 case UnselectedSelectedTransition:
1215 mPaintState = SelectedState;
1218 case SelectedUnselectedTransition:
1220 mPaintState = UnselectedState;
1223 case UnselectedDisabledTransition:
1225 mPaintState = DisabledUnselectedState;
1228 case DisabledUnselectedTransition:
1230 mPaintState = UnselectedState;
1233 case SelectedDisabledTransition:
1235 mPaintState = DisabledSelectedState;
1238 case DisabledSelectedTransition:
1240 mPaintState = SelectedState;
1249 StopFadeOutAnimation();
1252 void PushButton::FadeInAnimationFinished( Dali::Animation& source )
1254 switch( mPaintState )
1256 case UnselectedSelectedTransition:
1258 mPaintState = SelectedState;
1261 case SelectedUnselectedTransition:
1263 mPaintState = UnselectedState;
1266 case UnselectedDisabledTransition:
1268 mPaintState = DisabledUnselectedState;
1271 case DisabledUnselectedTransition:
1273 mPaintState = UnselectedState;
1276 case SelectedDisabledTransition:
1278 mPaintState = DisabledSelectedState;
1281 case DisabledSelectedTransition:
1283 mPaintState = SelectedState;
1292 StopFadeInAnimation();
1295 } // namespace Internal
1297 } // namespace Toolkit