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>
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, 0.0f, 0 );
128 StartFadeOutAnimation();
129 StartFadeInAnimation();
134 Self().Insert( 0, buttonImage );
138 case UnselectedSelectedTransition: // FALLTHROUGH
139 case UnselectedDisabledTransition:
142 if( fadeOutButtonImage )
144 opacity = fadeOutButtonImage.GetCurrentOpacity();
146 StopFadeOutAnimation();
148 // Replaces the button image.
151 Self().Insert( 0, buttonImage );
152 FadeOutImage( Foreground, buttonImage, opacity );
154 StartFadeOutAnimation();
157 case SelectedUnselectedTransition: // FALLTHROUGH
158 case DisabledUnselectedTransition:
160 StopFadeInAnimation();
161 Self().Remove( buttonImage );
165 FadeInImage( buttonImage, 0.0f, 0 );
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.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
178 buttonImage.SetName( "BUTTON_IMAGE" );
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, 0.0f, 0 );
199 StartFadeOutAnimation();
200 StartFadeInAnimation();
204 selectedImage = image;
205 Self().Insert( 0, 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().Insert( 0, 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, 0.0f, 0 );
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.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
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, 0.0f, 0 );
272 StartFadeOutAnimation();
273 StartFadeInAnimation();
277 backgroundImage = image;
278 Self().Insert( 0, 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().Insert( 0, 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, 0.0f, 0 );
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.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
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, 0.0f, 0 );
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, 0.0f, 0 );
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.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
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, 0.0f, 0 );
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, 0.0f, 0 );
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.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
466 void PushButton::OnButtonInitialize()
468 // Push button requires the Leave event.
470 root.SetLeaveRequired( true );
472 // Set resize policy to natural size so that buttons will resize to background images
473 root.SetResizePolicy( USE_NATURAL_SIZE, ALL_DIMENSIONS );
476 void PushButton::OnLabelSet()
478 Actor& label = GetLabel();
482 label.SetAnchorPoint( AnchorPoint::CENTER );
483 label.SetParentOrigin( ParentOrigin::CENTER );
484 label.SetPosition( 0.f, 0.f, LABEL_DEPTH );
485 label.SetSize( mSize );
491 void PushButton::OnSelected( bool selected )
493 Actor& selectedImage = GetSelectedImage();
494 Actor& buttonImage = GetButtonImage();
495 Actor& fadeOutButtonImage = GetFadeOutButtonImage();
497 switch( mPaintState )
499 case UnselectedState:
501 StopFadeOutAnimation();
502 FadeOutImage( Foreground, buttonImage );
503 FadeInImage( selectedImage, 0.0f, 0 );
504 StartFadeOutAnimation();
505 StartFadeInAnimation();
507 if( buttonImage || selectedImage )
509 mPaintState = UnselectedSelectedTransition;
513 mPaintState = SelectedState;
519 StopFadeOutAnimation();
520 FadeOutImage( Foreground, selectedImage );
521 FadeInImage( buttonImage, 0.0f, 0 );
522 StartFadeOutAnimation();
523 StartFadeInAnimation();
525 if( buttonImage || selectedImage )
527 mPaintState = SelectedUnselectedTransition;
531 mPaintState = UnselectedState;
535 case UnselectedSelectedTransition:
538 if( fadeOutButtonImage )
540 opacity = fadeOutButtonImage.GetCurrentOpacity();
542 StopFadeOutAnimation( false );
543 StopFadeInAnimation();
545 FadeOutImage( Foreground, selectedImage, 1.f - opacity );
546 FadeInImage( buttonImage, opacity, 0 );
548 StartFadeOutAnimation();
549 StartFadeInAnimation();
551 if( buttonImage || selectedImage )
553 mPaintState = SelectedUnselectedTransition;
557 mPaintState = UnselectedState;
561 case SelectedUnselectedTransition:
564 if( fadeOutButtonImage )
566 opacity = 1.f - fadeOutButtonImage.GetCurrentOpacity();
568 StopFadeOutAnimation( false );
569 StopFadeInAnimation();
571 FadeOutImage( Foreground, buttonImage, 1.f - opacity );
572 FadeInImage( selectedImage, opacity, 0 );
574 StartFadeOutAnimation();
575 StartFadeInAnimation();
577 if( buttonImage || selectedImage )
579 mPaintState = UnselectedSelectedTransition;
583 mPaintState = SelectedState;
594 void PushButton::OnDisabled( bool disabled )
596 Actor& buttonImage = GetButtonImage();
597 Actor& selectedImage = GetSelectedImage();
598 Actor& backgroundImage = GetBackgroundImage();
599 Actor& disabledImage = GetDisabledImage();
600 Actor& disabledBackgroundImage = GetDisabledBackgroundImage();
601 Actor& fadeOutButtonImage = GetFadeOutButtonImage();
603 switch( mPaintState )
605 case UnselectedState:
609 StopFadeOutAnimation();
610 FadeOutImage( Background, backgroundImage );
611 FadeOutImage( Foreground, buttonImage );
612 FadeInImage( disabledBackgroundImage, 0.0f, 0 );
613 FadeInImage( disabledImage, 0.0f, 0 );
614 StartFadeOutAnimation();
615 StartFadeInAnimation();
617 if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
619 mPaintState = UnselectedDisabledTransition;
623 mPaintState = DisabledUnselectedState;
632 StopFadeOutAnimation();
633 FadeOutImage( Background, backgroundImage );
634 FadeOutImage( Foreground, selectedImage );
635 FadeInImage( disabledBackgroundImage, 0.0f, 0 );
636 FadeInImage( disabledImage, 0.0f, 0 );
637 StartFadeOutAnimation();
638 StartFadeInAnimation();
640 if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
642 mPaintState = SelectedDisabledTransition;
646 mPaintState = DisabledSelectedState;
651 case DisabledUnselectedState:
655 StopFadeOutAnimation();
656 FadeOutImage( Background, disabledBackgroundImage );
657 FadeOutImage( Foreground, disabledImage );
658 FadeInImage( backgroundImage, 0.0f, 0 );
659 FadeInImage( buttonImage, 0.0f, 0 );
660 StartFadeOutAnimation();
661 StartFadeInAnimation();
663 if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
665 mPaintState = DisabledUnselectedTransition;
669 mPaintState = UnselectedState;
674 case DisabledSelectedState:
678 StopFadeOutAnimation();
679 FadeOutImage( Background, disabledBackgroundImage );
680 FadeOutImage( Foreground, disabledImage );
681 FadeInImage( backgroundImage, 0.0f, 0 );
682 FadeInImage( selectedImage, 0.0f, 0 );
683 StartFadeOutAnimation();
684 StartFadeInAnimation();
686 if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
688 mPaintState = DisabledSelectedTransition;
692 mPaintState = SelectedState;
697 case UnselectedSelectedTransition:
702 if( fadeOutButtonImage )
704 opacity = fadeOutButtonImage.GetCurrentOpacity();
706 StopFadeOutAnimation();
707 StopFadeInAnimation();
709 FadeOutImage( Foreground, selectedImage, 1.f - opacity );
710 FadeOutImage( Background, backgroundImage );
712 FadeInImage( disabledImage, 0.0f, 0 );
713 FadeInImage( disabledBackgroundImage, 0.0f, 0 );
715 StartFadeOutAnimation();
716 StartFadeInAnimation();
718 if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
720 mPaintState = SelectedDisabledTransition;
724 mPaintState = DisabledSelectedState;
729 case SelectedUnselectedTransition:
734 if( fadeOutButtonImage )
736 opacity = fadeOutButtonImage.GetCurrentOpacity();
738 StopFadeOutAnimation();
739 StopFadeInAnimation();
741 FadeOutImage( Foreground, buttonImage, 1.f - opacity );
742 FadeOutImage( Background, backgroundImage );
744 FadeInImage( disabledImage, 0.0f, 0);
745 FadeInImage( disabledBackgroundImage, 0.0f, 0 );
747 StartFadeOutAnimation();
748 StartFadeInAnimation();
750 if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
752 mPaintState = UnselectedDisabledTransition;
756 mPaintState = DisabledUnselectedState;
761 case UnselectedDisabledTransition:
766 if( fadeOutButtonImage )
768 opacity = fadeOutButtonImage.GetCurrentOpacity();
770 StopFadeOutAnimation( false );
771 StopFadeInAnimation();
773 FadeOutImage( Foreground, disabledImage, 1.f - opacity );
774 FadeOutImage( Background, disabledBackgroundImage, 1.f - opacity );
775 FadeInImage( buttonImage, opacity, 0 );
776 FadeInImage( backgroundImage, opacity, 0 );
778 StartFadeOutAnimation();
779 StartFadeInAnimation();
781 if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
783 mPaintState = DisabledUnselectedTransition;
787 mPaintState = UnselectedState;
792 case DisabledUnselectedTransition:
797 if( fadeOutButtonImage )
799 opacity = fadeOutButtonImage.GetCurrentOpacity();
801 StopFadeOutAnimation( false );
802 StopFadeInAnimation();
804 FadeOutImage( Foreground, buttonImage, 1.f - opacity );
805 FadeOutImage( Background, backgroundImage, 1.f - opacity );
806 FadeInImage( disabledImage, opacity, 0 );
807 FadeInImage( disabledBackgroundImage, opacity, 0 );
809 StartFadeOutAnimation();
810 StartFadeInAnimation();
812 if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
814 mPaintState = UnselectedDisabledTransition;
818 mPaintState = DisabledUnselectedState;
823 case SelectedDisabledTransition:
828 if( fadeOutButtonImage )
830 opacity = fadeOutButtonImage.GetCurrentOpacity();
832 StopFadeOutAnimation( false );
833 StopFadeInAnimation();
835 FadeOutImage( Foreground, disabledImage, 1.f - opacity );
836 FadeOutImage( Background, disabledBackgroundImage, 1.f - opacity );
837 FadeInImage( selectedImage, opacity, 0 );
838 FadeInImage( backgroundImage, opacity, 0 );
840 StartFadeOutAnimation();
841 StartFadeInAnimation();
843 if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
845 mPaintState = DisabledSelectedTransition;
849 mPaintState = SelectedState;
854 case DisabledSelectedTransition:
859 if( fadeOutButtonImage )
861 opacity = fadeOutButtonImage.GetCurrentOpacity();
863 StopFadeOutAnimation( false );
864 StopFadeInAnimation();
866 FadeOutImage( Foreground, selectedImage, 1.f - opacity );
867 FadeOutImage( Background, backgroundImage, 1.f - opacity );
868 FadeInImage( disabledImage, opacity, 0 );
869 FadeInImage( disabledBackgroundImage, opacity, 0 );
871 StartFadeOutAnimation();
872 StartFadeInAnimation();
874 if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
876 mPaintState = SelectedDisabledTransition;
880 mPaintState = DisabledSelectedState;
890 void PushButton::OnPressed()
892 Actor& selectedImage = GetSelectedImage();
893 Actor& buttonImage = GetButtonImage();
894 Actor& fadeOutButtonImage = GetFadeOutButtonImage();
896 switch( mPaintState )
898 case UnselectedState:
900 StopFadeOutAnimation();
901 FadeOutImage( Foreground, buttonImage );
902 FadeInImage( selectedImage, 0.0f, 0 );
903 StartFadeOutAnimation();
904 StartFadeInAnimation();
906 if( buttonImage || selectedImage )
908 mPaintState = UnselectedSelectedTransition;
912 mPaintState = SelectedState;
916 case UnselectedSelectedTransition:
918 if( !IsAutoRepeating() )
920 mPaintState = SelectedUnselectedTransition;
924 case SelectedUnselectedTransition:
927 if( fadeOutButtonImage )
929 opacity = fadeOutButtonImage.GetCurrentOpacity();
931 StopFadeOutAnimation( false );
932 StopFadeInAnimation();
934 FadeOutImage( Foreground, buttonImage, 1.f - opacity );
935 FadeInImage( selectedImage, opacity, 0 );
937 StartFadeOutAnimation();
938 StartFadeInAnimation();
940 if( buttonImage || selectedImage )
942 mPaintState = UnselectedSelectedTransition;
946 mPaintState = SelectedState;
955 void PushButton::OnReleased()
957 Actor& selectedImage = GetSelectedImage();
958 Actor& buttonImage = GetButtonImage();
959 Actor& fadeOutButtonImage = GetFadeOutButtonImage();
961 switch( mPaintState )
965 StopFadeOutAnimation();
966 FadeOutImage( Foreground, selectedImage );
967 FadeInImage( buttonImage, 0.0f, 0 );
968 StartFadeOutAnimation();
969 StartFadeInAnimation();
971 if( buttonImage || selectedImage )
973 mPaintState = SelectedUnselectedTransition;
977 mPaintState = UnselectedState;
981 case UnselectedSelectedTransition:
984 if( fadeOutButtonImage )
986 opacity = fadeOutButtonImage.GetCurrentOpacity();
988 StopFadeOutAnimation( false );
989 StopFadeInAnimation();
991 FadeOutImage( Foreground, selectedImage, 1.f - opacity );
992 FadeInImage( buttonImage, opacity, 0 );
994 StartFadeOutAnimation();
995 StartFadeInAnimation();
997 if( buttonImage || selectedImage )
999 mPaintState = SelectedUnselectedTransition;
1003 mPaintState = UnselectedState;
1014 void PushButton::OnClicked()
1019 void PushButton::OnControlSizeSet( const Vector3& targetSize )
1021 if( targetSize != mSize )
1025 Actor& label = GetLabel();
1029 label.SetSize( mSize );
1034 Vector3 PushButton::GetNaturalSize()
1036 Vector3 size = Control::GetNaturalSize();
1038 const bool widthIsZero = EqualsZero( size.width );
1039 const bool heightIsZero = EqualsZero( size.height );
1041 if( widthIsZero || heightIsZero )
1043 // If background and background not scale9 try get size from that
1044 ImageActor imageActor = FindImageActor( GetButtonImage() );
1045 if( imageActor && imageActor.GetStyle() != ImageActor::STYLE_NINE_PATCH )
1047 Vector3 imageSize = imageActor.GetNaturalSize();
1051 size.width = imageSize.width;
1056 size.height = imageSize.height;
1060 ImageActor backgroundImageActor = FindImageActor( GetBackgroundImage() );
1061 if( backgroundImageActor && backgroundImageActor.GetStyle() != ImageActor::STYLE_NINE_PATCH )
1063 Vector3 imageSize = backgroundImageActor.GetNaturalSize();
1067 size.width = std::max( size.width, imageSize.width );
1072 size.height = std::max( size.height, imageSize.height );
1076 // If label, test against it's size
1077 Toolkit::TextView textView = Toolkit::TextView::DownCast( GetLabel() );
1080 Vector3 textViewSize = textView.GetNaturalSize();
1084 size.width = std::max( size.width, textViewSize.width + TEXT_PADDING * 2.0f );
1089 size.height = std::max( size.height, textViewSize.height + TEXT_PADDING * 2.0f );
1097 Actor& PushButton::GetFadeOutButtonImage()
1099 return mFadeOutButtonContent;
1102 Actor& PushButton::GetFadeOutBackgroundImage()
1104 return mFadeOutBackgroundContent;
1107 void PushButton::AddToFadeInAnimation( Actor& actor )
1109 if( !mFadeInAnimation )
1111 mFadeInAnimation = Dali::Animation::New( GetAnimationTime() );
1114 mFadeInAnimation.AnimateTo( Property( actor, Actor::Property::COLOR_ALPHA ), 1.f );
1117 void PushButton::StartFadeInAnimation()
1119 if( mFadeInAnimation )
1121 mFadeInAnimation.FinishedSignal().Connect( this, &PushButton::FadeInAnimationFinished );
1122 mFadeInAnimation.Play();
1126 void PushButton::StopFadeInAnimation()
1128 if( mFadeInAnimation )
1130 mFadeInAnimation.Clear();
1131 mFadeInAnimation.Reset();
1135 void PushButton::AddToFadeOutAnimation( Actor& actor )
1137 if( !mFadeOutAnimation )
1139 mFadeOutAnimation = Dali::Animation::New( GetAnimationTime() );
1142 mFadeOutAnimation.AnimateTo( Property( actor, Actor::Property::COLOR_ALPHA ), 0.f );
1145 void PushButton::StartFadeOutAnimation()
1147 if( mFadeOutAnimation )
1149 mFadeOutAnimation.FinishedSignal().Connect( this, &PushButton::FadeOutAnimationFinished );
1150 mFadeOutAnimation.Play();
1154 void PushButton::StopFadeOutAnimation( bool remove )
1156 if( mFadeOutAnimation )
1158 mFadeOutAnimation.Clear();
1159 mFadeOutAnimation.Reset();
1164 Actor& fadeOutButtonImage = GetFadeOutButtonImage();
1165 Actor& fadeOutBackgroundImage = GetFadeOutBackgroundImage();
1167 if( fadeOutButtonImage && fadeOutButtonImage.GetParent() )
1169 fadeOutButtonImage.GetParent().Remove( fadeOutButtonImage );
1172 if( fadeOutBackgroundImage && fadeOutBackgroundImage.GetParent() )
1174 fadeOutBackgroundImage.GetParent().Remove( fadeOutBackgroundImage );
1177 fadeOutButtonImage.Reset();
1178 fadeOutBackgroundImage.Reset();
1182 void PushButton::FadeInImage( Actor& image, float opacity, int priority )
1186 image.SetOpacity( opacity );
1187 if( !image.GetParent() )
1191 Self().Insert( priority, image );
1195 Self().Add( image );
1199 AddToFadeInAnimation( image );
1203 void PushButton::FadeOutImage( ImageLayer layer, Actor& image, float opacity )
1207 Actor& fadeOutButtonImage = GetFadeOutButtonImage();
1208 Actor& fadeOutBackgroundImage = GetFadeOutBackgroundImage();
1210 Actor& actorLayer = ( ( Background == layer ) ? fadeOutBackgroundImage : fadeOutButtonImage );
1213 actorLayer.SetOpacity( opacity );
1215 AddToFadeOutAnimation( actorLayer );
1219 void PushButton::FadeOutAnimationFinished( Dali::Animation& source )
1221 switch( mPaintState )
1223 case UnselectedSelectedTransition:
1225 mPaintState = SelectedState;
1228 case SelectedUnselectedTransition:
1230 mPaintState = UnselectedState;
1233 case UnselectedDisabledTransition:
1235 mPaintState = DisabledUnselectedState;
1238 case DisabledUnselectedTransition:
1240 mPaintState = UnselectedState;
1243 case SelectedDisabledTransition:
1245 mPaintState = DisabledSelectedState;
1248 case DisabledSelectedTransition:
1250 mPaintState = SelectedState;
1259 StopFadeOutAnimation();
1262 void PushButton::FadeInAnimationFinished( Dali::Animation& source )
1264 switch( mPaintState )
1266 case UnselectedSelectedTransition:
1268 mPaintState = SelectedState;
1271 case SelectedUnselectedTransition:
1273 mPaintState = UnselectedState;
1276 case UnselectedDisabledTransition:
1278 mPaintState = DisabledUnselectedState;
1281 case DisabledUnselectedTransition:
1283 mPaintState = UnselectedState;
1286 case SelectedDisabledTransition:
1288 mPaintState = DisabledSelectedState;
1291 case DisabledSelectedTransition:
1293 mPaintState = SelectedState;
1302 StopFadeInAnimation();
1305 } // namespace Internal
1307 } // namespace Toolkit