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-default-painter-impl.h"
22 #include <dali/public-api/actors/image-actor.h>
23 #include <dali/public-api/adaptor-framework/timer.h>
24 #include <dali/public-api/animation/constraints.h>
25 #include <dali/public-api/object/ref-object.h>
28 #include <dali-toolkit/public-api/controls/buttons/push-button.h>
29 #include "push-button-impl.h"
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 );
48 inline Toolkit::Internal::PushButton& GetPushButtonImpl( Toolkit::Button& button )
50 DALI_ASSERT_ALWAYS( button );
52 Dali::RefObject& handle = button.GetImplementation();
54 return static_cast<Toolkit::Internal::PushButton&>( handle );
57 inline const Toolkit::Internal::PushButton& GetPushButtonImpl( const Toolkit::Button& button )
59 DALI_ASSERT_ALWAYS( button );
61 const Dali::RefObject& handle = button.GetImplementation();
63 return static_cast<const Toolkit::Internal::PushButton&>( handle );
68 PushButtonDefaultPainter::PushButtonDefaultPainter()
69 : PushButtonPainter(),
70 mAutoRepeating( false ),
72 mPaintState( ReleasedState ),
74 mAnimationTime( ANIMATION_TIME ),
79 PushButtonDefaultPainter::~PushButtonDefaultPainter()
81 if( mFadeInAnimation )
83 mFadeInAnimation.Clear();
85 if( mFadeOutAnimation )
87 mFadeOutAnimation.Clear();
91 void PushButtonDefaultPainter::SetButtonImage( Toolkit::PushButton& pushButton, Actor image )
93 Toolkit::Internal::PushButton& pushButtonImpl = GetImplementation( pushButton );
94 Actor& buttonImage = pushButtonImpl.GetButtonImage();
95 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
101 if( buttonImage && buttonImage.GetParent() )
103 StopFadeOutAnimation( pushButton );
104 FadeOutImage( pushButton, Foreground, buttonImage );
108 FadeInImage( pushButton, buttonImage );
110 StartFadeOutAnimation( pushButton );
111 StartFadeInAnimation();
116 pushButton.Add( buttonImage );
120 case ReleasedPressedTransition: // FALLTHROUGH
121 case ReleasedDimmedTransition:
124 if( fadeOutButtonImage )
126 opacity = fadeOutButtonImage.GetCurrentOpacity();
128 StopFadeOutAnimation( pushButton );
130 // Replaces the button image.
133 pushButton.Add( buttonImage );
134 FadeOutImage( pushButton, Foreground, buttonImage, opacity );
136 StartFadeOutAnimation( pushButton );
139 case PressedReleasedTransition: // FALLTHROUGH
140 case DimmedReleasedTransition:
142 StopFadeInAnimation();
143 pushButton.Remove( buttonImage );
147 FadeInImage( pushButton, buttonImage );
148 StartFadeInAnimation();
156 buttonImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
157 buttonImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
158 ApplyConstraint( buttonImage, FOREGROUND_DEPTH );
161 void PushButtonDefaultPainter::SetBackgroundImage( Toolkit::PushButton& pushButton, Actor image )
163 Toolkit::Internal::PushButton& pushButtonImpl = GetImplementation( pushButton );
164 Actor& backgroundImage = pushButtonImpl.GetBackgroundImage();
165 Actor& fadeOutBackgroundImage = pushButtonImpl.GetFadeOutBackgroundImage();
167 switch( mPaintState )
169 case ReleasedState: // FALLTHROUGH
171 case ReleasedPressedTransition:
172 case PressedReleasedTransition:
174 if( backgroundImage && backgroundImage.GetParent() )
176 StopFadeOutAnimation( pushButton );
177 FadeOutImage( pushButton, Background, backgroundImage );
179 backgroundImage = image;
181 FadeInImage( pushButton, backgroundImage );
183 StartFadeOutAnimation( pushButton );
184 StartFadeInAnimation();
188 backgroundImage = image;
189 pushButton.Add( backgroundImage );
193 case ReleasedDimmedTransition: // FALLTHROUGH
194 case PressedDimmedTransition:
197 if( fadeOutBackgroundImage )
199 opacity = fadeOutBackgroundImage.GetCurrentOpacity();
201 StopFadeOutAnimation( pushButton );
203 // Replaces the button image.
204 backgroundImage = image;
206 pushButton.Add( backgroundImage );
207 FadeOutImage( pushButton, Background, backgroundImage, opacity );
209 StartFadeOutAnimation( pushButton );
212 case DimmedReleasedTransition: // FALLTHROUGH
213 case DimmedPressedTransition:
215 StopFadeInAnimation();
216 pushButton.Remove( backgroundImage );
218 backgroundImage = image;
220 FadeInImage( pushButton, backgroundImage );
221 StartFadeInAnimation();
225 backgroundImage = image;
229 backgroundImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
230 backgroundImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
231 ApplyConstraint( backgroundImage, BACKGROUND_DEPTH );
234 void PushButtonDefaultPainter::SetPressedImage( Toolkit::PushButton& pushButton, Actor image )
236 Toolkit::Internal::PushButton& pushButtonImpl = GetImplementation( pushButton );
237 Actor& pressedImage = pushButtonImpl.GetPressedImage();
238 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
240 switch( mPaintState )
244 if( pressedImage && pressedImage.GetParent() )
246 StopFadeOutAnimation( pushButton );
247 FadeOutImage( pushButton, Foreground, pressedImage );
249 pressedImage = image;
251 FadeInImage( pushButton, pressedImage );
253 StartFadeOutAnimation( pushButton );
254 StartFadeInAnimation();
258 pressedImage = image;
259 pushButton.Add( pressedImage );
263 case PressedReleasedTransition: // FALLTHROUGH
264 case PressedDimmedTransition:
267 if( fadeOutButtonImage )
269 opacity = fadeOutButtonImage.GetCurrentOpacity();
271 StopFadeOutAnimation( pushButton );
273 // Replaces the button image.
274 pressedImage = image;
276 pushButton.Add( pressedImage );
277 FadeOutImage( pushButton, Foreground, pressedImage, opacity );
279 StartFadeOutAnimation( pushButton );
282 case ReleasedPressedTransition: // FALLTHROUGH
283 case DimmedPressedTransition:
285 StopFadeInAnimation();
286 pushButton.Remove( pressedImage );
288 pressedImage = image;
290 FadeInImage( pushButton, pressedImage );
291 StartFadeInAnimation();
295 pressedImage = image;
299 pressedImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
300 pressedImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
301 ApplyConstraint( pressedImage, FOREGROUND_DEPTH );
304 void PushButtonDefaultPainter::SetDimmedImage( Toolkit::PushButton& pushButton, Actor image )
306 Toolkit::Internal::PushButton& pushButtonImpl = GetImplementation( pushButton );
307 Actor& dimmedImage = pushButtonImpl.GetDimmedImage();
308 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
310 switch( mPaintState )
312 case DimmedReleasedState: // FALLTHROUGH
313 case DimmedPressedState:
315 if( dimmedImage && dimmedImage.GetParent() )
317 StopFadeOutAnimation( pushButton );
318 FadeOutImage( pushButton, Foreground, dimmedImage );
322 FadeInImage( pushButton, dimmedImage );
324 StartFadeOutAnimation( pushButton );
325 StartFadeInAnimation();
330 pushButton.Add( dimmedImage );
334 case ReleasedDimmedTransition: // FALLTHROUGH
335 case PressedDimmedTransition:
337 StopFadeInAnimation();
338 pushButton.Remove( dimmedImage );
342 FadeInImage( pushButton, dimmedImage );
343 StartFadeInAnimation();
346 case DimmedReleasedTransition: // FALLTHROUGH
347 case DimmedPressedTransition:
350 if( fadeOutButtonImage )
352 opacity = fadeOutButtonImage.GetCurrentOpacity();
354 StopFadeOutAnimation( pushButton );
356 // Replaces the button image.
359 pushButton.Add( dimmedImage );
360 FadeOutImage( pushButton, Foreground, dimmedImage, opacity );
362 StartFadeOutAnimation( pushButton );
370 dimmedImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
371 dimmedImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
372 ApplyConstraint( dimmedImage, FOREGROUND_DEPTH );
375 void PushButtonDefaultPainter::SetDimmedBackgroundImage( Toolkit::PushButton& pushButton, Actor image )
377 Toolkit::Internal::PushButton& pushButtonImpl = GetImplementation( pushButton );
378 Actor& dimmedBackgroundImage = pushButtonImpl.GetDimmedBackgroundImage();
379 Actor& fadeOutBackgroundImage = pushButtonImpl.GetFadeOutBackgroundImage();
381 switch( mPaintState )
383 case DimmedReleasedState: // FALLTHROUGH
384 case DimmedPressedState:
386 if( dimmedBackgroundImage && dimmedBackgroundImage.GetParent() )
388 StopFadeOutAnimation( pushButton );
389 FadeOutImage( pushButton, Background, dimmedBackgroundImage );
391 dimmedBackgroundImage = image;
393 FadeInImage( pushButton, dimmedBackgroundImage );
395 StartFadeOutAnimation( pushButton );
396 StartFadeInAnimation();
400 dimmedBackgroundImage = image;
401 pushButton.Add( dimmedBackgroundImage );
405 case ReleasedDimmedTransition: // FALLTHROUGH
406 case PressedDimmedTransition:
408 StopFadeInAnimation();
409 pushButton.Remove( dimmedBackgroundImage );
411 dimmedBackgroundImage = image;
413 FadeInImage( pushButton, dimmedBackgroundImage );
414 StartFadeInAnimation();
417 case DimmedReleasedTransition: // FALLTHROUGH
418 case DimmedPressedTransition:
421 if( fadeOutBackgroundImage )
423 opacity = fadeOutBackgroundImage.GetCurrentOpacity();
425 StopFadeOutAnimation( pushButton );
427 // Replaces the button image.
428 dimmedBackgroundImage = image;
430 pushButton.Add( dimmedBackgroundImage );
431 FadeOutImage( pushButton, Background, dimmedBackgroundImage, opacity );
433 StartFadeOutAnimation( pushButton );
437 dimmedBackgroundImage = image;
441 dimmedBackgroundImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
442 dimmedBackgroundImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
443 ApplyConstraint( dimmedBackgroundImage, BACKGROUND_DEPTH );
446 void PushButtonDefaultPainter::SetLabelText( Toolkit::PushButton& pushButton, Actor text )
448 Toolkit::Internal::PushButton& pushButtonImpl = GetImplementation( pushButton );
449 Actor& label = pushButtonImpl.GetLabel();
451 if( label && label.GetParent() )
453 label.GetParent().Remove( label );
457 label.SetAnchorPoint( AnchorPoint::CENTER );
458 label.SetParentOrigin( ParentOrigin::CENTER );
460 label.SetPosition( 0.f, 0.f, LABEL_DEPTH );
461 label.SetSize( mSize );
463 pushButton.Add( label );
466 void PushButtonDefaultPainter::Initialize( Toolkit::Button& button )
468 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
469 Actor& buttonImage = pushButtonImpl.GetButtonImage();
470 Actor& pressedImage = pushButtonImpl.GetPressedImage();
471 Actor& backgroundImage = pushButtonImpl.GetBackgroundImage();
472 Actor& dimmedImage = pushButtonImpl.GetDimmedImage();
473 Actor& dimmedBackgroundImage = pushButtonImpl.GetDimmedBackgroundImage();
474 Actor& label = pushButtonImpl.GetLabel();
476 Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
480 SetButtonImage( pushButton, buttonImage );
483 if( backgroundImage )
485 SetBackgroundImage( pushButton, backgroundImage );
490 SetPressedImage( pushButton, pressedImage );
495 SetDimmedImage( pushButton, dimmedImage );
498 if( dimmedBackgroundImage )
500 SetDimmedBackgroundImage( pushButton, dimmedBackgroundImage );
505 SetLabelText( pushButton, label );
508 SetDimmed( pushButton, mDimmed );
511 void PushButtonDefaultPainter::SetSize( Toolkit::Button& button, const Vector3& size )
517 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
518 Actor& buttonImage = pushButtonImpl.GetButtonImage();
519 Actor& pressedImage = pushButtonImpl.GetPressedImage();
520 Actor& backgroundImage = pushButtonImpl.GetBackgroundImage();
521 Actor& dimmedImage = pushButtonImpl.GetDimmedImage();
522 Actor& dimmedBackgroundImage = pushButtonImpl.GetDimmedBackgroundImage();
523 Actor& label = pushButtonImpl.GetLabel();
525 ApplyConstraint( buttonImage, FOREGROUND_DEPTH );
526 ApplyConstraint( backgroundImage, BACKGROUND_DEPTH );
527 ApplyConstraint( pressedImage, FOREGROUND_DEPTH );
528 ApplyConstraint( dimmedImage, FOREGROUND_DEPTH );
529 ApplyConstraint( dimmedBackgroundImage, BACKGROUND_DEPTH );
533 label.SetPosition( 0.f, 0.f, LABEL_DEPTH );
534 label.SetSize( mSize );
539 void PushButtonDefaultPainter::SetDimmed( Toolkit::Button& button, bool dimmed )
541 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
542 Actor& buttonImage = pushButtonImpl.GetButtonImage();
543 Actor& pressedImage = pushButtonImpl.GetPressedImage();
544 Actor& backgroundImage = pushButtonImpl.GetBackgroundImage();
545 Actor& dimmedImage = pushButtonImpl.GetDimmedImage();
546 Actor& dimmedBackgroundImage = pushButtonImpl.GetDimmedBackgroundImage();
547 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
549 Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
553 switch( mPaintState )
559 StopFadeOutAnimation( pushButton );
560 FadeOutImage( pushButton, Background, backgroundImage );
561 FadeOutImage( pushButton, Foreground, buttonImage );
562 FadeInImage( pushButton, dimmedBackgroundImage );
563 FadeInImage( pushButton, dimmedImage );
564 StartFadeOutAnimation( pushButton );
565 StartFadeInAnimation();
567 if( buttonImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
569 mPaintState = ReleasedDimmedTransition;
573 mPaintState = DimmedReleasedState;
582 StopFadeOutAnimation( pushButton );
583 FadeOutImage( pushButton, Background, backgroundImage );
584 FadeOutImage( pushButton, Foreground, pressedImage );
585 FadeInImage( pushButton, dimmedBackgroundImage );
586 FadeInImage( pushButton, dimmedImage );
587 StartFadeOutAnimation( pushButton );
588 StartFadeInAnimation();
590 if( pressedImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
592 mPaintState = PressedDimmedTransition;
596 mPaintState = DimmedPressedState;
601 case DimmedReleasedState:
605 StopFadeOutAnimation( pushButton );
606 FadeOutImage( pushButton, Background, dimmedBackgroundImage );
607 FadeOutImage( pushButton, Foreground, dimmedImage );
608 FadeInImage( pushButton, backgroundImage );
609 FadeInImage( pushButton, buttonImage );
610 StartFadeOutAnimation( pushButton );
611 StartFadeInAnimation();
613 if( buttonImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
615 mPaintState = DimmedReleasedTransition;
619 mPaintState = ReleasedState;
624 case DimmedPressedState:
628 StopFadeOutAnimation( pushButton );
629 FadeOutImage( pushButton, Background, dimmedBackgroundImage );
630 FadeOutImage( pushButton, Foreground, dimmedImage );
631 FadeInImage( pushButton, backgroundImage );
632 FadeInImage( pushButton, pressedImage );
633 StartFadeOutAnimation( pushButton );
634 StartFadeInAnimation();
636 if( pressedImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
638 mPaintState = DimmedPressedTransition;
642 mPaintState = PressedState;
647 case ReleasedPressedTransition:
652 if( fadeOutButtonImage )
654 opacity = fadeOutButtonImage.GetCurrentOpacity();
656 StopFadeOutAnimation( pushButton );
657 StopFadeInAnimation();
659 FadeOutImage( pushButton, Foreground, pressedImage, 1.f - opacity );
660 FadeOutImage( pushButton, Background, backgroundImage );
662 FadeInImage( pushButton, dimmedImage );
663 FadeInImage( pushButton, dimmedBackgroundImage );
665 StartFadeOutAnimation( pushButton );
666 StartFadeInAnimation();
668 if( pressedImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
670 mPaintState = PressedDimmedTransition;
674 mPaintState = DimmedPressedState;
679 case PressedReleasedTransition:
684 if( fadeOutButtonImage )
686 opacity = fadeOutButtonImage.GetCurrentOpacity();
688 StopFadeOutAnimation( pushButton );
689 StopFadeInAnimation();
691 FadeOutImage( pushButton, Foreground, buttonImage, 1.f - opacity );
692 FadeOutImage( pushButton, Background, backgroundImage );
694 FadeInImage( pushButton, dimmedImage );
695 FadeInImage( pushButton, dimmedBackgroundImage );
697 StartFadeOutAnimation( pushButton );
698 StartFadeInAnimation();
700 if( buttonImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
702 mPaintState = ReleasedDimmedTransition;
706 mPaintState = DimmedReleasedState;
711 case ReleasedDimmedTransition:
716 if( fadeOutButtonImage )
718 opacity = fadeOutButtonImage.GetCurrentOpacity();
720 StopFadeOutAnimation( pushButton, false );
721 StopFadeInAnimation();
723 FadeOutImage( pushButton, Foreground, dimmedImage, 1.f - opacity );
724 FadeOutImage( pushButton, Background, dimmedBackgroundImage, 1.f - opacity );
725 FadeInImage( pushButton, buttonImage, opacity );
726 FadeInImage( pushButton, backgroundImage, opacity );
728 StartFadeOutAnimation( pushButton );
729 StartFadeInAnimation();
731 if( buttonImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
733 mPaintState = DimmedReleasedTransition;
737 mPaintState = ReleasedState;
742 case DimmedReleasedTransition:
747 if( fadeOutButtonImage )
749 opacity = fadeOutButtonImage.GetCurrentOpacity();
751 StopFadeOutAnimation( pushButton, false );
752 StopFadeInAnimation();
754 FadeOutImage( pushButton, Foreground, buttonImage, 1.f - opacity );
755 FadeOutImage( pushButton, Background, backgroundImage, 1.f - opacity );
756 FadeInImage( pushButton, dimmedImage, opacity );
757 FadeInImage( pushButton, dimmedBackgroundImage, opacity );
759 StartFadeOutAnimation( pushButton );
760 StartFadeInAnimation();
762 if( buttonImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
764 mPaintState = ReleasedDimmedTransition;
768 mPaintState = DimmedReleasedState;
773 case PressedDimmedTransition:
778 if( fadeOutButtonImage )
780 opacity = fadeOutButtonImage.GetCurrentOpacity();
782 StopFadeOutAnimation( pushButton, false );
783 StopFadeInAnimation();
785 FadeOutImage( pushButton, Foreground, dimmedImage, 1.f - opacity );
786 FadeOutImage( pushButton, Background, dimmedBackgroundImage, 1.f - opacity );
787 FadeInImage( pushButton, pressedImage, opacity );
788 FadeInImage( pushButton, backgroundImage, opacity );
790 StartFadeOutAnimation( pushButton );
791 StartFadeInAnimation();
793 if( pressedImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
795 mPaintState = DimmedPressedTransition;
799 mPaintState = PressedState;
804 case DimmedPressedTransition:
809 if( fadeOutButtonImage )
811 opacity = fadeOutButtonImage.GetCurrentOpacity();
813 StopFadeOutAnimation( pushButton, false );
814 StopFadeInAnimation();
816 FadeOutImage( pushButton, Foreground, pressedImage, 1.f - opacity );
817 FadeOutImage( pushButton, Background, backgroundImage, 1.f - opacity );
818 FadeInImage( pushButton, dimmedImage, opacity );
819 FadeInImage( pushButton, dimmedBackgroundImage, opacity );
821 StartFadeOutAnimation( pushButton );
822 StartFadeInAnimation();
824 if( pressedImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
826 mPaintState = PressedDimmedTransition;
830 mPaintState = DimmedPressedState;
840 void PushButtonDefaultPainter::SetAnimationTime( float animationTime )
842 mAnimationTime = animationTime;
845 float PushButtonDefaultPainter::GetAnimationTime() const
847 return mAnimationTime;
850 void PushButtonDefaultPainter::SetAutoRepeating( bool autorepeating )
852 mAutoRepeating = autorepeating;
855 void PushButtonDefaultPainter::Pressed( Toolkit::PushButton& button )
857 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
858 Actor& pressedImage = pushButtonImpl.GetPressedImage();
859 Actor& buttonImage = pushButtonImpl.GetButtonImage();
860 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
862 switch( mPaintState )
866 StopFadeOutAnimation( button );
867 FadeOutImage( button, Foreground, buttonImage );
868 FadeInImage( button, pressedImage );
869 StartFadeOutAnimation( button );
870 StartFadeInAnimation();
872 if( buttonImage || pressedImage )
874 mPaintState = ReleasedPressedTransition;
878 mPaintState = PressedState;
882 case ReleasedPressedTransition:
884 if( !mAutoRepeating )
886 mPaintState = PressedReleasedTransition;
890 case PressedReleasedTransition:
893 if( fadeOutButtonImage )
895 opacity = fadeOutButtonImage.GetCurrentOpacity();
897 StopFadeOutAnimation( button, false );
898 StopFadeInAnimation();
900 FadeOutImage( button, Foreground, buttonImage, 1.f - opacity );
901 FadeInImage( button, pressedImage, opacity );
903 StartFadeOutAnimation( button );
904 StartFadeInAnimation();
906 if( buttonImage || pressedImage )
908 mPaintState = ReleasedPressedTransition;
912 mPaintState = PressedState;
921 void PushButtonDefaultPainter::Released( Toolkit::PushButton& button )
923 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
924 Actor& pressedImage = pushButtonImpl.GetPressedImage();
925 Actor& buttonImage = pushButtonImpl.GetButtonImage();
926 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
928 switch( mPaintState )
932 StopFadeOutAnimation( button );
933 FadeOutImage( button, Foreground, pressedImage );
934 FadeInImage( button, buttonImage );
935 StartFadeOutAnimation( button );
936 StartFadeInAnimation();
938 if( buttonImage || pressedImage )
940 mPaintState = PressedReleasedTransition;
944 mPaintState = ReleasedState;
948 case ReleasedPressedTransition:
951 if( fadeOutButtonImage )
953 opacity = fadeOutButtonImage.GetCurrentOpacity();
955 StopFadeOutAnimation( button, false );
956 StopFadeInAnimation();
958 FadeOutImage( button, Foreground, pressedImage, 1.f - opacity );
959 FadeInImage( button, buttonImage, opacity );
961 StartFadeOutAnimation( button );
962 StartFadeInAnimation();
964 if( buttonImage || pressedImage )
966 mPaintState = PressedReleasedTransition;
970 mPaintState = ReleasedState;
981 void PushButtonDefaultPainter::Clicked( Toolkit::PushButton& button )
986 void PushButtonDefaultPainter::Toggled( Toolkit::PushButton& button )
988 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
989 Actor& pressedImage = pushButtonImpl.GetPressedImage();
990 Actor& buttonImage = pushButtonImpl.GetButtonImage();
991 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
993 switch( mPaintState )
997 StopFadeOutAnimation( button );
998 FadeOutImage( button, Foreground, buttonImage );
999 FadeInImage( button, pressedImage );
1000 StartFadeOutAnimation( button );
1001 StartFadeInAnimation();
1003 if( buttonImage || pressedImage )
1005 mPaintState = ReleasedPressedTransition;
1009 mPaintState = PressedState;
1015 StopFadeOutAnimation( button );
1016 FadeOutImage( button, Foreground, pressedImage );
1017 FadeInImage( button, buttonImage );
1018 StartFadeOutAnimation( button );
1019 StartFadeInAnimation();
1021 if( buttonImage || pressedImage )
1023 mPaintState = PressedReleasedTransition;
1027 mPaintState = ReleasedState;
1031 case ReleasedPressedTransition:
1033 float opacity = 1.f;
1034 if( fadeOutButtonImage )
1036 opacity = fadeOutButtonImage.GetCurrentOpacity();
1038 StopFadeOutAnimation( button, false );
1039 StopFadeInAnimation();
1041 FadeOutImage( button, Foreground, pressedImage, 1.f - opacity );
1042 FadeInImage( button, buttonImage, opacity );
1044 StartFadeOutAnimation( button );
1045 StartFadeInAnimation();
1047 if( buttonImage || pressedImage )
1049 mPaintState = PressedReleasedTransition;
1053 mPaintState = ReleasedState;
1057 case PressedReleasedTransition:
1059 float opacity = 0.f;
1060 if( fadeOutButtonImage )
1062 opacity = 1.f - fadeOutButtonImage.GetCurrentOpacity();
1064 StopFadeOutAnimation( button, false );
1065 StopFadeInAnimation();
1067 FadeOutImage( button, Foreground, buttonImage, 1.f - opacity );
1068 FadeInImage( button, pressedImage, opacity );
1070 StartFadeOutAnimation( button );
1071 StartFadeInAnimation();
1073 if( buttonImage || pressedImage )
1075 mPaintState = ReleasedPressedTransition;
1079 mPaintState = PressedState;
1090 void PushButtonDefaultPainter::ApplyConstraint( Actor& actor, float depth )
1094 actor.SetPosition( 0.f, 0.f, depth );
1095 actor.RemoveConstraints();
1096 actor.ApplyConstraint( Constraint::New<Vector3>( Actor::SIZE, ParentSource( Actor::SIZE ), EqualToConstraint() ) );
1100 void PushButtonDefaultPainter::AddToFadeInAnimation( const Actor& actor )
1102 if( !mFadeInAnimation )
1104 mFadeInAnimation = Dali::Animation::New( mAnimationTime );
1107 mFadeInAnimation.OpacityTo( actor, 1.f );
1110 void PushButtonDefaultPainter::StartFadeInAnimation()
1112 if( mFadeInAnimation )
1114 mFadeInAnimation.FinishedSignal().Connect( this, &PushButtonDefaultPainter::PressedReleasedFadeInAnimationFinished );
1115 mFadeInAnimation.Play();
1119 void PushButtonDefaultPainter::StopFadeInAnimation()
1121 if( mFadeInAnimation )
1123 mFadeInAnimation.Clear();
1124 mFadeInAnimation.Reset();
1128 void PushButtonDefaultPainter::AddToFadeOutAnimation( const Actor& actor )
1130 if( !mFadeOutAnimation )
1132 mFadeOutAnimation = Dali::Animation::New( mAnimationTime );
1135 mFadeOutAnimation.OpacityTo( actor, 0.f );
1138 void PushButtonDefaultPainter::StartFadeOutAnimation( Toolkit::PushButton& pushButton )
1140 if( mFadeOutAnimation )
1142 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( pushButton );
1143 mButton = &pushButtonImpl;
1145 mFadeOutAnimation.FinishedSignal().Connect( this, &PushButtonDefaultPainter::PressedReleasedFadeOutAnimationFinished );
1146 mFadeOutAnimation.Play();
1150 void PushButtonDefaultPainter::StopFadeOutAnimation( Toolkit::PushButton& pushButton, bool remove )
1152 if( mFadeOutAnimation )
1154 mFadeOutAnimation.Clear();
1157 mFadeOutAnimation.Reset();
1161 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( pushButton );
1162 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
1163 Actor& fadeOutBackgroundImage = pushButtonImpl.GetFadeOutBackgroundImage();
1165 if( fadeOutButtonImage && fadeOutButtonImage.GetParent() )
1167 fadeOutButtonImage.GetParent().Remove( fadeOutButtonImage );
1170 if( fadeOutBackgroundImage && fadeOutBackgroundImage.GetParent() )
1172 fadeOutBackgroundImage.GetParent().Remove( fadeOutBackgroundImage );
1175 fadeOutButtonImage.Reset();
1176 fadeOutBackgroundImage.Reset();
1180 void PushButtonDefaultPainter::FadeInImage( Toolkit::PushButton& pushButton, Actor& image, float opacity )
1184 image.SetOpacity( opacity );
1185 if( !image.GetParent() )
1187 pushButton.Add( image );
1190 AddToFadeInAnimation( image );
1194 void PushButtonDefaultPainter::FadeOutImage( Toolkit::PushButton& pushButton, ImageLayer layer, Actor& image, float opacity )
1198 Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( pushButton );
1199 Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
1200 Actor& fadeOutBackgroundImage = pushButtonImpl.GetFadeOutBackgroundImage();
1202 Actor& actorLayer = ( ( Background == layer ) ? fadeOutBackgroundImage : fadeOutButtonImage );
1205 actorLayer.SetOpacity( opacity );
1207 AddToFadeOutAnimation( actorLayer );
1211 void PushButtonDefaultPainter::PressedReleasedFadeOutAnimationFinished( Dali::Animation& source )
1213 switch( mPaintState )
1215 case ReleasedPressedTransition:
1217 mPaintState = PressedState;
1220 case PressedReleasedTransition:
1222 mPaintState = ReleasedState;
1225 case ReleasedDimmedTransition:
1227 mPaintState = DimmedReleasedState;
1230 case DimmedReleasedTransition:
1232 mPaintState = ReleasedState;
1235 case PressedDimmedTransition:
1237 mPaintState = DimmedPressedState;
1240 case DimmedPressedTransition:
1242 mPaintState = PressedState;
1251 Toolkit::PushButton handle( mButton->GetOwner() );
1252 StopFadeOutAnimation( handle );
1256 void PushButtonDefaultPainter::PressedReleasedFadeInAnimationFinished( Dali::Animation& source )
1258 switch( mPaintState )
1260 case ReleasedPressedTransition:
1262 mPaintState = PressedState;
1265 case PressedReleasedTransition:
1267 mPaintState = ReleasedState;
1270 case ReleasedDimmedTransition:
1272 mPaintState = DimmedReleasedState;
1275 case DimmedReleasedTransition:
1277 mPaintState = ReleasedState;
1280 case PressedDimmedTransition:
1282 mPaintState = DimmedPressedState;
1285 case DimmedPressedTransition:
1287 mPaintState = PressedState;
1296 StopFadeInAnimation();
1299 } // namespace Internal
1301 } // namespace Toolkit