X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fbuttons%2Fcheck-box-button-impl.cpp;h=e468c0e39622762cc1d712e3aeaed0015d3eefb5;hp=f5c908d78527e9bf13d012d5ee83e0238e712dd4;hb=bd4f4c078bc02ca029fdbef266f6e7b5b79650e2;hpb=d3a00dc1c24ece2488696c0b518013ad6d97969b diff --git a/dali-toolkit/internal/controls/buttons/check-box-button-impl.cpp b/dali-toolkit/internal/controls/buttons/check-box-button-impl.cpp index f5c908d..e468c0e 100644 --- a/dali-toolkit/internal/controls/buttons/check-box-button-impl.cpp +++ b/dali-toolkit/internal/controls/buttons/check-box-button-impl.cpp @@ -21,6 +21,7 @@ // EXTERNAL INCLUDES #include #include +#include //INTERNAL INCLUDES #include @@ -39,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() { @@ -47,6 +50,10 @@ BaseHandle Create() TypeRegistration mType( typeid(Toolkit::CheckBoxButton), typeid(Toolkit::Button), Create ); +const char* const UNSELECTED_BUTTON_IMAGE_DIR = DALI_IMAGE_DIR "checkbox-unselected.png"; +const char* const SELECTED_BUTTON_IMAGE_DIR = DALI_IMAGE_DIR "checkbox-selected.png"; +const char* const DISABLED_UNSELECTED_BUTTON_IMAGE_DIR = DALI_IMAGE_DIR "checkbox-unselected-disabled.png"; +const char* const DISABLED_SELECTED_BUTTON_IMAGE_DIR = DALI_IMAGE_DIR "checkbox-selected-diabled.png"; } Dali::Toolkit::CheckBoxButton CheckBoxButton::New() @@ -74,21 +81,22 @@ CheckBoxButton::CheckBoxButton() CheckBoxButton::~CheckBoxButton() { - if( mTransitionAnimation ) - { - mTransitionAnimation.Clear(); - } } void CheckBoxButton::OnButtonInitialize() { // Wrap around all children Self().SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::ALL_DIMENSIONS ); + + 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 ) { @@ -103,179 +111,128 @@ void CheckBoxButton::OnLabelSet() { label.SetX( GetBackgroundImage().GetNaturalSize().width + DISTANCE_BETWEEN_IMAGE_AND_LABEL ); } - else - { - label.SetX( DISTANCE_BETWEEN_IMAGE_AND_LABEL ); - } - } -} - -bool CheckBoxButton::OnSelected() -{ - Actor& selectedImage = GetSelectedImage(); - - PaintState paintState = GetPaintState(); - - switch( paintState ) - { - case UnselectedState: - { - StartTransitionAnimation( selectedImage ); - break; - } - case SelectedState: + else if( IsSelected() && GetSelectedImage()) { - RemoveChild( selectedImage ); - break; + label.SetX( GetSelectedImage().GetNaturalSize().width + DISTANCE_BETWEEN_IMAGE_AND_LABEL ); } - case UnselectedSelectedTransition: + else if( GetUnselectedImage() ) { - StopTransitionAnimation( false ); - RemoveChild( selectedImage ); - break; + label.SetX( GetUnselectedImage().GetNaturalSize().width + DISTANCE_BETWEEN_IMAGE_AND_LABEL ); } - default: + else { - break; + label.SetX( DISTANCE_BETWEEN_IMAGE_AND_LABEL ); } } - - if( mTransitionAnimation ) - { - return true; - } - - return false; } -bool CheckBoxButton::OnDisabled() +void CheckBoxButton::OnDisabled() { Actor& backgroundImage = GetBackgroundImage(); - Actor& selectedImage = GetSelectedImage(); Actor& disabledBackgroundImage = GetDisabledBackgroundImage(); - Actor& disabledSelectedImage = GetDisabledSelectedImage(); - - PaintState paintState = GetPaintState(); - switch( paintState ) + Actor& label = GetLabelActor(); + if( label ) { - case UnselectedState: - { - RemoveChild( backgroundImage ); - break; - } - case SelectedState: + if( IsDisabled() && disabledBackgroundImage ) { - RemoveChild( backgroundImage ); - RemoveChild( selectedImage ); - break; + label.SetX( disabledBackgroundImage.GetNaturalSize().width + DISTANCE_BETWEEN_IMAGE_AND_LABEL ); } - case DisabledUnselectedState: + else if( backgroundImage ) { - RemoveChild( disabledBackgroundImage ); - break; + label.SetX( backgroundImage.GetNaturalSize().width + DISTANCE_BETWEEN_IMAGE_AND_LABEL ); } - case DisabledSelectedState: + else if( IsSelected() && GetSelectedImage()) { - RemoveChild( disabledBackgroundImage ); - RemoveChild( disabledSelectedImage ); - break; + label.SetX( GetSelectedImage().GetNaturalSize().width + DISTANCE_BETWEEN_IMAGE_AND_LABEL ); } - case UnselectedSelectedTransition: + else if( GetUnselectedImage() ) { - StopTransitionAnimation(); - - RemoveChild( backgroundImage ); - RemoveChild( selectedImage ); - break; + label.SetX( GetUnselectedImage().GetNaturalSize().width + DISTANCE_BETWEEN_IMAGE_AND_LABEL ); } - default: + else { - break; + label.SetX( DISTANCE_BETWEEN_IMAGE_AND_LABEL ); } } +} - Actor& label = GetLabel(); - - if( label ) +void CheckBoxButton::PrepareForTranstionIn( Actor actor ) +{ + Actor& selectedImage = GetSelectedImage(); + if( actor == selectedImage ) { - if( IsDisabled() && disabledBackgroundImage) - { - label.SetX( disabledBackgroundImage.GetNaturalSize().width + DISTANCE_BETWEEN_IMAGE_AND_LABEL ); - } - else if( backgroundImage ) + actor.SetScale( Vector3( 0.0f, 1.0f, 1.0f ) ); + + if( !mTickUVEffect ) { - label.SetX( backgroundImage.GetNaturalSize().width + DISTANCE_BETWEEN_IMAGE_AND_LABEL ); + mTickUVEffect = CreateImageRegionEffect(); } - else + mTickUVEffect.SetUniform( "uBottomRight", Vector2( 0.0f, 1.0f ) ); + + ImageActor imageActor = ImageActor::DownCast( actor ); + if( imageActor ) { - label.SetX( DISTANCE_BETWEEN_IMAGE_AND_LABEL ); + // Ensure the tick effect is rendered above the reset of the checkbox. + imageActor.SetSortModifier( SHADER_DEPTH_OFFSET ); + imageActor.SetShaderEffect( mTickUVEffect ); } } - - if( mTransitionAnimation ) - { - return true; - } - - return false; } -void CheckBoxButton::StopAllAnimations() +void CheckBoxButton::PrepareForTranstionOut( Actor actor ) { - StopTransitionAnimation(); -} - -void CheckBoxButton::StartTransitionAnimation( Actor& actor ) -{ - if( actor ) + Actor& selectedImage = GetSelectedImage(); + if( actor == selectedImage ) { + actor.SetScale( Vector3::ONE ); + if( !mTickUVEffect ) { - ImageActor imageActor = ImageActor::DownCast( actor ); mTickUVEffect = CreateImageRegionEffect(); - imageActor.SetShaderEffect( mTickUVEffect ); } + mTickUVEffect.SetUniform( "uBottomRight", Vector2::ONE ); - actor.SetScale( Vector3( 0.0f, 1.0f, 1.0f ) ); - - mTickUVEffect.SetUniform("uBottomRight", Vector2( 0.0f, 1.0f ) ); - - if( !mTransitionAnimation ) + ImageActor imageActor = ImageActor::DownCast( actor ); + if( imageActor ) { - mTransitionAnimation = Dali::Animation::New( GetAnimationTime() ); + imageActor.SetShaderEffect( mTickUVEffect ); } - - // UV anim - mTransitionAnimation.AnimateTo( Property( mTickUVEffect, "uBottomRight" ), Vector2( 1.0f, 1.0f ) ); - - // Actor size anim - mTransitionAnimation.AnimateTo( Property( actor, Actor::Property::SCALE_X ), 1.0f ); - - mTransitionAnimation.FinishedSignal().Connect( this, &CheckBoxButton::TransitionAnimationFinished ); - mTransitionAnimation.Play(); } } -void CheckBoxButton::StopTransitionAnimation( bool remove ) +void CheckBoxButton::OnTransitionIn( Actor actor ) { - if( mTransitionAnimation ) - { - mTransitionAnimation.Clear(); - mTransitionAnimation.Reset(); - } - - if( remove ) + Actor& selectedImage = GetSelectedImage(); + if( actor && actor == selectedImage ) { - UpdatePaintTransitionState(); + if( GetPaintState() == UnselectedState ) + { + Dali::Animation transitionAnimation = GetTransitionAnimation(); + if( transitionAnimation ) + { + DALI_ASSERT_DEBUG( mTickUVEffect ); + if( mTickUVEffect ) + { + // UV anim + transitionAnimation.AnimateTo( Property( mTickUVEffect, "uBottomRight" ), Vector2::ONE ); + } + // Actor size anim + transitionAnimation.AnimateTo( Property( actor, Actor::Property::SCALE_X ), 1.0f ); + } + } + else + { + //explicitly end the swipe animation + actor.SetScale( Vector3::ONE ); + if( mTickUVEffect ) + { + mTickUVEffect.SetUniform( "uBottomRight", Vector2::ONE ); + } + } } } -void CheckBoxButton::TransitionAnimationFinished( Dali::Animation& source ) -{ - StopTransitionAnimation(); -} - } // namespace Internal } // namespace Toolkit