X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fbuttons%2Fpush-button-impl.cpp;h=dea0ee03935b842f03b1e799965ef3da1d59ad52;hb=refs%2Fchanges%2F06%2F301106%2F9;hp=e77bd301e69afb638dd5afd3965b73015b1f8f9f;hpb=f546dd5d83a968e573f8f053a01ce43df32c71a0;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/controls/buttons/push-button-impl.cpp b/dali-toolkit/internal/controls/buttons/push-button-impl.cpp index e77bd30..dea0ee0 100644 --- a/dali-toolkit/internal/controls/buttons/push-button-impl.cpp +++ b/dali-toolkit/internal/controls/buttons/push-button-impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 Samsung Electronics Co., Ltd. + * Copyright (c) 2023 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,33 +19,29 @@ #include "push-button-impl.h" // EXTERNAL INCLUDES -#include -#include #include #include +#include +#include // INTERNAL INCLUDES -#include -#include #include #include +#include +#include #if defined(DEBUG_ENABLED) - extern Debug::Filter* gLogButtonFilter; +extern Debug::Filter* gLogButtonFilter; #endif namespace Dali { - namespace Toolkit { - namespace Internal { - namespace { - BaseHandle Create() { return Toolkit::PushButton::New(); @@ -53,10 +49,10 @@ BaseHandle Create() // Properties -DALI_TYPE_REGISTRATION_BEGIN( Toolkit::PushButton, Toolkit::Button, Create ) +DALI_TYPE_REGISTRATION_BEGIN(Toolkit::PushButton, Toolkit::Button, Create) -DALI_PROPERTY_REGISTRATION( Toolkit, PushButton, "labelPadding", STRING, LABEL_PADDING ) -DALI_PROPERTY_REGISTRATION( Toolkit, PushButton, "iconPadding", STRING, ICON_PADDING ) +DALI_PROPERTY_REGISTRATION(Toolkit, PushButton, "labelPadding", STRING, LABEL_PADDING) +DALI_PROPERTY_REGISTRATION(Toolkit, PushButton, "iconPadding", STRING, ICON_PADDING) DALI_TYPE_REGISTRATION_END() @@ -64,16 +60,15 @@ DALI_TYPE_REGISTRATION_END() namespace { - } // unnamed namespace Dali::Toolkit::PushButton PushButton::New() { // Create the implementation, temporarily owned on stack - IntrusivePtr< PushButton > internalPushButton = new PushButton(); + IntrusivePtr internalPushButton = new PushButton(); // Pass ownership to CustomActor - Dali::Toolkit::PushButton pushButton( *internalPushButton ); + Dali::Toolkit::PushButton pushButton(*internalPushButton); // Second-phase init of the implementation // This can only be done after the CustomActor connection has been made... @@ -84,7 +79,7 @@ Dali::Toolkit::PushButton PushButton::New() PushButton::PushButton() : Button(), - mIconAlignment( RIGHT ) + mIconAlignment(RIGHT) { } @@ -98,42 +93,44 @@ void PushButton::OnInitialize() // Push button requires the Leave event. Actor self = Self(); - self.SetProperty( Actor::Property::LEAVE_REQUIRED, true ); + self.SetProperty(Actor::Property::LEAVE_REQUIRED, true); - DevelControl::SetAccessibilityConstructor( self, []( Dali::Actor actor ) { - return std::unique_ptr< Dali::Accessibility::Accessible >( - new AccessibleImpl( actor, Dali::Accessibility::Role::PUSH_BUTTON ) ); - } ); + self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::PUSH_BUTTON); } -void PushButton::SetIconAlignment( const PushButton::IconAlignment iconAlignment ) +DevelControl::ControlAccessible* PushButton::CreateAccessibleObject() +{ + return new PushButtonAccessible(Self()); +} + +void PushButton::SetIconAlignment(const PushButton::IconAlignment iconAlignment) { mIconAlignment = iconAlignment; Button::Align labelAlignment; - switch ( iconAlignment ) - { - case RIGHT: + switch(iconAlignment) { - labelAlignment = Button::BEGIN; - break; - } - case TOP: - { - labelAlignment = Button::BOTTOM; - break; - } - case BOTTOM: - { - labelAlignment = Button::TOP; - break; - } - case LEFT: - default: - labelAlignment = Button::END; - break; + case RIGHT: + { + labelAlignment = Button::BEGIN; + break; + } + case TOP: + { + labelAlignment = Button::BOTTOM; + break; + } + case BOTTOM: + { + labelAlignment = Button::TOP; + break; + } + case LEFT: + default: + labelAlignment = Button::END; + break; } - Button::SetLabelAlignment( labelAlignment ); + Button::SetLabelAlignment(labelAlignment); } const PushButton::IconAlignment PushButton::GetIconAlignment() const @@ -141,56 +138,56 @@ const PushButton::IconAlignment PushButton::GetIconAlignment() const return mIconAlignment; } -void PushButton::SetProperty( BaseObject* object, Property::Index propertyIndex, const Property::Value& value ) +void PushButton::SetProperty(BaseObject* object, Property::Index propertyIndex, const Property::Value& value) { - Toolkit::PushButton pushButton = Toolkit::PushButton::DownCast( Dali::BaseHandle( object ) ); + Toolkit::PushButton pushButton = Toolkit::PushButton::DownCast(Dali::BaseHandle(object)); - if ( pushButton ) + if(pushButton) { - PushButton& pushButtonImpl( GetImplementation( pushButton ) ); + PushButton& pushButtonImpl(GetImplementation(pushButton)); // Properties remain here for Tizen 3.0 legacy requirements. Are now in Button base class - switch ( propertyIndex ) + switch(propertyIndex) { case Toolkit::PushButton::Property::LABEL_PADDING: { - Vector4 padding ( value.Get< Vector4 >() ); - pushButtonImpl.Button::SetLabelPadding( Padding( padding.x, padding.y, padding.z, padding.w ) ); + Vector4 padding(value.Get()); + pushButtonImpl.Button::SetLabelPadding(Padding(padding.x, padding.y, padding.z, padding.w)); break; } case Toolkit::PushButton::Property::ICON_PADDING: { - Vector4 padding ( value.Get< Vector4 >() ); - pushButtonImpl.Button::SetForegroundPadding( Padding( padding.x, padding.y, padding.z, padding.w ) ); + Vector4 padding(value.Get()); + pushButtonImpl.Button::SetForegroundPadding(Padding(padding.x, padding.y, padding.z, padding.w)); break; } } } } -Property::Value PushButton::GetProperty( BaseObject* object, Property::Index propertyIndex ) +Property::Value PushButton::GetProperty(BaseObject* object, Property::Index propertyIndex) { Property::Value value; - Toolkit::PushButton pushButton = Toolkit::PushButton::DownCast( Dali::BaseHandle( object ) ); + Toolkit::PushButton pushButton = Toolkit::PushButton::DownCast(Dali::BaseHandle(object)); - if ( pushButton ) + if(pushButton) { - PushButton& pushButtonImpl( GetImplementation( pushButton ) ); + PushButton& pushButtonImpl(GetImplementation(pushButton)); - switch ( propertyIndex ) + switch(propertyIndex) { case Toolkit::PushButton::Property::LABEL_PADDING: { Padding padding = pushButtonImpl.Button::GetLabelPadding(); - value = Vector4( padding.x, padding.y, padding.top, padding.bottom); + value = Vector4(padding.x, padding.y, padding.top, padding.bottom); break; } case Toolkit::PushButton::Property::ICON_PADDING: { Padding padding = pushButtonImpl.Button::GetForegroundPadding(); - value = Vector4( padding.x, padding.y, padding.top, padding.bottom); + value = Vector4(padding.x, padding.y, padding.top, padding.bottom); break; } } @@ -199,22 +196,29 @@ Property::Value PushButton::GetProperty( BaseObject* object, Property::Index pro return value; } -Dali::Accessibility::States PushButton::AccessibleImpl::CalculateStates() +Dali::Accessibility::States PushButton::PushButtonAccessible::CalculateStates() { - auto tmp = Button::AccessibleImpl::CalculateStates(); - auto slf = Toolkit::Button::DownCast( self ); - tmp[Dali::Accessibility::State::PRESSED] = slf.GetProperty( Toolkit::Button::Property::SELECTED ); - return tmp; + auto state = Button::ButtonAccessible::CalculateStates(); + auto self = Toolkit::Button::DownCast(Self()); + state[Dali::Accessibility::State::PRESSED] = self.GetProperty(Toolkit::Button::Property::SELECTED); + return state; } -void PushButton::OnStateChange( State newState ) +void PushButton::OnStateChange(State newState) { // TODO: replace it with OnPropertySet hook once Button::Property::SELECTED will be consistently used - if (Dali::Accessibility::IsUp() && (newState == SELECTED_STATE || newState == UNSELECTED_STATE)) + if((Dali::Accessibility::Accessible::GetCurrentlyHighlightedActor() == Self()) && (newState == SELECTED_STATE || newState == UNSELECTED_STATE)) { - Dali::Accessibility::Accessible::Get(Self())->EmitStateChanged( - Dali::Accessibility::State::PRESSED, newState == SELECTED_STATE ? 1 : 0, 0 - ); + auto* accessible = GetAccessibleObject(); + if(DALI_LIKELY(accessible)) + { + accessible->EmitStateChanged(Dali::Accessibility::State::PRESSED, newState == SELECTED_STATE ? 1 : 0, 0); + + if(Self().GetProperty(Toolkit::Button::Property::TOGGLABLE)) + { + accessible->EmitStateChanged(Dali::Accessibility::State::CHECKED, newState == SELECTED_STATE ? 1 : 0, 0); + } + } } }