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>
39 const float TEXT_PADDING = 12.0f;
41 const float LABEL_DEPTH( 0.75f );
42 const float FOREGROUND_DEPTH( 0.5f );
43 const float BACKGROUND_DEPTH( 0.25f );
45 const float ANIMATION_TIME( 0.2f );
49 return Toolkit::PushButton::New();
52 TypeRegistration typeRegistration( typeid(Toolkit::PushButton), typeid(Toolkit::Button), Create );
54 } // unnamed namespace
60 * Find the first image actor in the actor hierarchy
62 ImageActor FindImageActor( Actor root )
64 ImageActor imageActor = ImageActor::DownCast( root );
65 if( !imageActor && root )
67 for( unsigned int i = 0, numChildren = root.GetChildCount(); i < numChildren; ++i )
69 ImageActor childImageActor = FindImageActor( root.GetChildAt( i ) );
72 return childImageActor;
80 } // unnamed namespace
82 Dali::Toolkit::PushButton PushButton::New()
84 // Create the implementation, temporarily owned on stack
85 IntrusivePtr< PushButton > internalPushButton = new PushButton();
87 // Pass ownership to CustomActor
88 Dali::Toolkit::PushButton pushButton( *internalPushButton );
90 // Second-phase init of the implementation
91 // This can only be done after the CustomActor connection has been made...
92 internalPushButton->Initialize();
97 PushButton::PushButton()
100 mPaintState( UnselectedState )
102 SetAnimationTime( ANIMATION_TIME );
105 PushButton::~PushButton()
109 void PushButton::SetButtonImage( Actor image )
111 Actor& buttonImage = GetButtonImage();
112 Actor& fadeOutButtonImage = GetFadeOutButtonImage();
114 switch( mPaintState )
116 case UnselectedState:
118 if( buttonImage && buttonImage.GetParent() )
120 StopFadeOutAnimation();
121 FadeOutImage( Foreground, buttonImage );
125 FadeInImage( buttonImage, 0.0f, 0 );
127 StartFadeOutAnimation();
128 StartFadeInAnimation();
133 Self().Insert( 0, buttonImage );
137 case UnselectedSelectedTransition: // FALLTHROUGH
138 case UnselectedDisabledTransition:
141 if( fadeOutButtonImage )
143 opacity = fadeOutButtonImage.GetCurrentOpacity();
145 StopFadeOutAnimation();
147 // Replaces the button image.
150 Self().Insert( 0, buttonImage );
151 FadeOutImage( Foreground, buttonImage, opacity );
153 StartFadeOutAnimation();
156 case SelectedUnselectedTransition: // FALLTHROUGH
157 case DisabledUnselectedTransition:
159 StopFadeInAnimation();
160 Self().Remove( buttonImage );
164 FadeInImage( buttonImage, 0.0f, 0 );
165 StartFadeInAnimation();
173 buttonImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
174 buttonImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
175 buttonImage.SetPosition( 0.f, 0.f, FOREGROUND_DEPTH );
176 buttonImage.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
177 buttonImage.SetName( "BUTTON_IMAGE" );
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, 0.0f, 0 );
198 StartFadeOutAnimation();
199 StartFadeInAnimation();
203 selectedImage = image;
204 Self().Insert( 0, 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().Insert( 0, 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, 0.0f, 0 );
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.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
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, 0.0f, 0 );
271 StartFadeOutAnimation();
272 StartFadeInAnimation();
276 backgroundImage = image;
277 Self().Insert( 0, 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().Insert( 0, 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, 0.0f, 0 );
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.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
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, 0.0f, 0 );
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, 0.0f, 0 );
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.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
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, 0.0f, 0 );
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, 0.0f, 0 );
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.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
465 void PushButton::OnButtonInitialize()
467 // Push button requires the Leave event.
469 root.SetLeaveRequired( true );
471 // Set resize policy to natural size so that buttons will resize to background images
472 root.SetResizePolicy( USE_NATURAL_SIZE, ALL_DIMENSIONS );
475 void PushButton::OnLabelSet()
477 Actor& label = GetLabel();
481 label.SetAnchorPoint( AnchorPoint::CENTER );
482 label.SetParentOrigin( ParentOrigin::CENTER );
483 label.SetPosition( 0.f, 0.f, LABEL_DEPTH );
484 label.SetSize( mSize );
490 void PushButton::OnSelected( bool selected )
492 Actor& selectedImage = GetSelectedImage();
493 Actor& buttonImage = GetButtonImage();
494 Actor& fadeOutButtonImage = GetFadeOutButtonImage();
496 switch( mPaintState )
498 case UnselectedState:
500 StopFadeOutAnimation();
501 FadeOutImage( Foreground, buttonImage );
502 FadeInImage( selectedImage, 0.0f, 0 );
503 StartFadeOutAnimation();
504 StartFadeInAnimation();
506 if( buttonImage || selectedImage )
508 mPaintState = UnselectedSelectedTransition;
512 mPaintState = SelectedState;
518 StopFadeOutAnimation();
519 FadeOutImage( Foreground, selectedImage );
520 FadeInImage( buttonImage, 0.0f, 0 );
521 StartFadeOutAnimation();
522 StartFadeInAnimation();
524 if( buttonImage || selectedImage )
526 mPaintState = SelectedUnselectedTransition;
530 mPaintState = UnselectedState;
534 case UnselectedSelectedTransition:
537 if( fadeOutButtonImage )
539 opacity = fadeOutButtonImage.GetCurrentOpacity();
541 StopFadeOutAnimation( false );
542 StopFadeInAnimation();
544 FadeOutImage( Foreground, selectedImage, 1.f - opacity );
545 FadeInImage( buttonImage, opacity, 0 );
547 StartFadeOutAnimation();
548 StartFadeInAnimation();
550 if( buttonImage || selectedImage )
552 mPaintState = SelectedUnselectedTransition;
556 mPaintState = UnselectedState;
560 case SelectedUnselectedTransition:
563 if( fadeOutButtonImage )
565 opacity = 1.f - fadeOutButtonImage.GetCurrentOpacity();
567 StopFadeOutAnimation( false );
568 StopFadeInAnimation();
570 FadeOutImage( Foreground, buttonImage, 1.f - opacity );
571 FadeInImage( selectedImage, opacity, 0 );
573 StartFadeOutAnimation();
574 StartFadeInAnimation();
576 if( buttonImage || selectedImage )
578 mPaintState = UnselectedSelectedTransition;
582 mPaintState = SelectedState;
593 void PushButton::OnDisabled( bool disabled )
595 Actor& buttonImage = GetButtonImage();
596 Actor& selectedImage = GetSelectedImage();
597 Actor& backgroundImage = GetBackgroundImage();
598 Actor& disabledImage = GetDisabledImage();
599 Actor& disabledBackgroundImage = GetDisabledBackgroundImage();
600 Actor& fadeOutButtonImage = GetFadeOutButtonImage();
602 switch( mPaintState )
604 case UnselectedState:
608 StopFadeOutAnimation();
609 FadeOutImage( Background, backgroundImage );
610 FadeOutImage( Foreground, buttonImage );
611 FadeInImage( disabledBackgroundImage, 0.0f, 0 );
612 FadeInImage( disabledImage, 0.0f, 0 );
613 StartFadeOutAnimation();
614 StartFadeInAnimation();
616 if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
618 mPaintState = UnselectedDisabledTransition;
622 mPaintState = DisabledUnselectedState;
631 StopFadeOutAnimation();
632 FadeOutImage( Background, backgroundImage );
633 FadeOutImage( Foreground, selectedImage );
634 FadeInImage( disabledBackgroundImage, 0.0f, 0 );
635 FadeInImage( disabledImage, 0.0f, 0 );
636 StartFadeOutAnimation();
637 StartFadeInAnimation();
639 if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
641 mPaintState = SelectedDisabledTransition;
645 mPaintState = DisabledSelectedState;
650 case DisabledUnselectedState:
654 StopFadeOutAnimation();
655 FadeOutImage( Background, disabledBackgroundImage );
656 FadeOutImage( Foreground, disabledImage );
657 FadeInImage( backgroundImage, 0.0f, 0 );
658 FadeInImage( buttonImage, 0.0f, 0 );
659 StartFadeOutAnimation();
660 StartFadeInAnimation();
662 if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
664 mPaintState = DisabledUnselectedTransition;
668 mPaintState = UnselectedState;
673 case DisabledSelectedState:
677 StopFadeOutAnimation();
678 FadeOutImage( Background, disabledBackgroundImage );
679 FadeOutImage( Foreground, disabledImage );
680 FadeInImage( backgroundImage, 0.0f, 0 );
681 FadeInImage( selectedImage, 0.0f, 0 );
682 StartFadeOutAnimation();
683 StartFadeInAnimation();
685 if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
687 mPaintState = DisabledSelectedTransition;
691 mPaintState = SelectedState;
696 case UnselectedSelectedTransition:
701 if( fadeOutButtonImage )
703 opacity = fadeOutButtonImage.GetCurrentOpacity();
705 StopFadeOutAnimation();
706 StopFadeInAnimation();
708 FadeOutImage( Foreground, selectedImage, 1.f - opacity );
709 FadeOutImage( Background, backgroundImage );
711 FadeInImage( disabledImage, 0.0f, 0 );
712 FadeInImage( disabledBackgroundImage, 0.0f, 0 );
714 StartFadeOutAnimation();
715 StartFadeInAnimation();
717 if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
719 mPaintState = SelectedDisabledTransition;
723 mPaintState = DisabledSelectedState;
728 case SelectedUnselectedTransition:
733 if( fadeOutButtonImage )
735 opacity = fadeOutButtonImage.GetCurrentOpacity();
737 StopFadeOutAnimation();
738 StopFadeInAnimation();
740 FadeOutImage( Foreground, buttonImage, 1.f - opacity );
741 FadeOutImage( Background, backgroundImage );
743 FadeInImage( disabledImage, 0.0f, 0);
744 FadeInImage( disabledBackgroundImage, 0.0f, 0 );
746 StartFadeOutAnimation();
747 StartFadeInAnimation();
749 if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
751 mPaintState = UnselectedDisabledTransition;
755 mPaintState = DisabledUnselectedState;
760 case UnselectedDisabledTransition:
765 if( fadeOutButtonImage )
767 opacity = fadeOutButtonImage.GetCurrentOpacity();
769 StopFadeOutAnimation( false );
770 StopFadeInAnimation();
772 FadeOutImage( Foreground, disabledImage, 1.f - opacity );
773 FadeOutImage( Background, disabledBackgroundImage, 1.f - opacity );
774 FadeInImage( buttonImage, opacity, 0 );
775 FadeInImage( backgroundImage, opacity, 0 );
777 StartFadeOutAnimation();
778 StartFadeInAnimation();
780 if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
782 mPaintState = DisabledUnselectedTransition;
786 mPaintState = UnselectedState;
791 case DisabledUnselectedTransition:
796 if( fadeOutButtonImage )
798 opacity = fadeOutButtonImage.GetCurrentOpacity();
800 StopFadeOutAnimation( false );
801 StopFadeInAnimation();
803 FadeOutImage( Foreground, buttonImage, 1.f - opacity );
804 FadeOutImage( Background, backgroundImage, 1.f - opacity );
805 FadeInImage( disabledImage, opacity, 0 );
806 FadeInImage( disabledBackgroundImage, opacity, 0 );
808 StartFadeOutAnimation();
809 StartFadeInAnimation();
811 if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
813 mPaintState = UnselectedDisabledTransition;
817 mPaintState = DisabledUnselectedState;
822 case SelectedDisabledTransition:
827 if( fadeOutButtonImage )
829 opacity = fadeOutButtonImage.GetCurrentOpacity();
831 StopFadeOutAnimation( false );
832 StopFadeInAnimation();
834 FadeOutImage( Foreground, disabledImage, 1.f - opacity );
835 FadeOutImage( Background, disabledBackgroundImage, 1.f - opacity );
836 FadeInImage( selectedImage, opacity, 0 );
837 FadeInImage( backgroundImage, opacity, 0 );
839 StartFadeOutAnimation();
840 StartFadeInAnimation();
842 if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
844 mPaintState = DisabledSelectedTransition;
848 mPaintState = SelectedState;
853 case DisabledSelectedTransition:
858 if( fadeOutButtonImage )
860 opacity = fadeOutButtonImage.GetCurrentOpacity();
862 StopFadeOutAnimation( false );
863 StopFadeInAnimation();
865 FadeOutImage( Foreground, selectedImage, 1.f - opacity );
866 FadeOutImage( Background, backgroundImage, 1.f - opacity );
867 FadeInImage( disabledImage, opacity, 0 );
868 FadeInImage( disabledBackgroundImage, opacity, 0 );
870 StartFadeOutAnimation();
871 StartFadeInAnimation();
873 if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
875 mPaintState = SelectedDisabledTransition;
879 mPaintState = DisabledSelectedState;
889 void PushButton::OnPressed()
891 Actor& selectedImage = GetSelectedImage();
892 Actor& buttonImage = GetButtonImage();
893 Actor& fadeOutButtonImage = GetFadeOutButtonImage();
895 switch( mPaintState )
897 case UnselectedState:
899 StopFadeOutAnimation();
900 FadeOutImage( Foreground, buttonImage );
901 FadeInImage( selectedImage, 0.0f, 0 );
902 StartFadeOutAnimation();
903 StartFadeInAnimation();
905 if( buttonImage || selectedImage )
907 mPaintState = UnselectedSelectedTransition;
911 mPaintState = SelectedState;
915 case UnselectedSelectedTransition:
917 if( !IsAutoRepeating() )
919 mPaintState = SelectedUnselectedTransition;
923 case SelectedUnselectedTransition:
926 if( fadeOutButtonImage )
928 opacity = fadeOutButtonImage.GetCurrentOpacity();
930 StopFadeOutAnimation( false );
931 StopFadeInAnimation();
933 FadeOutImage( Foreground, buttonImage, 1.f - opacity );
934 FadeInImage( selectedImage, opacity, 0 );
936 StartFadeOutAnimation();
937 StartFadeInAnimation();
939 if( buttonImage || selectedImage )
941 mPaintState = UnselectedSelectedTransition;
945 mPaintState = SelectedState;
954 void PushButton::OnReleased()
956 Actor& selectedImage = GetSelectedImage();
957 Actor& buttonImage = GetButtonImage();
958 Actor& fadeOutButtonImage = GetFadeOutButtonImage();
960 switch( mPaintState )
964 StopFadeOutAnimation();
965 FadeOutImage( Foreground, selectedImage );
966 FadeInImage( buttonImage, 0.0f, 0 );
967 StartFadeOutAnimation();
968 StartFadeInAnimation();
970 if( buttonImage || selectedImage )
972 mPaintState = SelectedUnselectedTransition;
976 mPaintState = UnselectedState;
980 case UnselectedSelectedTransition:
983 if( fadeOutButtonImage )
985 opacity = fadeOutButtonImage.GetCurrentOpacity();
987 StopFadeOutAnimation( false );
988 StopFadeInAnimation();
990 FadeOutImage( Foreground, selectedImage, 1.f - opacity );
991 FadeInImage( buttonImage, opacity, 0 );
993 StartFadeOutAnimation();
994 StartFadeInAnimation();
996 if( buttonImage || selectedImage )
998 mPaintState = SelectedUnselectedTransition;
1002 mPaintState = UnselectedState;
1013 void PushButton::OnClicked()
1018 void PushButton::OnControlSizeSet( const Vector3& targetSize )
1020 if( targetSize != mSize )
1024 Actor& label = GetLabel();
1028 label.SetSize( mSize );
1033 Vector3 PushButton::GetNaturalSize()
1035 Vector3 size = Control::GetNaturalSize();
1037 const bool widthIsZero = EqualsZero( size.width );
1038 const bool heightIsZero = EqualsZero( size.height );
1040 if( widthIsZero || heightIsZero )
1042 // If background and background not scale9 try get size from that
1043 ImageActor imageActor = FindImageActor( GetButtonImage() );
1044 if( imageActor && imageActor.GetStyle() != ImageActor::STYLE_NINE_PATCH )
1046 Vector3 imageSize = imageActor.GetNaturalSize();
1050 size.width = imageSize.width;
1055 size.height = imageSize.height;
1059 ImageActor backgroundImageActor = FindImageActor( GetBackgroundImage() );
1060 if( backgroundImageActor && backgroundImageActor.GetStyle() != ImageActor::STYLE_NINE_PATCH )
1062 Vector3 imageSize = backgroundImageActor.GetNaturalSize();
1066 size.width = std::max( size.width, imageSize.width );
1071 size.height = std::max( size.height, imageSize.height );
1079 Actor& PushButton::GetFadeOutButtonImage()
1081 return mFadeOutButtonContent;
1084 Actor& PushButton::GetFadeOutBackgroundImage()
1086 return mFadeOutBackgroundContent;
1089 void PushButton::AddToFadeInAnimation( const Actor& actor )
1091 if( !mFadeInAnimation )
1093 mFadeInAnimation = Dali::Animation::New( GetAnimationTime() );
1096 mFadeInAnimation.OpacityTo( actor, 1.f );
1099 void PushButton::StartFadeInAnimation()
1101 if( mFadeInAnimation )
1103 mFadeInAnimation.FinishedSignal().Connect( this, &PushButton::FadeInAnimationFinished );
1104 mFadeInAnimation.Play();
1108 void PushButton::StopFadeInAnimation()
1110 if( mFadeInAnimation )
1112 mFadeInAnimation.Clear();
1113 mFadeInAnimation.Reset();
1117 void PushButton::AddToFadeOutAnimation( const Actor& actor )
1119 if( !mFadeOutAnimation )
1121 mFadeOutAnimation = Dali::Animation::New( GetAnimationTime() );
1124 mFadeOutAnimation.OpacityTo( actor, 0.f );
1127 void PushButton::StartFadeOutAnimation()
1129 if( mFadeOutAnimation )
1131 mFadeOutAnimation.FinishedSignal().Connect( this, &PushButton::FadeOutAnimationFinished );
1132 mFadeOutAnimation.Play();
1136 void PushButton::StopFadeOutAnimation( bool remove )
1138 if( mFadeOutAnimation )
1140 mFadeOutAnimation.Clear();
1141 mFadeOutAnimation.Reset();
1146 Actor& fadeOutButtonImage = GetFadeOutButtonImage();
1147 Actor& fadeOutBackgroundImage = GetFadeOutBackgroundImage();
1149 if( fadeOutButtonImage && fadeOutButtonImage.GetParent() )
1151 fadeOutButtonImage.GetParent().Remove( fadeOutButtonImage );
1154 if( fadeOutBackgroundImage && fadeOutBackgroundImage.GetParent() )
1156 fadeOutBackgroundImage.GetParent().Remove( fadeOutBackgroundImage );
1159 fadeOutButtonImage.Reset();
1160 fadeOutBackgroundImage.Reset();
1164 void PushButton::FadeInImage( Actor& image, float opacity, int priority )
1168 image.SetOpacity( opacity );
1169 if( !image.GetParent() )
1173 Self().Insert( priority, image );
1177 Self().Add( image );
1181 AddToFadeInAnimation( image );
1185 void PushButton::FadeOutImage( ImageLayer layer, Actor& image, float opacity )
1189 Actor& fadeOutButtonImage = GetFadeOutButtonImage();
1190 Actor& fadeOutBackgroundImage = GetFadeOutBackgroundImage();
1192 Actor& actorLayer = ( ( Background == layer ) ? fadeOutBackgroundImage : fadeOutButtonImage );
1195 actorLayer.SetOpacity( opacity );
1197 AddToFadeOutAnimation( actorLayer );
1201 void PushButton::FadeOutAnimationFinished( Dali::Animation& source )
1203 switch( mPaintState )
1205 case UnselectedSelectedTransition:
1207 mPaintState = SelectedState;
1210 case SelectedUnselectedTransition:
1212 mPaintState = UnselectedState;
1215 case UnselectedDisabledTransition:
1217 mPaintState = DisabledUnselectedState;
1220 case DisabledUnselectedTransition:
1222 mPaintState = UnselectedState;
1225 case SelectedDisabledTransition:
1227 mPaintState = DisabledSelectedState;
1230 case DisabledSelectedTransition:
1232 mPaintState = SelectedState;
1241 StopFadeOutAnimation();
1244 void PushButton::FadeInAnimationFinished( Dali::Animation& source )
1246 switch( mPaintState )
1248 case UnselectedSelectedTransition:
1250 mPaintState = SelectedState;
1253 case SelectedUnselectedTransition:
1255 mPaintState = UnselectedState;
1258 case UnselectedDisabledTransition:
1260 mPaintState = DisabledUnselectedState;
1263 case DisabledUnselectedTransition:
1265 mPaintState = UnselectedState;
1268 case SelectedDisabledTransition:
1270 mPaintState = DisabledSelectedState;
1273 case DisabledSelectedTransition:
1275 mPaintState = SelectedState;
1284 StopFadeInAnimation();
1287 } // namespace Internal
1289 } // namespace Toolkit