Replace vector.h with vector-wrapper.h
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / controls / buttons / push-button-default-painter-impl.cpp
index d44470d..31176f4 100644 (file)
@@ -1,34 +1,35 @@
-//
-// Copyright (c) 2014 Samsung Electronics Co., Ltd.
-//
-// Licensed under the Flora License, Version 1.0 (the License);
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://floralicense.org/license/
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an AS IS BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
 
 // CLASS HEADER
-
 #include "push-button-default-painter-impl.h"
 
-// INTERNAL INCLUDES
-
+// EXTERNAL INCLUDES
 #include <dali/public-api/actors/image-actor.h>
-#include <dali-toolkit/public-api/controls/text-view/text-view.h>
-#include <dali-toolkit/public-api/controls/buttons/push-button.h>
+#include <dali/public-api/adaptor-framework/timer.h>
+#include <dali/public-api/animation/active-constraint.h>
+#include <dali/public-api/animation/constraint.h>
+#include <dali/public-api/animation/constraints.h>
 #include <dali/public-api/object/ref-object.h>
 
+// INTERNAL INCLUDES
+#include <dali-toolkit/public-api/controls/buttons/push-button.h>
 #include "push-button-impl.h"
 
-// EXTERNAL INCLUDES
-
 namespace Dali
 {
 
@@ -69,7 +70,7 @@ inline const Toolkit::Internal::PushButton& GetPushButtonImpl( const Toolkit::Bu
 PushButtonDefaultPainter::PushButtonDefaultPainter()
 : PushButtonPainter(),
   mAutoRepeating( false ),
-  mDimmed( false ),
+  mDisabled( false ),
   mPaintState( ReleasedState ),
   mButton( NULL ),
   mAnimationTime( ANIMATION_TIME ),
@@ -89,180 +90,190 @@ PushButtonDefaultPainter::~PushButtonDefaultPainter()
   }
 }
 
