+ Actor& selectedImage = GetSelectedImage();
+ Actor& buttonImage = GetButtonImage();
+ Actor& fadeOutButtonImage = GetFadeOutButtonImage();
+
+ switch( mPaintState )
+ {
+ case UnselectedState:
+ {
+ StopFadeOutAnimation();
+ FadeOutImage( Foreground, buttonImage );
+ FadeInImage( selectedImage );
+ StartFadeOutAnimation();
+ StartFadeInAnimation();
+
+ if( buttonImage || selectedImage )
+ {
+ mPaintState = UnselectedSelectedTransition;
+ }
+ else
+ {
+ mPaintState = SelectedState;
+ }
+ break;
+ }
+ case SelectedState:
+ {
+ StopFadeOutAnimation();
+ FadeOutImage( Foreground, selectedImage );
+ FadeInImage( buttonImage );
+ StartFadeOutAnimation();
+ StartFadeInAnimation();
+
+ if( buttonImage || selectedImage )
+ {
+ mPaintState = SelectedUnselectedTransition;
+ }
+ else
+ {
+ mPaintState = UnselectedState;
+ }
+ break;
+ }
+ case UnselectedSelectedTransition:
+ {
+ float opacity = 1.f;
+ if( fadeOutButtonImage )
+ {
+ opacity = fadeOutButtonImage.GetCurrentOpacity();
+ }
+ StopFadeOutAnimation( false );
+ StopFadeInAnimation();
+
+ FadeOutImage( Foreground, selectedImage, 1.f - opacity );
+ FadeInImage( buttonImage, opacity );
+
+ StartFadeOutAnimation();
+ StartFadeInAnimation();
+
+ if( buttonImage || selectedImage )
+ {
+ mPaintState = SelectedUnselectedTransition;
+ }
+ else
+ {
+ mPaintState = UnselectedState;
+ }
+ break;
+ }
+ case SelectedUnselectedTransition:
+ {
+ float opacity = 0.f;
+ if( fadeOutButtonImage )
+ {
+ opacity = 1.f - fadeOutButtonImage.GetCurrentOpacity();
+ }
+ StopFadeOutAnimation( false );
+ StopFadeInAnimation();
+
+ FadeOutImage( Foreground, buttonImage, 1.f - opacity );
+ FadeInImage( selectedImage, opacity );
+
+ StartFadeOutAnimation();
+ StartFadeInAnimation();
+
+ if( buttonImage || selectedImage )
+ {
+ mPaintState = UnselectedSelectedTransition;
+ }
+ else
+ {
+ mPaintState = SelectedState;
+ }
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }