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=3f4188bfbae83bf3c9b8fe8c23323e654f5e307d;hp=cc90db810a944c6666b777ae0f279473ffae17b2;hb=f2039d47f9bed8104575da80a2ecf0bb6e37ff8d;hpb=afb47f411d700d2b4be6415b61995cde5c37126c 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 cc90db8..3f4188b 100644 --- a/dali-toolkit/internal/controls/buttons/check-box-button-impl.cpp +++ b/dali-toolkit/internal/controls/buttons/check-box-button-impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * Copyright (c) 2021 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. @@ -19,40 +19,42 @@ #include "check-box-button-impl.h" // EXTERNAL INCLUDES -#include +#include #include +//INTERNAL INCLUDES +#include +#include +#include + +#if defined(DEBUG_ENABLED) +extern Debug::Filter* gLogButtonFilter; +#endif + namespace Dali { - namespace Toolkit { - namespace Internal { - namespace { - -const float DISTANCE_BETWEEN_IMAGE_AND_LABEL( 5.0f ); -const float ANIMATION_TIME( 0.26f ); // EFL checkbox tick time - BaseHandle Create() { return Toolkit::CheckBoxButton::New(); } -TypeRegistration mType( typeid(Toolkit::CheckBoxButton), typeid(Toolkit::Button), Create ); +TypeRegistration mType(typeid(Toolkit::CheckBoxButton), typeid(Toolkit::Button), Create); -} +} // namespace Dali::Toolkit::CheckBoxButton CheckBoxButton::New() { // Create the implementation, temporarily owned on stack - IntrusivePtr< CheckBoxButton > internalCheckBoxButton = new CheckBoxButton(); + IntrusivePtr internalCheckBoxButton = new CheckBoxButton(); // Pass ownership to CustomActor - Dali::Toolkit::CheckBoxButton checkBoxButton( *internalCheckBoxButton ); + Dali::Toolkit::CheckBoxButton checkBoxButton(*internalCheckBoxButton); // Second-phase init of the implementation // This can only be done after the CustomActor connection has been made... @@ -64,213 +66,40 @@ Dali::Toolkit::CheckBoxButton CheckBoxButton::New() CheckBoxButton::CheckBoxButton() : Button() { - SetTogglableButton( true ); - - SetAnimationTime( ANIMATION_TIME ); + SetTogglableButton(true); } CheckBoxButton::~CheckBoxButton() { - if( mTransitionAnimation ) - { - mTransitionAnimation.Clear(); - } -} - -void CheckBoxButton::OnButtonInitialize() -{ - // Wrap around all children - Self().SetResizePolicy( FIT_TO_CHILDREN, ALL_DIMENSIONS ); } -void CheckBoxButton::OnLabelSet() +void CheckBoxButton::OnInitialize() { - Actor& label = GetLabel(); - - if( label ) - { - label.SetParentOrigin( ParentOrigin::CENTER_LEFT ); - label.SetAnchorPoint( AnchorPoint::CENTER_LEFT ); + Button::OnInitialize(); - if( IsDisabled() && GetDisabledBackgroundImage() ) - { - label.SetX( GetDisabledBackgroundImage().GetNaturalSize().width + DISTANCE_BETWEEN_IMAGE_AND_LABEL ); - } - else if ( GetBackgroundImage() ) - { - label.SetX( GetBackgroundImage().GetNaturalSize().width + DISTANCE_BETWEEN_IMAGE_AND_LABEL ); - } - else - { - label.SetX( DISTANCE_BETWEEN_IMAGE_AND_LABEL ); - } - } + DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { + return std::unique_ptr( + new AccessibleImpl(actor, Dali::Accessibility::Role::CHECK_BOX)); + }); } -bool CheckBoxButton::OnSelected() +Dali::Accessibility::States CheckBoxButton::AccessibleImpl::CalculateStates() { - Actor& selectedImage = GetSelectedImage(); - - PaintState paintState = GetPaintState(); - - switch( paintState ) - { - case UnselectedState: - { - StartTransitionAnimation( selectedImage ); - break; - } - case SelectedState: - { - RemoveChild( selectedImage ); - break; - } - case UnselectedSelectedTransition: - { - StopTransitionAnimation( false ); - RemoveChild( selectedImage ); - break; - } - default: - { - break; - } - } - - if( mTransitionAnimation ) - { - return true; - } - - return false; + auto tmp = Button::AccessibleImpl::CalculateStates(); + auto slf = Toolkit::Button::DownCast(self); + if(slf.GetProperty(Toolkit::Button::Property::SELECTED)) + tmp[Dali::Accessibility::State::CHECKED] = true; + return tmp; } -bool CheckBoxButton::OnDisabled() +void CheckBoxButton::OnStateChange(State newState) { - Actor& backgroundImage = GetBackgroundImage(); - Actor& selectedImage = GetSelectedImage(); - Actor& disabledBackgroundImage = GetDisabledBackgroundImage(); - Actor& disabledSelectedImage = GetDisabledSelectedImage(); - - PaintState paintState = GetPaintState(); - - switch( paintState ) + // TODO: replace it with OnPropertySet hook once Button::Property::SELECTED will be consistently used + if(Dali::Accessibility::IsUp() && (newState == SELECTED_STATE || newState == UNSELECTED_STATE)) { - case UnselectedState: - { - RemoveChild( backgroundImage ); - break; - } - case SelectedState: - { - RemoveChild( backgroundImage ); - RemoveChild( selectedImage ); - break; - } - case DisabledUnselectedState: - { - RemoveChild( disabledBackgroundImage ); - break; - } - case DisabledSelectedState: - { - RemoveChild( disabledBackgroundImage ); - RemoveChild( disabledSelectedImage ); - break; - } - case UnselectedSelectedTransition: - { - StopTransitionAnimation(); - - RemoveChild( backgroundImage ); - RemoveChild( selectedImage ); - break; - } - default: - { - break; - } + Dali::Accessibility::Accessible::Get(Self())->EmitStateChanged( + Dali::Accessibility::State::CHECKED, newState == SELECTED_STATE ? 1 : 0, 0); } - - Actor& label = GetLabel(); - - if( label ) - { - if( IsDisabled() && disabledBackgroundImage) - { - label.SetX( disabledBackgroundImage.GetNaturalSize().width + DISTANCE_BETWEEN_IMAGE_AND_LABEL ); - } - else if( backgroundImage ) - { - label.SetX( backgroundImage.GetNaturalSize().width + DISTANCE_BETWEEN_IMAGE_AND_LABEL ); - } - else - { - label.SetX( DISTANCE_BETWEEN_IMAGE_AND_LABEL ); - } - } - - if( mTransitionAnimation ) - { - return true; - } - - return false; -} - -void CheckBoxButton::StopAllAnimations() -{ - StopTransitionAnimation(); -} - -void CheckBoxButton::StartTransitionAnimation( Actor& actor ) -{ - if( actor ) - { - if( !mTickUVEffect ) - { - ImageActor imageActor = ImageActor::DownCast( actor ); - mTickUVEffect = ImageRegionEffect::New(); - imageActor.SetShaderEffect( mTickUVEffect ); - } - - actor.SetScale( Vector3( 0.0f, 1.0f, 1.0f ) ); - - mTickUVEffect.SetBottomRight( Vector2( 0.0f, 1.0f ) ); - - if( !mTransitionAnimation ) - { - mTransitionAnimation = Dali::Animation::New( GetAnimationTime() ); - } - - // UV anim - mTransitionAnimation.AnimateTo( Property( mTickUVEffect, mTickUVEffect.GetBottomRightPropertyName() ), 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 ) -{ - if( mTransitionAnimation ) - { - mTransitionAnimation.Clear(); - mTransitionAnimation.Reset(); - } - - if( remove ) - { - UpdatePaintTransitionState(); - } -} - -void CheckBoxButton::TransitionAnimationFinished( Dali::Animation& source ) -{ - StopTransitionAnimation(); } } // namespace Internal