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.
20 #include "push-button-default-painter-impl.h"
24 #include <dali/public-api/actors/image-actor.h>
25 #include <dali-toolkit/public-api/controls/text-view/text-view.h>
26 #include <dali-toolkit/public-api/controls/buttons/push-button.h>
27 #include <dali/public-api/object/ref-object.h>
29 #include "push-button-impl.h"
44 const float LABEL_DEPTH( 0.75f );
45 const float FOREGROUND_DEPTH( 0.5f );
46 const float BACKGROUND_DEPTH( 0.25f );
48 const float ANIMATION_TIME( 0.2f );
50 inline Toolkit::Internal::PushButton& GetPushButtonImpl( Toolkit::Button& button )
52 DALI_ASSERT_ALWAYS( button );
54 Dali::RefObject& handle = button.GetImplementation();
56 return static_cast<Toolkit::Internal::PushButton&>( handle );
59 inline const Toolkit::Internal::PushButton& GetPushButtonImpl( const Toolkit::Button& button )
61 DALI_ASSERT_ALWAYS( button );
63 const Dali::RefObject& handle = button.GetImplementation();
65 return static_cast<const Toolkit::Internal::PushButton&>( handle );
70 PushButtonDefaultPainter::PushButtonDefaultPainter()
71 : PushButtonPainter(),
72 mAutoRepeating( false ),
74 mPaintState( ReleasedState ),
76 mAnimationTime( ANIMATION_TIME ),
81 PushButtonDefaultPainter::~PushButtonDefaultPainter()
83 if( mFadeInAnimation )
85 mFadeInAnimation.Clear();
87 if( mFadeOutAnimation )
89 mFadeOutAnimation.Clear();
93 void PushButtonDefaultPainter::SetButtonImage( Toolkit::PushButton& pushButton, Actor image )
95 Toolkit::Internal::PushButton& pushButtonImpl = GetImplementation( pushButton );
96 Actor& buttonImage = pushButtonImpl.GetButtonImage();
97 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
103 if( buttonImage && buttonImage.GetParent() )
105 StopFadeOutAnimation( pushButton );
106 FadeOutImage( pushButton, Foreground, buttonImage );
110 FadeInImage( pushButton, buttonImage );
112 StartFadeOutAnimation( pushButton );
113 StartFadeInAnimation();
118 pushButton.Add( buttonImage );
122 case ReleasedPressedTransition: // FALLTHROUGH
123 case ReleasedDimmedTransition:
126 if( fadeOutButtonImage )
128 opacity = fadeOutButtonImage.GetCurrentOpacity();
130 StopFadeOutAnimation( pushButton );
132 // Replaces the button image.
135 pushButton.Add( buttonImage );
136 FadeOutImage( pushButton, Foreground, buttonImage, opacity );
138 StartFadeOutAnimation( pushButton );
141 case PressedReleasedTransition: // FALLTHROUGH
142 case DimmedReleasedTransition:
144 StopFadeInAnimation();
145 pushButton.Remove( buttonImage );
149 FadeInImage( pushButton, buttonImage );
150 StartFadeInAnimation();
158 buttonImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
159 buttonImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
160 ApplyConstraint( buttonImage, FOREGROUND_DEPTH );
163 void PushButtonDefaultPainter::SetBackgroundImage( Toolkit::PushButton& pushButton, Actor image )
165 Toolkit::Internal::PushButton& pushButtonImpl = GetImplementation( pushButton );
166 Actor& backgroundImage = pushButtonImpl.GetBackgroundImage();
167 Actor& fadeOutBackgroundImage = pushButtonImpl.GetFadeOutBackgroundImage();
169 switch( mPaintState )
171 case ReleasedState: // FALLTHROUGH
173 case ReleasedPressedTransition:
174 case PressedReleasedTransition:
176 if( backgroundImage && backgroundImage.GetParent() )
178 StopFadeOutAnimation( pushButton );
179 FadeOutImage( pushButton, Background, backgroundImage );
181 backgroundImage = image;
183 FadeInImage( pushButton, backgroundImage );
185 StartFadeOutAnimation( pushButton );
186 StartFadeInAnimation();
190 backgroundImage = image;
191 pushButton.Add( backgroundImage );
195 case ReleasedDimmedTransition: // FALLTHROUGH
196 case PressedDimmedTransition:
199 if( fadeOutBackgroundImage )
201 opacity = fadeOutBackgroundImage.GetCurrentOpacity();
203 StopFadeOutAnimation( pushButton );
205 // Replaces the button image.
206 backgroundImage = image;
208 pushButton.Add( backgroundImage );
209 FadeOutImage( pushButton, Background, backgroundImage, opacity );
211 StartFadeOutAnimation( pushButton );
214 case DimmedReleasedTransition: // FALLTHROUGH
215 case DimmedPressedTransition:
217 StopFadeInAnimation();
218 pushButton.Remove( backgroundImage );
220 backgroundImage = image;
222 FadeInImage( pushButton, backgroundImage );
223 StartFadeInAnimation();
227 backgroundImage = image;
231 backgroundImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
232 backgroundImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
233 ApplyConstraint( backgroundImage, BACKGROUND_DEPTH );
236 void PushButtonDefaultPainter::SetPressedImage( Toolkit::PushButton& pushButton, Actor image )
238 Toolkit::Internal::PushButton& pushButtonImpl = GetImplementation( pushButton );
239 Actor& pressedImage = pushButtonImpl.GetPressedImage();
240 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
242 switch( mPaintState )
246 if( pressedImage && pressedImage.GetParent() )
248 StopFadeOutAnimation( pushButton );
249 FadeOutImage( pushButton, Foreground, pressedImage );
251 pressedImage = image;
253 FadeInImage( pushButton, pressedImage );
255 StartFadeOutAnimation( pushButton );
256 StartFadeInAnimation();
260 pressedImage = image;
261 pushButton.Add( pressedImage );
265 case PressedReleasedTransition: // FALLTHROUGH
266 case PressedDimmedTransition:
269 if( fadeOutButtonImage )
271 opacity = fadeOutButtonImage.GetCurrentOpacity();
273 StopFadeOutAnimation( pushButton );
275 // Replaces the button image.
276 pressedImage = image;
278 pushButton.Add( pressedImage );
279 FadeOutImage( pushButton, Foreground, pressedImage, opacity );
281 StartFadeOutAnimation( pushButton );
284 case ReleasedPressedTransition: // FALLTHROUGH
285 case DimmedPressedTransition:
287 StopFadeInAnimation();
288 pushButton.Remove( pressedImage );
290 pressedImage = image;
292 FadeInImage( pushButton, pressedImage );
293 StartFadeInAnimation();
297 pressedImage = image;
301 pressedImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
302 pressedImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
303 ApplyConstraint( pressedImage, FOREGROUND_DEPTH );
306 void PushButtonDefaultPainter::SetDimmedImage( Toolkit::PushButton& pushButton, Actor image )
308 Toolkit::Internal::PushButton& pushButtonImpl = GetImplementation( pushButton );
309 Actor& dimmedImage = pushButtonImpl.GetDimmedImage();
310 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
312 switch( mPaintState )
314 case DimmedReleasedState: // FALLTHROUGH
315 case DimmedPressedState:
317 if( dimmedImage && dimmedImage.GetParent() )
319 StopFadeOutAnimation( pushButton );
320 FadeOutImage( pushButton, Foreground, dimmedImage );
324 FadeInImage( pushButton, dimmedImage );
326 StartFadeOutAnimation( pushButton );
327 StartFadeInAnimation();
332 pushButton.Add( dimmedImage );
336 case ReleasedDimmedTransition: // FALLTHROUGH
337 case PressedDimmedTransition:
339 StopFadeInAnimation();
340 pushButton.Remove( dimmedImage );
344 FadeInImage( pushButton, dimmedImage );
345 StartFadeInAnimation();
348 case DimmedReleasedTransition: // FALLTHROUGH
349 case DimmedPressedTransition:
352 if( fadeOutButtonImage )
354 opacity = fadeOutButtonImage.GetCurrentOpacity();
356 StopFadeOutAnimation( pushButton );
358 // Replaces the button image.
361 pushButton.Add( dimmedImage );
362 FadeOutImage( pushButton, Foreground, dimmedImage, opacity );
364 StartFadeOutAnimation( pushButton );
372 dimmedImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
373 dimmedImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
374 ApplyConstraint( dimmedImage, FOREGROUND_DEPTH );
377 void PushButtonDefaultPainter::SetDimmedBackgroundImage( Toolkit::PushButton& pushButton, Actor image )
379 Toolkit::Internal::PushButton& pushButtonImpl = GetImplementation( pushButton );
380 Actor& dimmedBackgroundImage = pushButtonImpl.GetDimmedBackgroundImage();
381 Actor& fadeOutBackgroundImage = pushButtonImpl.GetFadeOutBackgroundImage();
383 switch( mPaintState )
385 case DimmedReleasedState: // FALLTHROUGH
386 case DimmedPressedState:
388 if( dimmedBackgroundImage && dimmedBackgroundImage.GetParent() )
390 StopFadeOutAnimation( pushButton );
391 FadeOutImage( pushButton, Background, dimmedBackgroundImage );
393 dimmedBackgroundImage = image;
395 FadeInImage( pushButton, dimmedBackgroundImage );
397 StartFadeOutAnimation( pushButton );
398 StartFadeInAnimation();
402 dimmedBackgroundImage = image;
403 pushButton.Add( dimmedBackgroundImage );
407 case ReleasedDimmedTransition: // FALLTHROUGH
408 case PressedDimmedTransition:
410 StopFadeInAnimation();
411 pushButton.Remove( dimmedBackgroundImage );
413 dimmedBackgroundImage = image;
415 FadeInImage( pushButton, dimmedBackgroundImage );
416 StartFadeInAnimation();
419 case DimmedReleasedTransition: // FALLTHROUGH
420 case DimmedPressedTransition:
423 if( fadeOutBackgroundImage )
425 opacity = fadeOutBackgroundImage.GetCurrentOpacity();
427 StopFadeOutAnimation( pushButton );
429 // Replaces the button image.
430 dimmedBackgroundImage = image;
432 pushButton.Add( dimmedBackgroundImage );
433 FadeOutImage( pushButton, Background, dimmedBackgroundImage, opacity );
435 StartFadeOutAnimation( pushButton );
439 dimmedBackgroundImage = image;
443 dimmedBackgroundImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
444 dimmedBackgroundImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
445 ApplyConstraint( dimmedBackgroundImage, BACKGROUND_DEPTH );
448 void PushButtonDefaultPainter::SetLabelText( Toolkit::PushButton& pushButton, Actor text )
450 Toolkit::Internal::PushButton& pushButtonImpl = GetImplementation( pushButton );
451 Actor& label = pushButtonImpl.GetLabel();
453 if( label && label.GetParent() )
455 label.GetParent().Remove( label );
459 label.SetAnchorPoint( AnchorPoint::CENTER );
460 label.SetParentOrigin( ParentOrigin::CENTER );
462 label.SetPosition( 0.f, 0.f, LABEL_DEPTH );
463 label.SetSize( mSize );
465 pushButton.Add( label );
468 void PushButtonDefaultPainter::Initialize( Toolkit::Button& button )
470 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
471 Actor& buttonImage = pushButtonImpl.GetButtonImage();
472 Actor& pressedImage = pushButtonImpl.GetPressedImage();
473 Actor& backgroundImage = pushButtonImpl.GetBackgroundImage();
474 Actor& dimmedImage = pushButtonImpl.GetDimmedImage();
475 Actor& dimmedBackgroundImage = pushButtonImpl.GetDimmedBackgroundImage();
476 Actor& label = pushButtonImpl.GetLabel();
478 Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
482 SetButtonImage( pushButton, buttonImage );
485 if( backgroundImage )
487 SetBackgroundImage( pushButton, backgroundImage );
492 SetPressedImage( pushButton, pressedImage );
497 SetDimmedImage( pushButton, dimmedImage );
500 if( dimmedBackgroundImage )
502 SetDimmedBackgroundImage( pushButton, dimmedBackgroundImage );
507 SetLabelText( pushButton, label );
510 SetDimmed( pushButton, mDimmed );
513 void PushButtonDefaultPainter::SetSize( Toolkit::Button& button, const Vector3& size )
519 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
520 Actor& buttonImage = pushButtonImpl.GetButtonImage();
521 Actor& pressedImage = pushButtonImpl.GetPressedImage();
522 Actor& backgroundImage = pushButtonImpl.GetBackgroundImage();
523 Actor& dimmedImage = pushButtonImpl.GetDimmedImage();
524 Actor& dimmedBackgroundImage = pushButtonImpl.GetDimmedBackgroundImage();
525 Actor& label = pushButtonImpl.GetLabel();
527 ApplyConstraint( buttonImage, FOREGROUND_DEPTH );
528 ApplyConstraint( backgroundImage, BACKGROUND_DEPTH );
529 ApplyConstraint( pressedImage, FOREGROUND_DEPTH );
530 ApplyConstraint( dimmedImage, FOREGROUND_DEPTH );
531 ApplyConstraint( dimmedBackgroundImage, BACKGROUND_DEPTH );
535 label.SetPosition( 0.f, 0.f, LABEL_DEPTH );
536 label.SetSize( mSize );
541 void PushButtonDefaultPainter::SetDimmed( Toolkit::Button& button, bool dimmed )
543 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
544 Actor& buttonImage = pushButtonImpl.GetButtonImage();
545 Actor& pressedImage = pushButtonImpl.GetPressedImage();
546 Actor& backgroundImage = pushButtonImpl.GetBackgroundImage();
547 Actor& dimmedImage = pushButtonImpl.GetDimmedImage();
548 Actor& dimmedBackgroundImage = pushButtonImpl.GetDimmedBackgroundImage();
549 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
551 Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
555 switch( mPaintState )
561 StopFadeOutAnimation( pushButton );
562 FadeOutImage( pushButton, Background, backgroundImage );
563 FadeOutImage( pushButton, Foreground, buttonImage );
564 FadeInImage( pushButton, dimmedBackgroundImage );
565 FadeInImage( pushButton, dimmedImage );
566 StartFadeOutAnimation( pushButton );
567 StartFadeInAnimation();
569 if( buttonImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
571 mPaintState = ReleasedDimmedTransition;
575 mPaintState = DimmedReleasedState;
584 StopFadeOutAnimation( pushButton );
585 FadeOutImage( pushButton, Background, backgroundImage );
586 FadeOutImage( pushButton, Foreground, pressedImage );
587 FadeInImage( pushButton, dimmedBackgroundImage );
588 FadeInImage( pushButton, dimmedImage );
589 StartFadeOutAnimation( pushButton );
590 StartFadeInAnimation();
592 if( pressedImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
594 mPaintState = PressedDimmedTransition;
598 mPaintState = DimmedPressedState;
603 case DimmedReleasedState:
607 StopFadeOutAnimation( pushButton );
608 FadeOutImage( pushButton, Background, dimmedBackgroundImage );
609 FadeOutImage( pushButton, Foreground, dimmedImage );
610 FadeInImage( pushButton, backgroundImage );
611 FadeInImage( pushButton, buttonImage );
612 StartFadeOutAnimation( pushButton );
613 StartFadeInAnimation();
615 if( buttonImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
617 mPaintState = DimmedReleasedTransition;
621 mPaintState = ReleasedState;
626 case DimmedPressedState:
630 StopFadeOutAnimation( pushButton );
631 FadeOutImage( pushButton, Background, dimmedBackgroundImage );
632 FadeOutImage( pushButton, Foreground, dimmedImage );
633 FadeInImage( pushButton, backgroundImage );
634 FadeInImage( pushButton, pressedImage );
635 StartFadeOutAnimation( pushButton );
636 StartFadeInAnimation();
638 if( pressedImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
640 mPaintState = DimmedPressedTransition;
644 mPaintState = PressedState;
649 case ReleasedPressedTransition:
654 if( fadeOutButtonImage )
656 opacity = fadeOutButtonImage.GetCurrentOpacity();
658 StopFadeOutAnimation( pushButton );
659 StopFadeInAnimation();
661 FadeOutImage( pushButton, Foreground, pressedImage, 1.f - opacity );
662 FadeOutImage( pushButton, Background, backgroundImage );
664 FadeInImage( pushButton, dimmedImage );
665 FadeInImage( pushButton, dimmedBackgroundImage );
667 StartFadeOutAnimation( pushButton );
668 StartFadeInAnimation();
670 if( pressedImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
672 mPaintState = PressedDimmedTransition;
676 mPaintState = DimmedPressedState;
681 case PressedReleasedTransition:
686 if( fadeOutButtonImage )
688 opacity = fadeOutButtonImage.GetCurrentOpacity();
690 StopFadeOutAnimation( pushButton );
691 StopFadeInAnimation();
693 FadeOutImage( pushButton, Foreground, buttonImage, 1.f - opacity );
694 FadeOutImage( pushButton, Background, backgroundImage );
696 FadeInImage( pushButton, dimmedImage );
697 FadeInImage( pushButton, dimmedBackgroundImage );
699 StartFadeOutAnimation( pushButton );
700 StartFadeInAnimation();
702 if( buttonImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
704 mPaintState = ReleasedDimmedTransition;
708 mPaintState = DimmedReleasedState;
713 case ReleasedDimmedTransition:
718 if( fadeOutButtonImage )
720 opacity = fadeOutButtonImage.GetCurrentOpacity();
722 StopFadeOutAnimation( pushButton, false );
723 StopFadeInAnimation();
725 FadeOutImage( pushButton, Foreground, dimmedImage, 1.f - opacity );
726 FadeOutImage( pushButton, Background, dimmedBackgroundImage, 1.f - opacity );
727 FadeInImage( pushButton, buttonImage, opacity );
728 FadeInImage( pushButton, backgroundImage, opacity );
730 StartFadeOutAnimation( pushButton );
731 StartFadeInAnimation();
733 if( buttonImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
735 mPaintState = DimmedReleasedTransition;
739 mPaintState = ReleasedState;
744 case DimmedReleasedTransition:
749 if( fadeOutButtonImage )
751 opacity = fadeOutButtonImage.GetCurrentOpacity();
753 StopFadeOutAnimation( pushButton, false );
754 StopFadeInAnimation();
756 FadeOutImage( pushButton, Foreground, buttonImage, 1.f - opacity );
757 FadeOutImage( pushButton, Background, backgroundImage, 1.f - opacity );
758 FadeInImage( pushButton, dimmedImage, opacity );
759 FadeInImage( pushButton, dimmedBackgroundImage, opacity );
761 StartFadeOutAnimation( pushButton );
762 StartFadeInAnimation();
764 if( buttonImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
766 mPaintState = ReleasedDimmedTransition;
770 mPaintState = DimmedReleasedState;
775 case PressedDimmedTransition:
780 if( fadeOutButtonImage )
782 opacity = fadeOutButtonImage.GetCurrentOpacity();
784 StopFadeOutAnimation( pushButton, false );
785 StopFadeInAnimation();
787 FadeOutImage( pushButton, Foreground, dimmedImage, 1.f - opacity );
788 FadeOutImage( pushButton, Background, dimmedBackgroundImage, 1.f - opacity );
789 FadeInImage( pushButton, pressedImage, opacity );
790 FadeInImage( pushButton, backgroundImage, opacity );
792 StartFadeOutAnimation( pushButton );
793 StartFadeInAnimation();
795 if( pressedImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
797 mPaintState = DimmedPressedTransition;
801 mPaintState = PressedState;
806 case DimmedPressedTransition:
811 if( fadeOutButtonImage )
813 opacity = fadeOutButtonImage.GetCurrentOpacity();
815 StopFadeOutAnimation( pushButton, false );
816 StopFadeInAnimation();
818 FadeOutImage( pushButton, Foreground, pressedImage, 1.f - opacity );
819 FadeOutImage( pushButton, Background, backgroundImage, 1.f - opacity );
820 FadeInImage( pushButton, dimmedImage, opacity );
821 FadeInImage( pushButton, dimmedBackgroundImage, opacity );
823 StartFadeOutAnimation( pushButton );
824 StartFadeInAnimation();
826 if( pressedImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
828 mPaintState = PressedDimmedTransition;
832 mPaintState = DimmedPressedState;
842 void PushButtonDefaultPainter::SetAnimationTime( float animationTime )
844 mAnimationTime = animationTime;
847 float PushButtonDefaultPainter::GetAnimationTime() const
849 return mAnimationTime;
852 void PushButtonDefaultPainter::SetAutoRepeating( bool autorepeating )
854 mAutoRepeating = autorepeating;
857 void PushButtonDefaultPainter::Pressed( Toolkit::PushButton& button )
859 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
860 Actor& pressedImage = pushButtonImpl.GetPressedImage();
861 Actor& buttonImage = pushButtonImpl.GetButtonImage();
862 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
864 switch( mPaintState )
868 StopFadeOutAnimation( button );
869 FadeOutImage( button, Foreground, buttonImage );
870 FadeInImage( button, pressedImage );
871 StartFadeOutAnimation( button );
872 StartFadeInAnimation();
874 if( buttonImage || pressedImage )
876 mPaintState = ReleasedPressedTransition;
880 mPaintState = PressedState;
884 case ReleasedPressedTransition:
886 if( !mAutoRepeating )
888 mPaintState = PressedReleasedTransition;
892 case PressedReleasedTransition:
895 if( fadeOutButtonImage )
897 opacity = fadeOutButtonImage.GetCurrentOpacity();
899 StopFadeOutAnimation( button, false );
900 StopFadeInAnimation();
902 FadeOutImage( button, Foreground, buttonImage, 1.f - opacity );
903 FadeInImage( button, pressedImage, opacity );
905 StartFadeOutAnimation( button );
906 StartFadeInAnimation();
908 if( buttonImage || pressedImage )
910 mPaintState = ReleasedPressedTransition;
914 mPaintState = PressedState;
923 void PushButtonDefaultPainter::Released( Toolkit::PushButton& button )
925 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
926 Actor& pressedImage = pushButtonImpl.GetPressedImage();
927 Actor& buttonImage = pushButtonImpl.GetButtonImage();
928 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
930 switch( mPaintState )
934 StopFadeOutAnimation( button );
935 FadeOutImage( button, Foreground, pressedImage );
936 FadeInImage( button, buttonImage );
937 StartFadeOutAnimation( button );
938 StartFadeInAnimation();
940 if( buttonImage || pressedImage )
942 mPaintState = PressedReleasedTransition;
946 mPaintState = ReleasedState;
950 case ReleasedPressedTransition:
953 if( fadeOutButtonImage )
955 opacity = fadeOutButtonImage.GetCurrentOpacity();
957 StopFadeOutAnimation( button, false );
958 StopFadeInAnimation();
960 FadeOutImage( button, Foreground, pressedImage, 1.f - opacity );
961 FadeInImage( button, buttonImage, opacity );
963 StartFadeOutAnimation( button );
964 StartFadeInAnimation();
966 if( buttonImage || pressedImage )
968 mPaintState = PressedReleasedTransition;
972 mPaintState = ReleasedState;
983 void PushButtonDefaultPainter::Clicked( Toolkit::PushButton& button )
988 void PushButtonDefaultPainter::Toggled( Toolkit::PushButton& button )
990 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
991 Actor& pressedImage = pushButtonImpl.GetPressedImage();
992 Actor& buttonImage = pushButtonImpl.GetButtonImage();
993 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
995 switch( mPaintState )
999 StopFadeOutAnimation( button );
1000 FadeOutImage( button, Foreground, buttonImage );
1001 FadeInImage( button, pressedImage );
1002 StartFadeOutAnimation( button );
1003 StartFadeInAnimation();
1005 if( buttonImage || pressedImage )
1007 mPaintState = ReleasedPressedTransition;
1011 mPaintState = PressedState;
1017 StopFadeOutAnimation( button );
1018 FadeOutImage( button, Foreground, pressedImage );
1019 FadeInImage( button, buttonImage );
1020 StartFadeOutAnimation( button );
1021 StartFadeInAnimation();
1023 if( buttonImage || pressedImage )
1025 mPaintState = PressedReleasedTransition;
1029 mPaintState = ReleasedState;
1033 case ReleasedPressedTransition:
1035 float opacity = 1.f;
1036 if( fadeOutButtonImage )
1038 opacity = fadeOutButtonImage.GetCurrentOpacity();
1040 StopFadeOutAnimation( button, false );
1041 StopFadeInAnimation();
1043 FadeOutImage( button, Foreground, pressedImage, 1.f - opacity );
1044 FadeInImage( button, buttonImage, opacity );
1046 StartFadeOutAnimation( button );
1047 StartFadeInAnimation();
1049 if( buttonImage || pressedImage )
1051 mPaintState = PressedReleasedTransition;
1055 mPaintState = ReleasedState;
1059 case PressedReleasedTransition:
1061 float opacity = 0.f;
1062 if( fadeOutButtonImage )
1064 opacity = 1.f - fadeOutButtonImage.GetCurrentOpacity();
1066 StopFadeOutAnimation( button, false );
1067 StopFadeInAnimation();
1069 FadeOutImage( button, Foreground, buttonImage, 1.f - opacity );
1070 FadeInImage( button, pressedImage, opacity );
1072 StartFadeOutAnimation( button );
1073 StartFadeInAnimation();
1075 if( buttonImage || pressedImage )
1077 mPaintState = ReleasedPressedTransition;
1081 mPaintState = PressedState;
1092 void PushButtonDefaultPainter::ApplyConstraint( Actor& actor, float depth )
1096 actor.SetPosition( 0.f, 0.f, depth );
1097 actor.RemoveConstraints();
1098 actor.ApplyConstraint( Constraint::New<Vector3>( Actor::SIZE, ParentSource( Actor::SIZE ), EqualToConstraint() ) );
1102 void PushButtonDefaultPainter::AddToFadeInAnimation( const Actor& actor )
1104 if( !mFadeInAnimation )
1106 mFadeInAnimation = Dali::Animation::New( mAnimationTime );
1109 mFadeInAnimation.OpacityTo( actor, 1.f );
1112 void PushButtonDefaultPainter::StartFadeInAnimation()
1114 if( mFadeInAnimation )
1116 mFadeInAnimation.FinishedSignal().Connect( this, &PushButtonDefaultPainter::PressedReleasedFadeInAnimationFinished );
1117 mFadeInAnimation.Play();
1121 void PushButtonDefaultPainter::StopFadeInAnimation()
1123 if( mFadeInAnimation )
1125 mFadeInAnimation.Clear();
1126 mFadeInAnimation.Reset();
1130 void PushButtonDefaultPainter::AddToFadeOutAnimation( const Actor& actor )
1132 if( !mFadeOutAnimation )
1134 mFadeOutAnimation = Dali::Animation::New( mAnimationTime );
1137 mFadeOutAnimation.OpacityTo( actor, 0.f );
1140 void PushButtonDefaultPainter::StartFadeOutAnimation( Toolkit::PushButton& pushButton )
1142 if( mFadeOutAnimation )
1144 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( pushButton );
1145 mButton = &pushButtonImpl;
1147 mFadeOutAnimation.FinishedSignal().Connect( this, &PushButtonDefaultPainter::PressedReleasedFadeOutAnimationFinished );
1148 mFadeOutAnimation.Play();
1152 void PushButtonDefaultPainter::StopFadeOutAnimation( Toolkit::PushButton& pushButton, bool remove )
1154 if( mFadeOutAnimation )
1156 mFadeOutAnimation.Clear();
1159 mFadeOutAnimation.Reset();
1163 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( pushButton );
1164 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
1165 Actor& fadeOutBackgroundImage = pushButtonImpl.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 PushButtonDefaultPainter::FadeInImage( Toolkit::PushButton& pushButton, Actor& image, float opacity )
1186 image.SetOpacity( opacity );
1187 if( !image.GetParent() )
1189 pushButton.Add( image );
1192 AddToFadeInAnimation( image );
1196 void PushButtonDefaultPainter::FadeOutImage( Toolkit::PushButton& pushButton, ImageLayer layer, Actor& image, float opacity )
1200 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( pushButton );
1201 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
1202 Actor& fadeOutBackgroundImage = pushButtonImpl.GetFadeOutBackgroundImage();
1204 Actor& actorLayer = ( ( Background == layer ) ? fadeOutBackgroundImage : fadeOutButtonImage );
1207 actorLayer.SetOpacity( opacity );
1209 AddToFadeOutAnimation( actorLayer );
1213 void PushButtonDefaultPainter::PressedReleasedFadeOutAnimationFinished( Dali::Animation& source )
1215 switch( mPaintState )
1217 case ReleasedPressedTransition:
1219 mPaintState = PressedState;
1222 case PressedReleasedTransition:
1224 mPaintState = ReleasedState;
1227 case ReleasedDimmedTransition:
1229 mPaintState = DimmedReleasedState;
1232 case DimmedReleasedTransition:
1234 mPaintState = ReleasedState;
1237 case PressedDimmedTransition:
1239 mPaintState = DimmedPressedState;
1242 case DimmedPressedTransition:
1244 mPaintState = PressedState;
1253 Toolkit::PushButton handle( mButton->GetOwner() );
1254 StopFadeOutAnimation( handle );
1258 void PushButtonDefaultPainter::PressedReleasedFadeInAnimationFinished( Dali::Animation& source )
1260 switch( mPaintState )
1262 case ReleasedPressedTransition:
1264 mPaintState = PressedState;
1267 case PressedReleasedTransition:
1269 mPaintState = ReleasedState;
1272 case ReleasedDimmedTransition:
1274 mPaintState = DimmedReleasedState;
1277 case DimmedReleasedTransition:
1279 mPaintState = ReleasedState;
1282 case PressedDimmedTransition:
1284 mPaintState = DimmedPressedState;
1287 case DimmedPressedTransition:
1289 mPaintState = PressedState;
1298 StopFadeInAnimation();
1301 } // namespace Internal
1303 } // namespace Toolkit