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=b1f7474b87bb1ca0b9810d58d458da09057ff334;hp=0da7949571a7f01d61f6488c357444868ae222e1;hb=efc136204e9a4460a7a2421e673c873e23974a80;hpb=cc82bd9b187cda8fe2c8336b73fd1fa9376cfebd 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 0da7949..b1f7474 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,10 @@ // EXTERNAL INCLUDES #include #include +#include + +//INTERNAL INCLUDES +#include namespace Dali { @@ -34,13 +38,9 @@ namespace Internal namespace { -const float FOREGROUND_DEPTH( 0.5f ); -const float BACKGROUND_DEPTH( 0.25f ); - +const float DISTANCE_BETWEEN_IMAGE_AND_LABEL( 5.0f ); const float ANIMATION_TIME( 0.26f ); // EFL checkbox tick time -const Vector3 DISTANCE_BETWEEN_IMAGE_AND_LABEL(5.0f, 0.0f, 0.0f); - BaseHandle Create() { return Toolkit::CheckBoxButton::New(); @@ -48,6 +48,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() @@ -66,8 +70,7 @@ Dali::Toolkit::CheckBoxButton CheckBoxButton::New() } CheckBoxButton::CheckBoxButton() -: Button(), - mPaintState( UnselectedState ) +: Button() { SetTogglableButton( true ); @@ -76,162 +79,22 @@ CheckBoxButton::CheckBoxButton() CheckBoxButton::~CheckBoxButton() { - if( mCheckInAnimation ) - { - mCheckInAnimation.Clear(); - } } void CheckBoxButton::OnButtonInitialize() { // Wrap around all children - Self().SetResizePolicy( FIT_TO_CHILDREN, ALL_DIMENSIONS ); -} - -void CheckBoxButton::SetSelectedImage( Actor image ) -{ - Actor& selectedImage = GetSelectedImage(); - - switch( mPaintState ) - { - case SelectedState: - { - if( selectedImage && selectedImage.GetParent() ) - { - Self().Remove( selectedImage ); - } - - selectedImage = image; - Self().Add( selectedImage ); - break; - } - case UnselectedSelectedTransition: - { - StopCheckInAnimation(); - Self().Remove( selectedImage ); + Self().SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::ALL_DIMENSIONS ); - selectedImage = image; - Self().Add( selectedImage ); + 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 ); - mPaintState = SelectedState; - break; - } - default: - { - selectedImage = image; - break; - } - } - - selectedImage.SetAnchorPoint( AnchorPoint::TOP_LEFT ); - selectedImage.SetParentOrigin( ParentOrigin::TOP_LEFT ); - selectedImage.SetZ( FOREGROUND_DEPTH ); -} - -void CheckBoxButton::SetBackgroundImage( Actor image ) -{ - Actor& backgroundImage = GetBackgroundImage(); - - switch( mPaintState ) - { - case UnselectedState: // FALLTHROUGH - case SelectedState: - case UnselectedSelectedTransition: - { - if( backgroundImage && backgroundImage.GetParent() ) - { - Self().Remove( backgroundImage ); - - Actor& label = GetLabel(); - - if( label ) - { - backgroundImage.Remove( label ); - image.Add( label ); - } - } - - backgroundImage = image; - Self().Add( backgroundImage ); - break; - } - default: - { - backgroundImage = image; - break; - } - } - - backgroundImage.SetAnchorPoint( AnchorPoint::TOP_LEFT ); - backgroundImage.SetParentOrigin( ParentOrigin::TOP_LEFT ); - backgroundImage.SetZ( BACKGROUND_DEPTH ); -} - -void CheckBoxButton::SetDisabledSelectedImage( Actor image ) -{ - Actor& disabledSelectedImage = GetDisabledSelectedImage(); - - switch( mPaintState ) - { - case DisabledSelectedState: - { - if( disabledSelectedImage && disabledSelectedImage.GetParent() ) - { - Self().Remove( disabledSelectedImage ); - } - - disabledSelectedImage = image; - Self().Add( disabledSelectedImage ); - break; - } - default: - { - disabledSelectedImage = image; - break; - } - } - - disabledSelectedImage.SetAnchorPoint( AnchorPoint::TOP_LEFT ); - disabledSelectedImage.SetParentOrigin( ParentOrigin::TOP_LEFT ); - disabledSelectedImage.SetZ( FOREGROUND_DEPTH ); -} - -void CheckBoxButton::SetDisabledBackgroundImage( Actor image ) -{ - Actor& disabledBackgroundImage = GetDisabledBackgroundImage(); - - switch( mPaintState ) - { - case DisabledSelectedState: - case DisabledUnselectedState: - { - if( disabledBackgroundImage && disabledBackgroundImage.GetParent() ) - { - Self().Remove( disabledBackgroundImage ); - - Actor& label = GetLabel(); - - if( label ) - { - disabledBackgroundImage.Remove( label ); - image.Add( label ); - } - } - - disabledBackgroundImage = image; - Self().Add( disabledBackgroundImage ); - break; - } - default: - { - disabledBackgroundImage = image; - break; - } - } - - disabledBackgroundImage.SetAnchorPoint( AnchorPoint::TOP_LEFT ); - disabledBackgroundImage.SetParentOrigin( ParentOrigin::TOP_LEFT ); - disabledBackgroundImage.SetZ( BACKGROUND_DEPTH ); + SetButtonImage( ImageActor::New( buttonImage ) ); + SetSelectedImage( ImageActor::New( selectedImage ) ); + SetDisabledImage( ImageActor::New( disabledImage ) ); + SetDisabledSelectedImage( ImageActor::New( disabledSelectedImage ) ); } void CheckBoxButton::OnLabelSet() @@ -240,226 +103,135 @@ void CheckBoxButton::OnLabelSet() if( label ) { - label.SetParentOrigin( ParentOrigin::CENTER_RIGHT ); + label.SetParentOrigin( ParentOrigin::CENTER_LEFT ); label.SetAnchorPoint( AnchorPoint::CENTER_LEFT ); - label.TranslateBy( DISTANCE_BETWEEN_IMAGE_AND_LABEL ); if( IsDisabled() && GetDisabledBackgroundImage() ) { - GetDisabledBackgroundImage().Add( label ); + label.SetX( GetDisabledBackgroundImage().GetNaturalSize().width + DISTANCE_BETWEEN_IMAGE_AND_LABEL ); } else if ( GetBackgroundImage() ) { - GetBackgroundImage().Add( label ); + label.SetX( GetBackgroundImage().GetNaturalSize().width + DISTANCE_BETWEEN_IMAGE_AND_LABEL ); } - else + else if( IsSelected() && GetSelectedImage()) { - Self().Add( label ); + label.SetX( GetSelectedImage().GetNaturalSize().width + DISTANCE_BETWEEN_IMAGE_AND_LABEL ); } - } -} - -void CheckBoxButton::OnSelected( bool selected ) -{ - Actor& selectedImage = GetSelectedImage(); - - switch( mPaintState ) - { - case UnselectedState: + else if( GetButtonImage() ) { - AddChild( selectedImage ); - StartCheckInAnimation( selectedImage ); // Animate in the check actor - - mPaintState = UnselectedSelectedTransition; - break; + label.SetX( GetButtonImage().GetNaturalSize().width + DISTANCE_BETWEEN_IMAGE_AND_LABEL ); } - case SelectedState: + else { - RemoveChild( selectedImage ); - - mPaintState = UnselectedState; - break; + label.SetX( DISTANCE_BETWEEN_IMAGE_AND_LABEL ); } - case UnselectedSelectedTransition: - { - StopCheckInAnimation(); - RemoveChild( selectedImage ); - - mPaintState = UnselectedState; - break; - } - default: - break; } } -void CheckBoxButton::OnDisabled( bool disabled ) +void CheckBoxButton::OnDisabled() { Actor& backgroundImage = GetBackgroundImage(); - Actor& selectedImage = GetSelectedImage(); Actor& disabledBackgroundImage = GetDisabledBackgroundImage(); - Actor& disabledSelectedImage = GetDisabledSelectedImage(); - switch( mPaintState ) + Actor& label = GetLabel(); + if( label ) { - case UnselectedState: + if( IsDisabled() && disabledBackgroundImage ) { - if( disabled ) - { - RemoveChild( backgroundImage ); - AddChild( disabledBackgroundImage ); - mPaintState = DisabledUnselectedState; - } - break; + label.SetX( disabledBackgroundImage.GetNaturalSize().width + DISTANCE_BETWEEN_IMAGE_AND_LABEL ); } - case SelectedState: + else if( backgroundImage ) { - if( disabled ) - { - RemoveChild( backgroundImage ); - RemoveChild( selectedImage ); - AddChild( disabledBackgroundImage ); - AddChild( disabledSelectedImage ); - - mPaintState = DisabledSelectedState; - } - break; + label.SetX( backgroundImage.GetNaturalSize().width + DISTANCE_BETWEEN_IMAGE_AND_LABEL ); } - case DisabledUnselectedState: + else if( IsSelected() && GetSelectedImage()) { - if( !disabled ) - { - RemoveChild( disabledBackgroundImage ); - AddChild( backgroundImage ); - - mPaintState = UnselectedState; - } - break; + label.SetX( GetSelectedImage().GetNaturalSize().width + DISTANCE_BETWEEN_IMAGE_AND_LABEL ); } - case DisabledSelectedState: + else if( GetButtonImage() ) { - if( !disabled ) - { - RemoveChild( disabledBackgroundImage ); - RemoveChild( disabledSelectedImage ); - AddChild( backgroundImage ); - AddChild( selectedImage ); - - mPaintState = SelectedState; - } - break; + label.SetX( GetButtonImage().GetNaturalSize().width + DISTANCE_BETWEEN_IMAGE_AND_LABEL ); } - case UnselectedSelectedTransition: + else { - if( disabled ) - { - StopCheckInAnimation(); - - RemoveChild( backgroundImage ); - RemoveChild( selectedImage ); - AddChild( disabledBackgroundImage ); - AddChild( disabledSelectedImage ); - - mPaintState = DisabledSelectedState; - } - break; + label.SetX( DISTANCE_BETWEEN_IMAGE_AND_LABEL ); } - default: - break; } +} - Actor& label = GetLabel(); - - if( label ) +void CheckBoxButton::PrepareForTranstionIn( Actor actor ) +{ + Actor& selectedImage = GetSelectedImage(); + if( actor == selectedImage ) { - if( label.GetParent() ) - { - label.GetParent().Remove( label ); - } + actor.SetScale( Vector3( 0.0f, 1.0f, 1.0f ) ); - if( disabled && disabledBackgroundImage) + if( !mTickUVEffect ) { - disabledBackgroundImage.Add( label ); + mTickUVEffect = CreateImageRegionEffect(); } - else if( backgroundImage ) + mTickUVEffect.SetUniform("uBottomRight", Vector2( 0.0f, 1.0f ) ); + + ImageActor imageActor = ImageActor::DownCast( actor ); + if( imageActor ) { - backgroundImage.Add( label ); + imageActor.SetShaderEffect( mTickUVEffect ); } } } -void CheckBoxButton::AddChild( Actor& actor ) +void CheckBoxButton::PrepareForTranstionOut( Actor actor ) { - if( actor ) - { - Self().Add( actor); - } -} - -void CheckBoxButton::RemoveChild( Actor& actor ) -{ - if( actor ) + Actor& selectedImage = GetSelectedImage(); + if( actor == selectedImage ) { - Self().Remove( actor ); - } -} + actor.SetScale( Vector3::ONE ); -void CheckBoxButton::StartCheckInAnimation( Actor& actor ) -{ - if( actor ) - { if( !mTickUVEffect ) { - ImageActor imageActor = ImageActor::DownCast( actor ); - mTickUVEffect = ImageRegionEffect::New(); - imageActor.SetShaderEffect( mTickUVEffect ); + mTickUVEffect = CreateImageRegionEffect(); } + mTickUVEffect.SetUniform("uBottomRight", Vector2::ONE ); - actor.SetScale( Vector3( 0.0f, 1.0f, 1.0f ) ); - - mTickUVEffect.SetBottomRight( Vector2( 0.0f, 1.0f ) ); - - if( !mCheckInAnimation ) + ImageActor imageActor = ImageActor::DownCast( actor ); + if( imageActor ) { - mCheckInAnimation = Dali::Animation::New( GetAnimationTime() ); + imageActor.SetShaderEffect( mTickUVEffect ); } - - // UV anim - mCheckInAnimation.AnimateTo( Property( mTickUVEffect, mTickUVEffect.GetBottomRightPropertyName() ), Vector2( 1.0f, 1.0f ) ); - - // Actor size anim - mCheckInAnimation.AnimateTo( Property( actor, Actor::Property::SCALE_X ), 1.0f ); - - mCheckInAnimation.FinishedSignal().Connect( this, &CheckBoxButton::CheckInAnimationFinished ); - mCheckInAnimation.Play(); - } -} - -void CheckBoxButton::StopCheckInAnimation() -{ - if( mCheckInAnimation ) - { - mCheckInAnimation.Clear(); - mCheckInAnimation.Reset(); } } -void CheckBoxButton::CheckInAnimationFinished( Dali::Animation& source ) +void CheckBoxButton::OnTransitionIn( Actor actor ) { - switch( mPaintState ) + Actor& selectedImage = GetSelectedImage(); + if( actor && actor == selectedImage ) { - case UnselectedSelectedTransition: + if( GetPaintState() == UnselectedState ) { - mPaintState = SelectedState; - break; + 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 ); + } } - default: + else { - break; + //explicitly end the swipe animation + actor.SetScale( Vector3::ONE ); + if( mTickUVEffect ) + { + mTickUVEffect.SetUniform("uBottomRight", Vector2::ONE ); + } } } - - StopCheckInAnimation(); } } // namespace Internal