Fix for checkbox tick not animating on gradually
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / controls / buttons / check-box-button-impl.cpp
index b1f7474..e468c0e 100644 (file)
@@ -40,6 +40,8 @@ namespace
 
 const float DISTANCE_BETWEEN_IMAGE_AND_LABEL( 5.0f );
 const float ANIMATION_TIME( 0.26f );  // EFL checkbox tick time
+// Required for the UV reveal shader to render the tick on top of the rest of the checkbox.
+const float SHADER_DEPTH_OFFSET = 1.0f;
 
 BaseHandle Create()
 {
@@ -86,20 +88,15 @@ void CheckBoxButton::OnButtonInitialize()
   // Wrap around all children
   Self().SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::ALL_DIMENSIONS );
 
-  Image buttonImage = Dali::ResourceImage::New( UNSELECTED_BUTTON_IMAGE_DIR, ResourceImage::ON_DEMAND, ResourceImage::NEVER );
-  Image selectedImage = Dali::ResourceImage::New( SELECTED_BUTTON_IMAGE_DIR, ResourceImage::ON_DEMAND, ResourceImage::NEVER );
-  Image disabledImage = Dali::ResourceImage::New( DISABLED_UNSELECTED_BUTTON_IMAGE_DIR, ResourceImage::ON_DEMAND, ResourceImage::NEVER );
-  Image disabledSelectedImage = Dali::ResourceImage::New( DISABLED_SELECTED_BUTTON_IMAGE_DIR, ResourceImage::ON_DEMAND, ResourceImage::NEVER );
-
-  SetButtonImage( ImageActor::New( buttonImage ) );
-  SetSelectedImage( ImageActor::New( selectedImage ) );
-  SetDisabledImage( ImageActor::New( disabledImage ) );
-  SetDisabledSelectedImage( ImageActor::New( disabledSelectedImage ) );
+  SetUnselectedImage( UNSELECTED_BUTTON_IMAGE_DIR );
+  SetSelectedImage( SELECTED_BUTTON_IMAGE_DIR );
+  SetDisabledImage( DISABLED_UNSELECTED_BUTTON_IMAGE_DIR );
+  SetDisabledSelectedImage( DISABLED_SELECTED_BUTTON_IMAGE_DIR );
 }
 
-void CheckBoxButton::OnLabelSet()
+void CheckBoxButton::OnLabelSet( bool noPadding )
 {
-  Actor& label = GetLabel();
+  Actor& label = GetLabelActor();
 
   if( label )
   {
@@ -118,9 +115,9 @@ void CheckBoxButton::OnLabelSet()
     {
       label.SetX( GetSelectedImage().GetNaturalSize().width + DISTANCE_BETWEEN_IMAGE_AND_LABEL );
     }
-    else if( GetButtonImage() )
+    else if( GetUnselectedImage() )
     {
-      label.SetX( GetButtonImage().GetNaturalSize().width + DISTANCE_BETWEEN_IMAGE_AND_LABEL );
+      label.SetX( GetUnselectedImage().GetNaturalSize().width + DISTANCE_BETWEEN_IMAGE_AND_LABEL );
     }
     else
     {
@@ -134,7 +131,7 @@ void CheckBoxButton::OnDisabled()
   Actor& backgroundImage = GetBackgroundImage();
   Actor& disabledBackgroundImage = GetDisabledBackgroundImage();
 
-  Actor& label = GetLabel();
+  Actor& label = GetLabelActor();
   if( label )
   {
     if( IsDisabled() && disabledBackgroundImage )
@@ -149,9 +146,9 @@ void CheckBoxButton::OnDisabled()
     {
       label.SetX( GetSelectedImage().GetNaturalSize().width + DISTANCE_BETWEEN_IMAGE_AND_LABEL );
     }
-    else if( GetButtonImage() )
+    else if( GetUnselectedImage() )
     {
-      label.SetX( GetButtonImage().GetNaturalSize().width + DISTANCE_BETWEEN_IMAGE_AND_LABEL );
+      label.SetX( GetUnselectedImage().GetNaturalSize().width + DISTANCE_BETWEEN_IMAGE_AND_LABEL );
     }
     else
     {
@@ -171,11 +168,13 @@ void CheckBoxButton::PrepareForTranstionIn( Actor actor )
     {
       mTickUVEffect = CreateImageRegionEffect();
     }
-    mTickUVEffect.SetUniform("uBottomRight", Vector2( 0.0f, 1.0f ) );
+    mTickUVEffect.SetUniform( "uBottomRight", Vector2( 0.0f, 1.0f ) );
 
     ImageActor imageActor = ImageActor::DownCast( actor );
     if( imageActor )
     {
+      // Ensure the tick effect is rendered above the reset of the checkbox.
+      imageActor.SetSortModifier( SHADER_DEPTH_OFFSET );
       imageActor.SetShaderEffect( mTickUVEffect );
     }
   }
@@ -190,9 +189,9 @@ void CheckBoxButton::PrepareForTranstionOut( Actor actor )
 
     if( !mTickUVEffect )
     {
-        mTickUVEffect = CreateImageRegionEffect();
+      mTickUVEffect = CreateImageRegionEffect();
     }
-    mTickUVEffect.SetUniform("uBottomRight", Vector2::ONE );
+    mTickUVEffect.SetUniform( "uBottomRight", Vector2::ONE );
 
     ImageActor imageActor = ImageActor::DownCast( actor );
     if( imageActor )
@@ -228,7 +227,7 @@ void CheckBoxButton::OnTransitionIn( Actor actor )
       actor.SetScale( Vector3::ONE );
       if( mTickUVEffect )
       {
-       mTickUVEffect.SetUniform("uBottomRight", Vector2::ONE );
+        mTickUVEffect.SetUniform( "uBottomRight", Vector2::ONE );
       }
     }
   }