-void PushButtonDefaultPainter::SetButtonImage( Toolkit::PushButton& pushButton, Actor image )
+void PushButtonDefaultPainter::Initialize( Toolkit::Button& button )
 {
-  Toolkit::Internal::PushButton& pushButtonImpl = GetImplementation( pushButton );
+  Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
   Actor& buttonImage = pushButtonImpl.GetButtonImage();
-  Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
+  Actor& selectedImage = pushButtonImpl.GetSelectedImage();
+  Actor& backgroundImage = pushButtonImpl.GetBackgroundImage();
+  Actor& disabledImage = pushButtonImpl.GetDisabledImage();
+  Actor& disabledBackgroundImage = pushButtonImpl.GetDisabledBackgroundImage();
+  Actor& label = pushButtonImpl.GetLabel();
 
-  switch( mPaintState )
+  Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
+
+  if( buttonImage )
   {
-    case ReleasedState:
-    {
-      if( buttonImage && buttonImage.GetParent() )
-      {
-        StopFadeOutAnimation( pushButton );
-        FadeOutImage( pushButton, Foreground, buttonImage );
+    SetButtonImage( pushButton, buttonImage );
+  }
 
-        buttonImage = image;
+  if( backgroundImage )
+  {
+    SetBackgroundImage( pushButton, backgroundImage );
+  }
 
-        FadeInImage( pushButton, buttonImage );
+  if( selectedImage )
+  {
+    SetSelectedImage( pushButton, selectedImage );
+  }
 
-        StartFadeOutAnimation( pushButton );
-        StartFadeInAnimation();
-      }
-      else
-      {
-        buttonImage = image;
-        pushButton.Add( buttonImage );
-      }
-      break;
-    }
-    case ReleasedPressedTransition: // FALLTHROUGH
-    case ReleasedDimmedTransition:
-    {
-      float opacity = 1.f;
-      if( fadeOutButtonImage )
-      {
-        opacity = fadeOutButtonImage.GetCurrentOpacity();
-      }
-      StopFadeOutAnimation( pushButton );
+  if( disabledImage )
+  {
+    SetDisabledImage( pushButton, disabledImage );
+  }
 
-      // Replaces the button image.
-      buttonImage = image;
+  if( disabledBackgroundImage )
+  {
+    SetDisabledBackgroundImage( pushButton, disabledBackgroundImage );
+  }
 
-      pushButton.Add( buttonImage );
-      FadeOutImage( pushButton, Foreground, buttonImage, opacity );
+  if( label )
+  {
+    SetLabel( pushButton, label );
+  }
 
-      StartFadeOutAnimation( pushButton );
-      break;
-    }
-    case PressedReleasedTransition: // FALLTHROUGH
-    case DimmedReleasedTransition:
-    {
-      StopFadeInAnimation();
-      pushButton.Remove( buttonImage );
+  SetDisabled( pushButton, mDisabled );
+}
 
-      buttonImage = image;
+void PushButtonDefaultPainter::SetSize( Toolkit::Button& button, const Vector3& size )
+{
+  if( size != mSize )
+  {
+    mSize = size;
 
-      FadeInImage( pushButton, buttonImage );
-      StartFadeInAnimation();
-      break;
+    Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
+    Actor& buttonImage = pushButtonImpl.GetButtonImage();
+    Actor& selectedImage = pushButtonImpl.GetSelectedImage();
+    Actor& backgroundImage = pushButtonImpl.GetBackgroundImage();
+    Actor& disabledImage = pushButtonImpl.GetDisabledImage();
+    Actor& disabledBackgroundImage = pushButtonImpl.GetDisabledBackgroundImage();
+    Actor& label = pushButtonImpl.GetLabel();
+
+    ApplyConstraint( buttonImage, FOREGROUND_DEPTH );
+    ApplyConstraint( backgroundImage, BACKGROUND_DEPTH );
+    ApplyConstraint( selectedImage, FOREGROUND_DEPTH );
+    ApplyConstraint( disabledImage, FOREGROUND_DEPTH );
+    ApplyConstraint( disabledBackgroundImage, BACKGROUND_DEPTH );
+
+    if( label )
+    {
+      label.SetPosition( 0.f, 0.f, LABEL_DEPTH );
+      label.SetSize( mSize );
     }
-    default:
-      buttonImage = image;
-      break;
   }
-
-  buttonImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
-  buttonImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
-  ApplyConstraint( buttonImage, FOREGROUND_DEPTH );
 }
 
-void PushButtonDefaultPainter::SetBackgroundImage( Toolkit::PushButton& pushButton, Actor image )
+void PushButtonDefaultPainter::SetDisabled( Toolkit::Button& button, bool disabled )
 {
-  Toolkit::Internal::PushButton& pushButtonImpl = GetImplementation( pushButton );
+  Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
+  Actor& buttonImage = pushButtonImpl.GetButtonImage();
+  Actor& selectedImage = pushButtonImpl.GetSelectedImage();
   Actor& backgroundImage = pushButtonImpl.GetBackgroundImage();
-  Actor& fadeOutBackgroundImage = pushButtonImpl.GetFadeOutBackgroundImage();
+  Actor& disabledImage = pushButtonImpl.GetDisabledImage();
+  Actor& disabledBackgroundImage = pushButtonImpl.GetDisabledBackgroundImage();
+  Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
+
+  Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
+
+  mDisabled = disabled;
 
   switch( mPaintState )
   {
-    case ReleasedState:             // FALLTHROUGH
-    case PressedState:
-    case ReleasedPressedTransition:
-    case PressedReleasedTransition:
+  case ReleasedState:
+  {
+    if( disabled )
     {
-      if( backgroundImage && backgroundImage.GetParent() )
-      {
-        StopFadeOutAnimation( pushButton );
-        FadeOutImage( pushButton, Background, backgroundImage  );
-
-        backgroundImage = image;
-
-        FadeInImage( pushButton, backgroundImage );
+      StopFadeOutAnimation( pushButton );
+      FadeOutImage( pushButton, Background, backgroundImage );
+      FadeOutImage( pushButton, Foreground, buttonImage );
+      FadeInImage( pushButton, disabledBackgroundImage );
+      FadeInImage( pushButton, disabledImage );
+      StartFadeOutAnimation( pushButton );
+      StartFadeInAnimation();
 
-        StartFadeOutAnimation( pushButton );
-        StartFadeInAnimation();
+      if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
+      {
+        mPaintState = ReleasedDisabledTransition;
       }
       else
       {
-        backgroundImage = image;
-        pushButton.Add( backgroundImage );
+        mPaintState = DisabledReleasedState;
       }
-      break;
     }
-    case ReleasedDimmedTransition: // FALLTHROUGH
-    case PressedDimmedTransition:
+    break;
+  }
+  case PressedState:
+  {
+    if( disabled )
     {
-      float opacity = 1.f;
-      if( fadeOutBackgroundImage )
-      {
-        opacity = fadeOutBackgroundImage.GetCurrentOpacity();
-      }
       StopFadeOutAnimation( pushButton );
-
-      // Replaces the button image.
-      backgroundImage = image;
-
-      pushButton.Add( backgroundImage );
-      FadeOutImage( pushButton, Background, backgroundImage, opacity );
-
+      FadeOutImage( pushButton, Background, backgroundImage );
+      FadeOutImage( pushButton, Foreground, selectedImage );
+      FadeInImage( pushButton, disabledBackgroundImage );
+      FadeInImage( pushButton, disabledImage );
       StartFadeOutAnimation( pushButton );
-      break;
+      StartFadeInAnimation();
+
+      if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
+      {
+        mPaintState = PressedDisabledTransition;
+      }
+      else
+      {
+        mPaintState = DisabledPressedState;
+      }
     }
-    case DimmedReleasedTransition: // FALLTHROUGH
-    case DimmedPressedTransition:
+    break;
+  }
+  case DisabledReleasedState:
+  {
+    if( !disabled )
     {
-      StopFadeInAnimation();
-      pushButton.Remove( backgroundImage );
-
-      backgroundImage = image;
-
+      StopFadeOutAnimation( pushButton );
+      FadeOutImage( pushButton, Background, disabledBackgroundImage );
+      FadeOutImage( pushButton, Foreground, disabledImage );
       FadeInImage( pushButton, backgroundImage );
+      FadeInImage( pushButton, buttonImage );
+      StartFadeOutAnimation( pushButton );
       StartFadeInAnimation();
-      break;
-    }
-    default:
-      backgroundImage = image;
-      break;
-    }
 
-  backgroundImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
-  backgroundImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
-  ApplyConstraint( backgroundImage, BACKGROUND_DEPTH );
-}
-
-void PushButtonDefaultPainter::SetPressedImage( Toolkit::PushButton& pushButton, Actor image )
-{
-  Toolkit::Internal::PushButton& pushButtonImpl = GetImplementation( pushButton );
-  Actor& pressedImage = pushButtonImpl.GetPressedImage();
-  Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
-
-  switch( mPaintState )
+      if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
+      {
+        mPaintState = DisabledReleasedTransition;
+      }
+      else
+      {
+        mPaintState = ReleasedState;
+      }
+    }
+    break;
+  }
+  case DisabledPressedState:
   {
-    case PressedState:
+    if( !disabled )
     {
-      if( pressedImage && pressedImage.GetParent() )
-      {
-        StopFadeOutAnimation( pushButton );
-        FadeOutImage( pushButton, Foreground, pressedImage  );
-
-        pressedImage = image;
-
-        FadeInImage( pushButton, pressedImage );
+      StopFadeOutAnimation( pushButton );
+      FadeOutImage( pushButton, Background, disabledBackgroundImage );
+      FadeOutImage( pushButton, Foreground, disabledImage );
+      FadeInImage( pushButton, backgroundImage );
+      FadeInImage( pushButton, selectedImage );
+      StartFadeOutAnimation( pushButton );
+      StartFadeInAnimation();
 
-        StartFadeOutAnimation( pushButton );
-        StartFadeInAnimation();
+      if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
+      {
+        mPaintState = DisabledPressedTransition;
       }
       else
       {
-        pressedImage = image;
-        pushButton.Add( pressedImage );
+        mPaintState = PressedState;
       }
-      break;
     }
-    case PressedReleasedTransition: // FALLTHROUGH
-    case PressedDimmedTransition:
+    break;
+  }
+  case ReleasedPressedTransition:
+  {
+    if( disabled )
     {
       float opacity = 1.f;
       if( fadeOutButtonImage )
@@ -270,384 +281,331 @@ void PushButtonDefaultPainter::SetPressedImage( Toolkit::PushButton& pushButton,
         opacity = fadeOutButtonImage.GetCurrentOpacity();
       }
       StopFadeOutAnimation( pushButton );
+      StopFadeInAnimation();
 
-      // Replaces the button image.
-      pressedImage = image;
+      FadeOutImage( pushButton, Foreground, selectedImage, 1.f - opacity );
+      FadeOutImage( pushButton, Background, backgroundImage );
 
-      pushButton.Add( pressedImage );
-      FadeOutImage( pushButton, Foreground, pressedImage, opacity );
+      FadeInImage( pushButton, disabledImage );
+      FadeInImage( pushButton, disabledBackgroundImage );
 
       StartFadeOutAnimation( pushButton );
-      break;
-    }
-    case ReleasedPressedTransition: // FALLTHROUGH
-    case DimmedPressedTransition:
-    {
-      StopFadeInAnimation();
-      pushButton.Remove( pressedImage );
-
-      pressedImage = image;
-
-      FadeInImage( pushButton, pressedImage );
       StartFadeInAnimation();
-      break;
-    }
-    default:
-      pressedImage = image;
-      break;
-  }
-
-  pressedImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
-  pressedImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
-  ApplyConstraint( pressedImage, FOREGROUND_DEPTH );
-}
-
-void PushButtonDefaultPainter::SetDimmedImage( Toolkit::PushButton& pushButton, Actor image )
-{
-  Toolkit::Internal::PushButton& pushButtonImpl = GetImplementation( pushButton );
-  Actor& dimmedImage = pushButtonImpl.GetDimmedImage();
-  Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
 
-  switch( mPaintState )
-  {
-    case DimmedReleasedState: // FALLTHROUGH
-    case DimmedPressedState:
-    {
-      if( dimmedImage && dimmedImage.GetParent() )
+      if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
       {
-        StopFadeOutAnimation( pushButton );
-        FadeOutImage( pushButton, Foreground, dimmedImage  );
-
-        dimmedImage = image;
-
-        FadeInImage( pushButton, dimmedImage );
-
-        StartFadeOutAnimation( pushButton );
-        StartFadeInAnimation();
+        mPaintState = PressedDisabledTransition;
       }
       else
       {
-        dimmedImage = image;
-        pushButton.Add( dimmedImage );
+        mPaintState = DisabledPressedState;
       }
-      break;
     }
-    case ReleasedDimmedTransition: // FALLTHROUGH
-    case PressedDimmedTransition:
+    break;
+  }
+  case PressedReleasedTransition:
+  {
+    if( disabled )
     {
+      float opacity = 1.f;
+      if( fadeOutButtonImage )
+      {
+        opacity = fadeOutButtonImage.GetCurrentOpacity();
+      }
+      StopFadeOutAnimation( pushButton );
       StopFadeInAnimation();
-      pushButton.Remove( dimmedImage );
 
-      dimmedImage = image;
+      FadeOutImage( pushButton, Foreground, buttonImage, 1.f - opacity );
+      FadeOutImage( pushButton, Background, backgroundImage );
+
+      FadeInImage( pushButton, disabledImage );
+      FadeInImage( pushButton, disabledBackgroundImage );
 
-      FadeInImage( pushButton, dimmedImage );
+      StartFadeOutAnimation( pushButton );
       StartFadeInAnimation();
-      break;
+
+      if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
+      {
+        mPaintState = ReleasedDisabledTransition;
+      }
+      else
+      {
+        mPaintState = DisabledReleasedState;
+      }
     }
-    case DimmedReleasedTransition: // FALLTHROUGH
-    case DimmedPressedTransition:
+    break;
+  }
+  case ReleasedDisabledTransition:
+  {
+    if( !disabled )
     {
       float opacity = 1.f;
       if( fadeOutButtonImage )
       {
         opacity = fadeOutButtonImage.GetCurrentOpacity();
       }
-      StopFadeOutAnimation( pushButton );
-
-      // Replaces the button image.
-      dimmedImage = image;
+      StopFadeOutAnimation( pushButton, false );
+      StopFadeInAnimation();
 
-      pushButton.Add( dimmedImage );
-      FadeOutImage( pushButton, Foreground, dimmedImage, opacity );
+      FadeOutImage( pushButton, Foreground, disabledImage, 1.f - opacity );
+      FadeOutImage( pushButton, Background, disabledBackgroundImage, 1.f - opacity );
+      FadeInImage( pushButton, buttonImage, opacity );
+      FadeInImage( pushButton, backgroundImage, opacity );
 
       StartFadeOutAnimation( pushButton );
-      break;
+      StartFadeInAnimation();
+
+      if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
+      {
+        mPaintState = DisabledReleasedTransition;
+      }
+      else
+      {
+        mPaintState = ReleasedState;
+      }
     }
-    default:
-      dimmedImage = image;
-      break;
+    break;
   }
-
-  dimmedImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
-  dimmedImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
-  ApplyConstraint( dimmedImage, FOREGROUND_DEPTH );
-}
-
-void PushButtonDefaultPainter::SetDimmedBackgroundImage( Toolkit::PushButton& pushButton, Actor image )
-{
-  Toolkit::Internal::PushButton& pushButtonImpl = GetImplementation( pushButton );
-  Actor& dimmedBackgroundImage = pushButtonImpl.GetDimmedBackgroundImage();
-  Actor& fadeOutBackgroundImage = pushButtonImpl.GetFadeOutBackgroundImage();
-
-  switch( mPaintState )
+  case DisabledReleasedTransition:
   {
-    case DimmedReleasedState: // FALLTHROUGH
-    case DimmedPressedState:
+    if( disabled )
     {
-      if( dimmedBackgroundImage && dimmedBackgroundImage.GetParent() )
+      float opacity = 1.f;
+      if( fadeOutButtonImage )
       {
-        StopFadeOutAnimation( pushButton );
-        FadeOutImage( pushButton, Background, dimmedBackgroundImage  );
+        opacity = fadeOutButtonImage.GetCurrentOpacity();
+      }
+      StopFadeOutAnimation( pushButton, false );
+      StopFadeInAnimation();
 
-        dimmedBackgroundImage = image;
+      FadeOutImage( pushButton, Foreground, buttonImage, 1.f - opacity );
+      FadeOutImage( pushButton, Background, backgroundImage, 1.f - opacity );
+      FadeInImage( pushButton, disabledImage, opacity );
+      FadeInImage( pushButton, disabledBackgroundImage, opacity );
 
-        FadeInImage( pushButton, dimmedBackgroundImage );
+      StartFadeOutAnimation( pushButton );
+      StartFadeInAnimation();
 
-        StartFadeOutAnimation( pushButton );
-        StartFadeInAnimation();
+      if( buttonImage || disabledImage || backgroundImage || disabledBackgroundImage )
+      {
+        mPaintState = ReleasedDisabledTransition;
       }
       else
       {
-        dimmedBackgroundImage = image;
-        pushButton.Add( dimmedBackgroundImage );
+        mPaintState = DisabledReleasedState;
       }
-      break;
     }
-    case ReleasedDimmedTransition: // FALLTHROUGH
-    case PressedDimmedTransition:
+    break;
+  }
+  case PressedDisabledTransition:
+  {
+    if( !disabled )
     {
+      float opacity = 1.f;
+      if( fadeOutButtonImage )
+      {
+        opacity = fadeOutButtonImage.GetCurrentOpacity();
+      }
+      StopFadeOutAnimation( pushButton, false );
       StopFadeInAnimation();
-      pushButton.Remove( dimmedBackgroundImage );
 
-      dimmedBackgroundImage = image;
+      FadeOutImage( pushButton, Foreground, disabledImage, 1.f - opacity );
+      FadeOutImage( pushButton, Background, disabledBackgroundImage, 1.f - opacity );
+      FadeInImage( pushButton, selectedImage, opacity );
+      FadeInImage( pushButton, backgroundImage, opacity );
 
-      FadeInImage( pushButton, dimmedBackgroundImage );
+      StartFadeOutAnimation( pushButton );
       StartFadeInAnimation();
-      break;
+
+      if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
+      {
+        mPaintState = DisabledPressedTransition;
+      }
+      else
+      {
+        mPaintState = PressedState;
+      }
     }
-    case DimmedReleasedTransition: // FALLTHROUGH
-    case DimmedPressedTransition:
+    break;
+  }
+  case DisabledPressedTransition:
+  {
+    if( disabled )
     {
       float opacity = 1.f;
-      if( fadeOutBackgroundImage )
+      if( fadeOutButtonImage )
       {
-        opacity = fadeOutBackgroundImage.GetCurrentOpacity();
+        opacity = fadeOutButtonImage.GetCurrentOpacity();
       }
-      StopFadeOutAnimation( pushButton );
-
-      // Replaces the button image.
-      dimmedBackgroundImage = image;
+      StopFadeOutAnimation( pushButton, false );
+      StopFadeInAnimation();
 
-      pushButton.Add( dimmedBackgroundImage );
-      FadeOutImage( pushButton, Background, dimmedBackgroundImage, opacity );
+      FadeOutImage( pushButton, Foreground, selectedImage, 1.f - opacity );
+      FadeOutImage( pushButton, Background, backgroundImage, 1.f - opacity );
+      FadeInImage( pushButton, disabledImage, opacity );
+      FadeInImage( pushButton, disabledBackgroundImage, opacity );
 
       StartFadeOutAnimation( pushButton );
-      break;
+      StartFadeInAnimation();
+
+      if( selectedImage || disabledImage || backgroundImage || disabledBackgroundImage )
+      {
+        mPaintState = PressedDisabledTransition;
+      }
+      else
+      {
+        mPaintState = DisabledPressedState;
+      }
     }
-    default:
-      dimmedBackgroundImage = image;
-      break;
+    break;
+  }
+  default:
+    break;
   }
-
-  dimmedBackgroundImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
-  dimmedBackgroundImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
-  ApplyConstraint( dimmedBackgroundImage, BACKGROUND_DEPTH );
 }
 
-void PushButtonDefaultPainter::SetLabelText( Toolkit::PushButton& pushButton, Actor text )
+void PushButtonDefaultPainter::SetAnimationTime( float animationTime )
 {
-  Toolkit::Internal::PushButton& pushButtonImpl = GetImplementation( pushButton );
-  Actor& label = pushButtonImpl.GetLabel();
-
-  if( label && label.GetParent() )
-  {
-    label.GetParent().Remove( label );
-  }
-
-  label = text;
-  label.SetAnchorPoint( AnchorPoint::CENTER );
-  label.SetParentOrigin( ParentOrigin::CENTER );
+  mAnimationTime = animationTime;
+}
 
-  label.SetPosition( 0.f, 0.f, LABEL_DEPTH );
-  label.SetSize( mSize );
+float PushButtonDefaultPainter::GetAnimationTime() const
+{
+  return mAnimationTime;
+}
 
-  pushButton.Add( label  );
+void PushButtonDefaultPainter::SetAutoRepeating( bool autorepeating )
+{
+  mAutoRepeating = autorepeating;
 }
 
-void PushButtonDefaultPainter::Initialize( Toolkit::Button& button )
+void PushButtonDefaultPainter::SetLabel( Toolkit::Button& button, Actor label )
 {
   Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
-  Actor& buttonImage = pushButtonImpl.GetButtonImage();
-  Actor& pressedImage = pushButtonImpl.GetPressedImage();
-  Actor& backgroundImage = pushButtonImpl.GetBackgroundImage();
-  Actor& dimmedImage = pushButtonImpl.GetDimmedImage();
-  Actor& dimmedBackgroundImage = pushButtonImpl.GetDimmedBackgroundImage();
-  Actor& label = pushButtonImpl.GetLabel();
+  Actor& labelActor = pushButtonImpl.GetLabel();
 
   Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
 
-  if( buttonImage )
+  if( labelActor && labelActor.GetParent() )
   {
-    SetButtonImage( pushButton, buttonImage );
+    labelActor.GetParent().Remove( labelActor );
   }
 
-  if( backgroundImage )
-  {
-    SetBackgroundImage( pushButton, backgroundImage );
-  }
+  labelActor = label;
+  labelActor.SetAnchorPoint( AnchorPoint::CENTER );
+  labelActor.SetParentOrigin( ParentOrigin::CENTER );
 
-  if( pressedImage )
-  {
-    SetPressedImage( pushButton, pressedImage );
-  }
-
-  if( dimmedImage )
-  {
-    SetDimmedImage( pushButton, dimmedImage );
-  }
-
-  if( dimmedBackgroundImage )
-  {
-    SetDimmedBackgroundImage( pushButton, dimmedBackgroundImage );
-  }
+  labelActor.SetPosition( 0.f, 0.f, LABEL_DEPTH );
+  labelActor.SetSize( mSize );
 
-  if( label )
-  {
-    SetLabelText( pushButton, label );
-  }
-
-  SetDimmed( pushButton, mDimmed );
+  pushButton.Add( labelActor  );
 }
 
-void PushButtonDefaultPainter::SetSize( Toolkit::Button& button, const Vector3& size )
-{
-  if( size != mSize )
-  {
-    mSize = size;
-
-    Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
-    Actor& buttonImage = pushButtonImpl.GetButtonImage();
-    Actor& pressedImage = pushButtonImpl.GetPressedImage();
-    Actor& backgroundImage = pushButtonImpl.GetBackgroundImage();
-    Actor& dimmedImage = pushButtonImpl.GetDimmedImage();
-    Actor& dimmedBackgroundImage = pushButtonImpl.GetDimmedBackgroundImage();
-    Actor& label = pushButtonImpl.GetLabel();
-
-    ApplyConstraint( buttonImage, FOREGROUND_DEPTH );
-    ApplyConstraint( backgroundImage, BACKGROUND_DEPTH );
-    ApplyConstraint( pressedImage, FOREGROUND_DEPTH );
-    ApplyConstraint( dimmedImage, FOREGROUND_DEPTH );
-    ApplyConstraint( dimmedBackgroundImage, BACKGROUND_DEPTH );
-
-    if( label )
-    {
-      label.SetPosition( 0.f, 0.f, LABEL_DEPTH );
-      label.SetSize( mSize );
-    }
-  }
-}
-
-void PushButtonDefaultPainter::SetDimmed( Toolkit::Button& button, bool dimmed )
+void PushButtonDefaultPainter::SetButtonImage( Toolkit::Button& button, Actor image )
 {
   Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
   Actor& buttonImage = pushButtonImpl.GetButtonImage();
-  Actor& pressedImage = pushButtonImpl.GetPressedImage();
-  Actor& backgroundImage = pushButtonImpl.GetBackgroundImage();
-  Actor& dimmedImage = pushButtonImpl.GetDimmedImage();
-  Actor& dimmedBackgroundImage = pushButtonImpl.GetDimmedBackgroundImage();
   Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
 
   Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
 
-  mDimmed = dimmed;
-
   switch( mPaintState )
   {
-  case ReleasedState:
-  {
-    if( dimmed )
+    case ReleasedState:
     {
-      StopFadeOutAnimation( pushButton );
-      FadeOutImage( pushButton, Background, backgroundImage );
-      FadeOutImage( pushButton, Foreground, buttonImage );
-      FadeInImage( pushButton, dimmedBackgroundImage );
-      FadeInImage( pushButton, dimmedImage );
-      StartFadeOutAnimation( pushButton );
-      StartFadeInAnimation();
-
-      if( buttonImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
+      if( buttonImage && buttonImage.GetParent() )
       {
-        mPaintState = ReleasedDimmedTransition;
+        StopFadeOutAnimation( pushButton );
+        FadeOutImage( pushButton, Foreground, buttonImage );
+
+        buttonImage = image;
+
+        FadeInImage( pushButton, buttonImage );
+
+        StartFadeOutAnimation( pushButton );
+        StartFadeInAnimation();
       }
       else
       {
-        mPaintState = DimmedReleasedState;
+        buttonImage = image;
+        pushButton.Add( buttonImage );
       }
+      break;
     }
-    break;
-  }
-  case PressedState:
-  {
-    if( dimmed )
+    case ReleasedPressedTransition: // FALLTHROUGH
+    case ReleasedDisabledTransition:
     {
-      StopFadeOutAnimation( pushButton );
-      FadeOutImage( pushButton, Background, backgroundImage );
-      FadeOutImage( pushButton, Foreground, pressedImage );
-      FadeInImage( pushButton, dimmedBackgroundImage );
-      FadeInImage( pushButton, dimmedImage );
-      StartFadeOutAnimation( pushButton );
-      StartFadeInAnimation();
-
-      if( pressedImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
-      {
-        mPaintState = PressedDimmedTransition;
-      }
-      else
+      float opacity = 1.f;
+      if( fadeOutButtonImage )
       {
-        mPaintState = DimmedPressedState;
+        opacity = fadeOutButtonImage.GetCurrentOpacity();
       }
+      StopFadeOutAnimation( pushButton );
+
+      // Replaces the button image.
+      buttonImage = image;
+
+      pushButton.Add( buttonImage );
+      FadeOutImage( pushButton, Foreground, buttonImage, opacity );
+
+      StartFadeOutAnimation( pushButton );
+      break;
     }
-    break;
-  }
-  case DimmedReleasedState:
-  {
-    if( !dimmed )
+    case PressedReleasedTransition: // FALLTHROUGH
+    case DisabledReleasedTransition:
     {
-      StopFadeOutAnimation( pushButton );
-      FadeOutImage( pushButton, Background, dimmedBackgroundImage );
-      FadeOutImage( pushButton, Foreground, dimmedImage );
-      FadeInImage( pushButton, backgroundImage );
+      StopFadeInAnimation();
+      pushButton.Remove( buttonImage );
+
+      buttonImage = image;
+
       FadeInImage( pushButton, buttonImage );
-      StartFadeOutAnimation( pushButton );
       StartFadeInAnimation();
-
-      if( buttonImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
-      {
-        mPaintState = DimmedReleasedTransition;
-      }
-      else
-      {
-        mPaintState = ReleasedState;
-      }
+      break;
     }
-    break;
+    default:
+      buttonImage = image;
+      break;
   }
-  case DimmedPressedState:
-  {
-    if( !dimmed )
-    {
-      StopFadeOutAnimation( pushButton );
-      FadeOutImage( pushButton, Background, dimmedBackgroundImage );
-      FadeOutImage( pushButton, Foreground, dimmedImage );
-      FadeInImage( pushButton, backgroundImage );
-      FadeInImage( pushButton, pressedImage );
-      StartFadeOutAnimation( pushButton );
-      StartFadeInAnimation();
 
-      if( pressedImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
+  buttonImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
+  buttonImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
+  ApplyConstraint( buttonImage, FOREGROUND_DEPTH );
+}
+
+void PushButtonDefaultPainter::SetSelectedImage( Toolkit::Button& button, Actor image )
+{
+  Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
+  Actor& selectedImage = pushButtonImpl.GetSelectedImage();
+  Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
+
+  Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
+
+  switch( mPaintState )
+  {
+    case PressedState:
+    {
+      if( selectedImage && selectedImage.GetParent() )
       {
-        mPaintState = DimmedPressedTransition;
+        StopFadeOutAnimation( pushButton );
+        FadeOutImage( pushButton, Foreground, selectedImage  );
+
+        selectedImage = image;
+
+        FadeInImage( pushButton, selectedImage );
+
+        StartFadeOutAnimation( pushButton );
+        StartFadeInAnimation();
       }
       else
       {
-        mPaintState = PressedState;
+        selectedImage = image;
+        pushButton.Add( selectedImage );
       }
+      break;
     }
-    break;
-  }
-  case ReleasedPressedTransition:
-  {
-    if( dimmed )
+    case PressedReleasedTransition: // FALLTHROUGH
+    case PressedDisabledTransition:
     {
       float opacity = 1.f;
       if( fadeOutButtonImage )
@@ -655,222 +613,279 @@ void PushButtonDefaultPainter::SetDimmed( Toolkit::Button& button, bool dimmed )
         opacity = fadeOutButtonImage.GetCurrentOpacity();
       }
       StopFadeOutAnimation( pushButton );
-      StopFadeInAnimation();
 
-      FadeOutImage( pushButton, Foreground, pressedImage, 1.f - opacity );
-      FadeOutImage( pushButton, Background, backgroundImage );
+      // Replaces the button image.
+      selectedImage = image;
 
-      FadeInImage( pushButton, dimmedImage );
-      FadeInImage( pushButton, dimmedBackgroundImage );
+      pushButton.Add( selectedImage );
+      FadeOutImage( pushButton, Foreground, selectedImage, opacity );
 
       StartFadeOutAnimation( pushButton );
+      break;
+    }
+    case ReleasedPressedTransition: // FALLTHROUGH
+    case DisabledPressedTransition:
+    {
+      StopFadeInAnimation();
+      pushButton.Remove( selectedImage );
+
+      selectedImage = image;
+
+      FadeInImage( pushButton, selectedImage );
       StartFadeInAnimation();
+      break;
+    }
+    default:
+      selectedImage = image;
+      break;
+  }
 
-      if( pressedImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
+  selectedImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
+  selectedImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
+  ApplyConstraint( selectedImage, FOREGROUND_DEPTH );
+}
+
+void PushButtonDefaultPainter::SetBackgroundImage( Toolkit::Button& button, Actor image )
+{
+  Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
+  Actor& backgroundImage = pushButtonImpl.GetBackgroundImage();
+  Actor& fadeOutBackgroundImage = pushButtonImpl.GetFadeOutBackgroundImage();
+
+  Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
+
+  switch( mPaintState )
+  {
+    case ReleasedState:             // FALLTHROUGH
+    case PressedState:
+    case ReleasedPressedTransition:
+    case PressedReleasedTransition:
+    {
+      if( backgroundImage && backgroundImage.GetParent() )
       {
-        mPaintState = PressedDimmedTransition;
+        StopFadeOutAnimation( pushButton );
+        FadeOutImage( pushButton, Background, backgroundImage  );
+
+        backgroundImage = image;
+
+        FadeInImage( pushButton, backgroundImage );
+
+        StartFadeOutAnimation( pushButton );
+        StartFadeInAnimation();
       }
       else
       {
-        mPaintState = DimmedPressedState;
+        backgroundImage = image;
+        pushButton.Add( backgroundImage );
       }
+      break;
     }
-    break;
-  }
-  case PressedReleasedTransition:
-  {
-    if( dimmed )
+    case ReleasedDisabledTransition: // FALLTHROUGH
+    case PressedDisabledTransition:
     {
       float opacity = 1.f;
-      if( fadeOutButtonImage )
+      if( fadeOutBackgroundImage )
       {
-        opacity = fadeOutButtonImage.GetCurrentOpacity();
+        opacity = fadeOutBackgroundImage.GetCurrentOpacity();
       }
       StopFadeOutAnimation( pushButton );
-      StopFadeInAnimation();
 
-      FadeOutImage( pushButton, Foreground, buttonImage, 1.f - opacity );
-      FadeOutImage( pushButton, Background, backgroundImage );
+      // Replaces the button image.
+      backgroundImage = image;
 
-      FadeInImage( pushButton, dimmedImage );
-      FadeInImage( pushButton, dimmedBackgroundImage );
+      pushButton.Add( backgroundImage );
+      FadeOutImage( pushButton, Background, backgroundImage, opacity );
 
       StartFadeOutAnimation( pushButton );
+      break;
+    }
+    case DisabledReleasedTransition: // FALLTHROUGH
+    case DisabledPressedTransition:
+    {
+      StopFadeInAnimation();
+      pushButton.Remove( backgroundImage );
+
+      backgroundImage = image;
+
+      FadeInImage( pushButton, backgroundImage );
       StartFadeInAnimation();
+      break;
+    }
+    default:
+      backgroundImage = image;
+      break;
+    }
+
+  backgroundImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
+  backgroundImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
+  ApplyConstraint( backgroundImage, BACKGROUND_DEPTH );
+}
 
-      if( buttonImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
+void PushButtonDefaultPainter::SetDisabledImage( Toolkit::Button& button, Actor image )
+{
+  Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
+  Actor& disabledImage = pushButtonImpl.GetDisabledImage();
+  Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
+
+  Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
+
+  switch( mPaintState )
+  {
+    case DisabledReleasedState: // FALLTHROUGH
+    case DisabledPressedState:
+    {
+      if( disabledImage && disabledImage.GetParent() )
       {
-        mPaintState = ReleasedDimmedTransition;
+        StopFadeOutAnimation( pushButton );
+        FadeOutImage( pushButton, Foreground, disabledImage  );
+
+        disabledImage = image;
+
+        FadeInImage( pushButton, disabledImage );
+
+        StartFadeOutAnimation( pushButton );
+        StartFadeInAnimation();
       }
       else
       {
-        mPaintState = DimmedReleasedState;
+        disabledImage = image;
+        pushButton.Add( disabledImage );
       }
+      break;
     }
-    break;
-  }
-  case ReleasedDimmedTransition:
-  {
-    if( !dimmed )
+    case ReleasedDisabledTransition: // FALLTHROUGH
+    case PressedDisabledTransition:
     {
-      float opacity = 1.f;
-      if( fadeOutButtonImage )
-      {
-        opacity = fadeOutButtonImage.GetCurrentOpacity();
-      }
-      StopFadeOutAnimation( pushButton, false );
       StopFadeInAnimation();
+      pushButton.Remove( disabledImage );
 
-      FadeOutImage( pushButton, Foreground, dimmedImage, 1.f - opacity );
-      FadeOutImage( pushButton, Background, dimmedBackgroundImage, 1.f - opacity );
-      FadeInImage( pushButton, buttonImage, opacity );
-      FadeInImage( pushButton, backgroundImage, opacity );
+      disabledImage = image;
 
-      StartFadeOutAnimation( pushButton );
+      FadeInImage( pushButton, disabledImage );
       StartFadeInAnimation();
-
-      if( buttonImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
-      {
-        mPaintState = DimmedReleasedTransition;
-      }
-      else
-      {
-        mPaintState = ReleasedState;
-      }
+      break;
     }
-    break;
-  }
-  case DimmedReleasedTransition:
-  {
-    if( dimmed )
+    case DisabledReleasedTransition: // FALLTHROUGH
+    case DisabledPressedTransition:
     {
       float opacity = 1.f;
       if( fadeOutButtonImage )
       {
         opacity = fadeOutButtonImage.GetCurrentOpacity();
       }
-      StopFadeOutAnimation( pushButton, false );
-      StopFadeInAnimation();
+      StopFadeOutAnimation( pushButton );
 
-      FadeOutImage( pushButton, Foreground, buttonImage, 1.f - opacity );
-      FadeOutImage( pushButton, Background, backgroundImage, 1.f - opacity );
-      FadeInImage( pushButton, dimmedImage, opacity );
-      FadeInImage( pushButton, dimmedBackgroundImage, opacity );
+      // Replaces the button image.
+      disabledImage = image;
 
-      StartFadeOutAnimation( pushButton );
-      StartFadeInAnimation();
+      pushButton.Add( disabledImage );
+      FadeOutImage( pushButton, Foreground, disabledImage, opacity );
 
-      if( buttonImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
-      {
-        mPaintState = ReleasedDimmedTransition;
-      }
-      else
-      {
-        mPaintState = DimmedReleasedState;
-      }
+      StartFadeOutAnimation( pushButton );
+      break;
     }
-    break;
+    default:
+      disabledImage = image;
+      break;
   }
-  case PressedDimmedTransition:
+
+  disabledImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
+  disabledImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
+  ApplyConstraint( disabledImage, FOREGROUND_DEPTH );
+}
+
+void PushButtonDefaultPainter::SetDisabledBackgroundImage( Toolkit::Button& button, Actor image )
+{
+  Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
+  Actor& disabledBackgroundImage = pushButtonImpl.GetDisabledBackgroundImage();
+  Actor& fadeOutBackgroundImage = pushButtonImpl.GetFadeOutBackgroundImage();
+
+  Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
+
+  switch( mPaintState )
   {
-    if( !dimmed )
+    case DisabledReleasedState: // FALLTHROUGH
+    case DisabledPressedState:
     {
-      float opacity = 1.f;
-      if( fadeOutButtonImage )
+      if( disabledBackgroundImage && disabledBackgroundImage.GetParent() )
       {
-        opacity = fadeOutButtonImage.GetCurrentOpacity();
-      }
-      StopFadeOutAnimation( pushButton, false );
-      StopFadeInAnimation();
+        StopFadeOutAnimation( pushButton );
+        FadeOutImage( pushButton, Background, disabledBackgroundImage  );
 
-      FadeOutImage( pushButton, Foreground, dimmedImage, 1.f - opacity );
-      FadeOutImage( pushButton, Background, dimmedBackgroundImage, 1.f - opacity );
-      FadeInImage( pushButton, pressedImage, opacity );
-      FadeInImage( pushButton, backgroundImage, opacity );
+        disabledBackgroundImage = image;
 
-      StartFadeOutAnimation( pushButton );
-      StartFadeInAnimation();
+        FadeInImage( pushButton, disabledBackgroundImage );
 
-      if( pressedImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
-      {
-        mPaintState = DimmedPressedTransition;
+        StartFadeOutAnimation( pushButton );
+        StartFadeInAnimation();
       }
       else
       {
-        mPaintState = PressedState;
+        disabledBackgroundImage = image;
+        pushButton.Add( disabledBackgroundImage );
       }
+      break;
     }
-    break;
-  }
-  case DimmedPressedTransition:
-  {
-    if( dimmed )
+    case ReleasedDisabledTransition: // FALLTHROUGH
+    case PressedDisabledTransition:
     {
-      float opacity = 1.f;
-      if( fadeOutButtonImage )
-      {
-        opacity = fadeOutButtonImage.GetCurrentOpacity();
-      }
-      StopFadeOutAnimation( pushButton, false );
       StopFadeInAnimation();
+      pushButton.Remove( disabledBackgroundImage );
 
-      FadeOutImage( pushButton, Foreground, pressedImage, 1.f - opacity );
-      FadeOutImage( pushButton, Background, backgroundImage, 1.f - opacity );
-      FadeInImage( pushButton, dimmedImage, opacity );
-      FadeInImage( pushButton, dimmedBackgroundImage, opacity );
+      disabledBackgroundImage = image;
 
-      StartFadeOutAnimation( pushButton );
+      FadeInImage( pushButton, disabledBackgroundImage );
       StartFadeInAnimation();
-
-      if( pressedImage || dimmedImage || backgroundImage || dimmedBackgroundImage )
-      {
-        mPaintState = PressedDimmedTransition;
-      }
-      else
+      break;
+    }
+    case DisabledReleasedTransition: // FALLTHROUGH
+    case DisabledPressedTransition:
+    {
+      float opacity = 1.f;
+      if( fadeOutBackgroundImage )
       {
-        mPaintState = DimmedPressedState;
+        opacity = fadeOutBackgroundImage.GetCurrentOpacity();
       }
-    }
-    break;
-  }
-  default:
-    break;
-  }
-}
+      StopFadeOutAnimation( pushButton );
 
-void PushButtonDefaultPainter::SetAnimationTime( float animationTime )
-{
-  mAnimationTime = animationTime;
-}
+      // Replaces the button image.
+      disabledBackgroundImage = image;
 
-float PushButtonDefaultPainter::GetAnimationTime() const
-{
-  return mAnimationTime;
-}
+      pushButton.Add( disabledBackgroundImage );
+      FadeOutImage( pushButton, Background, disabledBackgroundImage, opacity );
 
-void PushButtonDefaultPainter::SetAutoRepeating( bool autorepeating )
-{
-  mAutoRepeating = autorepeating;
+      StartFadeOutAnimation( pushButton );
+      break;
+    }
+    default:
+      disabledBackgroundImage = image;
+      break;
+  }
+
+  disabledBackgroundImage.SetAnchorPoint( AnchorPoint::TOP_LEFT );
+  disabledBackgroundImage.SetParentOrigin( ParentOrigin::TOP_LEFT );
+  ApplyConstraint( disabledBackgroundImage, BACKGROUND_DEPTH );
 }
 
-void PushButtonDefaultPainter::Pressed( Toolkit::PushButton& button )
+void PushButtonDefaultPainter::Pressed( Toolkit::Button& button )
 {
   Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
-  Actor& pressedImage = pushButtonImpl.GetPressedImage();
+  Actor& selectedImage = pushButtonImpl.GetSelectedImage();
   Actor& buttonImage = pushButtonImpl.GetButtonImage();
   Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
 
+  Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
+
   switch( mPaintState )
   {
     case ReleasedState:
     {
-      StopFadeOutAnimation( button );
-      FadeOutImage( button, Foreground, buttonImage );
-      FadeInImage( button, pressedImage );
-      StartFadeOutAnimation( button );
+      StopFadeOutAnimation( pushButton );
+      FadeOutImage( pushButton, Foreground, buttonImage );
+      FadeInImage( pushButton, selectedImage );
+      StartFadeOutAnimation( pushButton );
       StartFadeInAnimation();
 
-      if( buttonImage || pressedImage )
+      if( buttonImage || selectedImage )
       {
         mPaintState = ReleasedPressedTransition;
       }
@@ -895,16 +910,16 @@ void PushButtonDefaultPainter::Pressed( Toolkit::PushButton& button )
       {
         opacity = fadeOutButtonImage.GetCurrentOpacity();
       }
-      StopFadeOutAnimation( button, false );
+      StopFadeOutAnimation( pushButton, false );
       StopFadeInAnimation();
 
-      FadeOutImage( button, Foreground, buttonImage, 1.f - opacity );
-      FadeInImage( button, pressedImage, opacity );
+      FadeOutImage( pushButton, Foreground, buttonImage, 1.f - opacity );
+      FadeInImage( pushButton, selectedImage, opacity );
 
-      StartFadeOutAnimation( button );
+      StartFadeOutAnimation( pushButton );
       StartFadeInAnimation();
 
-      if( buttonImage || pressedImage )
+      if( buttonImage || selectedImage )
       {
         mPaintState = ReleasedPressedTransition;
       }
@@ -919,24 +934,26 @@ void PushButtonDefaultPainter::Pressed( Toolkit::PushButton& button )
   }
 }
 
-void PushButtonDefaultPainter::Released( Toolkit::PushButton& button )
+void PushButtonDefaultPainter::Released( Toolkit::Button& button )
 {
   Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
-  Actor& pressedImage = pushButtonImpl.GetPressedImage();
+  Actor& selectedImage = pushButtonImpl.GetSelectedImage();
   Actor& buttonImage = pushButtonImpl.GetButtonImage();
   Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
 
+  Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
+
   switch( mPaintState )
   {
     case PressedState:
     {
-      StopFadeOutAnimation( button );
-      FadeOutImage( button, Foreground, pressedImage );
-      FadeInImage( button, buttonImage );
-      StartFadeOutAnimation( button );
+      StopFadeOutAnimation( pushButton );
+      FadeOutImage( pushButton, Foreground, selectedImage );
+      FadeInImage( pushButton, buttonImage );
+      StartFadeOutAnimation( pushButton );
       StartFadeInAnimation();
 
-      if( buttonImage || pressedImage )
+      if( buttonImage || selectedImage )
       {
         mPaintState = PressedReleasedTransition;
       }
@@ -953,16 +970,16 @@ void PushButtonDefaultPainter::Released( Toolkit::PushButton& button )
       {
         opacity = fadeOutButtonImage.GetCurrentOpacity();
       }
-      StopFadeOutAnimation( button, false );
+      StopFadeOutAnimation( pushButton, false );
       StopFadeInAnimation();
 
-      FadeOutImage( button, Foreground, pressedImage, 1.f - opacity );
-      FadeInImage( button, buttonImage, opacity );
+      FadeOutImage( pushButton, Foreground, selectedImage, 1.f - opacity );
+      FadeInImage( pushButton, buttonImage, opacity );
 
-      StartFadeOutAnimation( button );
+      StartFadeOutAnimation( pushButton );
       StartFadeInAnimation();
 
-      if( buttonImage || pressedImage )
+      if( buttonImage || selectedImage )
       {
         mPaintState = PressedReleasedTransition;
       }
@@ -979,29 +996,31 @@ void PushButtonDefaultPainter::Released( Toolkit::PushButton& button )
   }
 }
 
-void PushButtonDefaultPainter::Clicked( Toolkit::PushButton& button )
+void PushButtonDefaultPainter::Clicked( Toolkit::Button& button )
 {
   Released( button );
 }
 
-void PushButtonDefaultPainter::Toggled( Toolkit::PushButton& button )
+void PushButtonDefaultPainter::Selected( Toolkit::Button& button )
 {
   Toolkit::Internal::PushButton& pushButtonImpl = GetPushButtonImpl( button );
-  Actor& pressedImage = pushButtonImpl.GetPressedImage();
+  Actor& selectedImage = pushButtonImpl.GetSelectedImage();
   Actor& buttonImage = pushButtonImpl.GetButtonImage();
   Actor& fadeOutButtonImage = pushButtonImpl.GetFadeOutButtonImage();
 
+  Toolkit::PushButton& pushButton = static_cast<Toolkit::PushButton&>( button );
+
   switch( mPaintState )
   {
     case ReleasedState:
     {
-      StopFadeOutAnimation( button );
-      FadeOutImage( button, Foreground, buttonImage );
-      FadeInImage( button, pressedImage );
-      StartFadeOutAnimation( button );
+      StopFadeOutAnimation( pushButton );
+      FadeOutImage( pushButton, Foreground, buttonImage );
+      FadeInImage( pushButton, selectedImage );
+      StartFadeOutAnimation( pushButton );
       StartFadeInAnimation();
 
-      if( buttonImage || pressedImage )
+      if( buttonImage || selectedImage )
       {
         mPaintState = ReleasedPressedTransition;
       }
@@ -1013,13 +1032,13 @@ void PushButtonDefaultPainter::Toggled( Toolkit::PushButton& button )
     }
     case PressedState:
     {
-      StopFadeOutAnimation( button );
-      FadeOutImage( button, Foreground, pressedImage );
-      FadeInImage( button, buttonImage );
-      StartFadeOutAnimation( button );
+      StopFadeOutAnimation( pushButton );
+      FadeOutImage( pushButton, Foreground, selectedImage );
+      FadeInImage( pushButton, buttonImage );
+      StartFadeOutAnimation( pushButton );
       StartFadeInAnimation();
 
-      if( buttonImage || pressedImage )
+      if( buttonImage || selectedImage )
       {
         mPaintState = PressedReleasedTransition;
       }
@@ -1036,16 +1055,16 @@ void PushButtonDefaultPainter::Toggled( Toolkit::PushButton& button )
       {
         opacity = fadeOutButtonImage.GetCurrentOpacity();
       }
-      StopFadeOutAnimation( button, false );
+      StopFadeOutAnimation( pushButton, false );
       StopFadeInAnimation();
 
-      FadeOutImage( button, Foreground, pressedImage, 1.f - opacity );
-      FadeInImage( button, buttonImage, opacity );
+      FadeOutImage( pushButton, Foreground, selectedImage, 1.f - opacity );
+      FadeInImage( pushButton, buttonImage, opacity );
 
-      StartFadeOutAnimation( button );
+      StartFadeOutAnimation( pushButton );
       StartFadeInAnimation();
 
-      if( buttonImage || pressedImage )
+      if( buttonImage || selectedImage )
       {
         mPaintState = PressedReleasedTransition;
       }
@@ -1062,16 +1081,16 @@ void PushButtonDefaultPainter::Toggled( Toolkit::PushButton& button )
       {
         opacity = 1.f - fadeOutButtonImage.GetCurrentOpacity();
       }
-      StopFadeOutAnimation( button, false );
+      StopFadeOutAnimation( pushButton, false );
       StopFadeInAnimation();
 
-      FadeOutImage( button, Foreground, buttonImage, 1.f - opacity );
-      FadeInImage( button, pressedImage, opacity );
+      FadeOutImage( pushButton, Foreground, buttonImage, 1.f - opacity );
+      FadeInImage( pushButton, selectedImage, opacity );
 
-      StartFadeOutAnimation( button );
+      StartFadeOutAnimation( pushButton );
       StartFadeInAnimation();
 
-      if( buttonImage || pressedImage )
+      if( buttonImage || selectedImage )
       {
         mPaintState = ReleasedPressedTransition;
       }
@@ -1223,22 +1242,22 @@ void PushButtonDefaultPainter::PressedReleasedFadeOutAnimationFinished( Dali::An
       mPaintState = ReleasedState;
       break;
     }
-    case ReleasedDimmedTransition:
+    case ReleasedDisabledTransition:
     {
-      mPaintState = DimmedReleasedState;
+      mPaintState = DisabledReleasedState;
       break;
     }
-    case DimmedReleasedTransition:
+    case DisabledReleasedTransition:
     {
       mPaintState = ReleasedState;
       break;
     }
-    case PressedDimmedTransition:
+    case PressedDisabledTransition:
     {
-      mPaintState = DimmedPressedState;
+      mPaintState = DisabledPressedState;
       break;
     }
-    case DimmedPressedTransition:
+    case DisabledPressedTransition:
     {
       mPaintState = PressedState;
       break;
@@ -1268,22 +1287,22 @@ void PushButtonDefaultPainter::PressedReleasedFadeInAnimationFinished( Dali::Ani
       mPaintState = ReleasedState;
       break;
     }
-    case ReleasedDimmedTransition:
+    case ReleasedDisabledTransition:
     {
-      mPaintState = DimmedReleasedState;
+      mPaintState = DisabledReleasedState;
       break;
     }
-    case DimmedReleasedTransition:
+    case DisabledReleasedTransition:
     {
       mPaintState = ReleasedState;
       break;
     }
-    case PressedDimmedTransition:
+    case PressedDisabledTransition:
     {
-      mPaintState = DimmedPressedState;
+      mPaintState = DisabledPressedState;
       break;
     }
-    case DimmedPressedTransition:
+    case DisabledPressedTransition:
     {
       mPaintState = PressedState;
       break;