From 0512ac82e2c23d8eada7840b5a72cdabe13a5f54 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Artur=20=C5=9Awigo=C5=84?= Date: Mon, 14 Mar 2022 13:31:51 +0100 Subject: [PATCH] [AT-SPI] Require ControlAccessible for Control This change narrows down the type used in GetAccessibilityObject() and SetAccessibilityConstructor() from Accessible to ControlAccessible. It has always been the case that a Control is represented by either a ControlAccessible or a more derived type, and this fact is now reaffirmed in the API. Change-Id: Iae5f87845d951ac9affe2eb8589ec4aa3ea274e6 --- .../devel-api/controls/control-accessible.cpp | 6 +-- dali-toolkit/devel-api/controls/control-devel.cpp | 16 ++----- dali-toolkit/devel-api/controls/control-devel.h | 9 ++-- .../internal/controls/alignment/alignment-impl.cpp | 3 +- .../controls/bloom-view/bloom-view-impl.cpp | 3 +- .../controls/buttons/check-box-button-impl.cpp | 5 +- .../internal/controls/buttons/push-button-impl.cpp | 9 ++-- .../controls/buttons/radio-button-impl.cpp | 5 +- .../controls/buttons/toggle-button-impl.cpp | 9 ++-- .../controls/canvas-view/canvas-view-impl.cpp | 3 +- .../controls/control/control-data-impl.cpp | 55 +++++++++------------- .../internal/controls/control/control-data-impl.h | 19 ++------ .../controls/effects-view/effects-view-impl.cpp | 3 +- .../flex-container/flex-container-impl.cpp | 3 +- .../gaussian-blur-view/gaussian-blur-view-impl.cpp | 3 +- .../controls/image-view/image-view-impl.cpp | 3 +- .../internal/controls/magnifier/magnifier-impl.cpp | 3 +- .../controls/model3d-view/model3d-view-impl.cpp | 3 +- .../navigation-view/navigation-view-impl.cpp | 3 +- .../page-turn-view/page-turn-view-impl.cpp | 3 +- .../controls/progress-bar/progress-bar-impl.cpp | 2 +- .../controls/scroll-bar/scroll-bar-impl.cpp | 2 +- .../controls/shadow-view/shadow-view-impl.cpp | 3 +- .../internal/controls/slider/slider-impl.cpp | 2 +- .../super-blur-view/super-blur-view-impl.cpp | 3 +- .../controls/table-view/table-view-impl.cpp | 3 +- .../controls/text-controls/text-anchor-impl.cpp | 2 +- .../controls/text-controls/text-editor-impl.cpp | 15 ++---- .../controls/text-controls/text-field-impl.cpp | 15 ++---- .../text-controls/text-selection-popup-impl.cpp | 3 +- .../text-controls/text-selection-toolbar-impl.cpp | 3 +- .../internal/controls/tool-bar/tool-bar-impl.cpp | 3 +- .../controls/video-view/video-view-impl.cpp | 3 +- dali-toolkit/public-api/controls/control-impl.cpp | 12 +++-- dali-toolkit/public-api/controls/control-impl.h | 17 +++++++ 35 files changed, 105 insertions(+), 149 deletions(-) diff --git a/dali-toolkit/devel-api/controls/control-accessible.cpp b/dali-toolkit/devel-api/controls/control-accessible.cpp index ae7eff0..582f739 100644 --- a/dali-toolkit/devel-api/controls/control-accessible.cpp +++ b/dali-toolkit/devel-api/controls/control-accessible.cpp @@ -348,10 +348,10 @@ bool ControlAccessible::GrabHighlight() // Clear the old highlight. if(oldHighlightedActor) { - auto oldHighlightObject = dynamic_cast(Internal::Control::Impl::GetAccessibilityObject(oldHighlightedActor)); - if(oldHighlightObject) + auto oldHighlightedObject = Dali::Accessibility::Component::DownCast(Accessible::Get(oldHighlightedActor)); + if(oldHighlightedObject) { - oldHighlightObject->ClearHighlight(); + oldHighlightedObject->ClearHighlight(); } } diff --git a/dali-toolkit/devel-api/controls/control-devel.cpp b/dali-toolkit/devel-api/controls/control-devel.cpp index a98cefe..a15e5a1 100644 --- a/dali-toolkit/devel-api/controls/control-devel.cpp +++ b/dali-toolkit/devel-api/controls/control-devel.cpp @@ -224,7 +224,7 @@ void ClearAccessibilityRelations(Toolkit::Control control) GetControlImplementation(control).mAccessibilityRelations.clear(); } -void SetAccessibilityConstructor(Dali::Actor control, std::function(Dali::Actor)> constructor) +void SetAccessibilityConstructor(Dali::Actor control, std::function(Dali::Actor)> constructor) { GetControlImplementation(Toolkit::Control::DownCast(control)).mAccessibilityConstructor = constructor; } @@ -256,28 +256,22 @@ Dali::Accessibility::ReadingInfoTypes GetAccessibilityReadingInfoType(Toolkit::C bool ClearAccessibilityHighlight(Toolkit::Control control) { - auto* accessible = Dali::Accessibility::Component::DownCast(GetControlImplementation(control).GetAccessibilityObject()); - - return accessible ? accessible->ClearHighlight() : false; + return GetControlImplementation(control).GetAccessibleObject()->ClearHighlight(); } bool GrabAccessibilityHighlight(Toolkit::Control control) { - auto* accessible = Dali::Accessibility::Component::DownCast(GetControlImplementation(control).GetAccessibilityObject()); - - return accessible ? accessible->GrabHighlight() : false; + return GetControlImplementation(control).GetAccessibleObject()->GrabHighlight(); } Dali::Accessibility::States GetAccessibilityStates(Toolkit::Control control) { - auto* accessible = GetControlImplementation(control).GetAccessibilityObject(); - - return accessible->GetStates(); + return GetControlImplementation(control).GetAccessibleObject()->GetStates(); } void NotifyAccessibilityStateChange(Toolkit::Control control, Dali::Accessibility::States states, bool recurse) { - GetControlImplementation(control).GetAccessibilityObject()->NotifyAccessibilityStateChange(std::move(states), recurse); + GetControlImplementation(control).GetAccessibleObject()->NotifyAccessibilityStateChange(std::move(states), recurse); } } // namespace DevelControl diff --git a/dali-toolkit/devel-api/controls/control-devel.h b/dali-toolkit/devel-api/controls/control-devel.h index 07b5040..66df21c 100644 --- a/dali-toolkit/devel-api/controls/control-devel.h +++ b/dali-toolkit/devel-api/controls/control-devel.h @@ -570,15 +570,14 @@ DALI_TOOLKIT_API void NotifyAccessibilityStateChange(Toolkit::Control control, D * * Possible usage can be as follows: * @code - * SetAccessibilityConstructor( []( Dali::Actor actor ) { - return std::unique_ptr< Dali::Accessibility::Accessible >( - new ControlAccessible( actor, Dali::Accessibility::Role::DIALOG, true ) ); - } ); + * SetAccessibilityConstructor([](Dali::Actor actor) { + return std::make_unique(actor, Dali::Accessibility::Role::DIALOG, true)); + }); * @endcode * * param constructor callback creating Accessible object */ -DALI_TOOLKIT_API void SetAccessibilityConstructor(Dali::Actor control, std::function(Dali::Actor)> constructor); +DALI_TOOLKIT_API void SetAccessibilityConstructor(Dali::Actor control, std::function(Dali::Actor)> constructor); } // namespace DevelControl diff --git a/dali-toolkit/internal/controls/alignment/alignment-impl.cpp b/dali-toolkit/internal/controls/alignment/alignment-impl.cpp index d9b3b4d..77af58f 100644 --- a/dali-toolkit/internal/controls/alignment/alignment-impl.cpp +++ b/dali-toolkit/internal/controls/alignment/alignment-impl.cpp @@ -188,8 +188,7 @@ const Toolkit::Alignment::Padding& Alignment::GetPadding() const void Alignment::OnInitialize() { DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { - return std::unique_ptr( - new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::FILLER)); + return std::make_unique(actor, Dali::Accessibility::Role::FILLER); }); } diff --git a/dali-toolkit/internal/controls/bloom-view/bloom-view-impl.cpp b/dali-toolkit/internal/controls/bloom-view/bloom-view-impl.cpp index 5ed17c8..8b6bf6e 100644 --- a/dali-toolkit/internal/controls/bloom-view/bloom-view-impl.cpp +++ b/dali-toolkit/internal/controls/bloom-view/bloom-view-impl.cpp @@ -218,8 +218,7 @@ void BloomView::OnInitialize() SetupProperties(); DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { - return std::unique_ptr( - new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::ANIMATION)); + return std::make_unique(actor, Dali::Accessibility::Role::ANIMATION); }); } 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 3fcaae2..4d63d92 100644 --- a/dali-toolkit/internal/controls/buttons/check-box-button-impl.cpp +++ b/dali-toolkit/internal/controls/buttons/check-box-button-impl.cpp @@ -96,10 +96,9 @@ Dali::Accessibility::States CheckBoxButton::CheckBoxButtonAccessible::CalculateS void CheckBoxButton::OnStateChange(State newState) { // TODO: replace it with OnPropertySet hook once Button::Property::SELECTED will be consistently used - if(Dali::Accessibility::IsUp() && (Dali::Accessibility::Accessible::GetCurrentlyHighlightedActor() == Self()) - && (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::CHECKED, newState == SELECTED_STATE ? 1 : 0, 0); + GetAccessibleObject()->EmitStateChanged(Dali::Accessibility::State::CHECKED, newState == SELECTED_STATE ? 1 : 0, 0); } } diff --git a/dali-toolkit/internal/controls/buttons/push-button-impl.cpp b/dali-toolkit/internal/controls/buttons/push-button-impl.cpp index 2906245..bd6cffb 100644 --- a/dali-toolkit/internal/controls/buttons/push-button-impl.cpp +++ b/dali-toolkit/internal/controls/buttons/push-button-impl.cpp @@ -204,14 +204,15 @@ Dali::Accessibility::States PushButton::PushButtonAccessible::CalculateStates() void PushButton::OnStateChange(State newState) { // TODO: replace it with OnPropertySet hook once Button::Property::SELECTED will be consistently used - if(Dali::Accessibility::IsUp() && (Dali::Accessibility::Accessible::GetCurrentlyHighlightedActor() == Self()) - && (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(); + + accessible->EmitStateChanged(Dali::Accessibility::State::PRESSED, newState == SELECTED_STATE ? 1 : 0, 0); if(Self().GetProperty(Toolkit::Button::Property::TOGGLABLE)) { - Dali::Accessibility::Accessible::Get(Self())->EmitStateChanged(Dali::Accessibility::State::CHECKED, newState == SELECTED_STATE ? 1 : 0, 0); + accessible->EmitStateChanged(Dali::Accessibility::State::CHECKED, newState == SELECTED_STATE ? 1 : 0, 0); } } } diff --git a/dali-toolkit/internal/controls/buttons/radio-button-impl.cpp b/dali-toolkit/internal/controls/buttons/radio-button-impl.cpp index ae0d4d7..01be254 100644 --- a/dali-toolkit/internal/controls/buttons/radio-button-impl.cpp +++ b/dali-toolkit/internal/controls/buttons/radio-button-impl.cpp @@ -104,10 +104,9 @@ void RadioButton::OnStateChange(State newState) } // TODO: replace it with OnPropertySet hook once Button::Property::SELECTED will be consistently used - if(Dali::Accessibility::IsUp() && (Dali::Accessibility::Accessible::GetCurrentlyHighlightedActor() == Self()) - && (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::CHECKED, newState == SELECTED_STATE ? 1 : 0, 0); + GetAccessibleObject()->EmitStateChanged(Dali::Accessibility::State::CHECKED, newState == SELECTED_STATE ? 1 : 0, 0); } } diff --git a/dali-toolkit/internal/controls/buttons/toggle-button-impl.cpp b/dali-toolkit/internal/controls/buttons/toggle-button-impl.cpp index 490085a..a69f7ec 100644 --- a/dali-toolkit/internal/controls/buttons/toggle-button-impl.cpp +++ b/dali-toolkit/internal/controls/buttons/toggle-button-impl.cpp @@ -399,11 +399,12 @@ Property::Index ToggleButton::ToggleButtonAccessible::GetDescriptionPropertyInde void ToggleButton::OnStateChange(State newState) { // TODO: replace it with OnPropertySet hook once Button::Property::SELECTED will be consistently used - if(Dali::Accessibility::IsUp() && (Self() == Dali::Accessibility::Accessible::GetCurrentlyHighlightedActor()) - && (newState == SELECTED_STATE || newState == UNSELECTED_STATE)) + if((Self() == Dali::Accessibility::Accessible::GetCurrentlyHighlightedActor()) && (newState == SELECTED_STATE || newState == UNSELECTED_STATE)) { - Dali::Accessibility::Accessible::Get(Self())->EmitStateChanged(Dali::Accessibility::State::CHECKED, mCurrentToggleIndex ? 1 : 0, 0); - Dali::Accessibility::Accessible::Get(Self())->Emit(Dali::Accessibility::ObjectPropertyChangeEvent::DESCRIPTION); + auto* accessible = GetAccessibleObject(); + + accessible->EmitStateChanged(Dali::Accessibility::State::CHECKED, mCurrentToggleIndex ? 1 : 0, 0); + accessible->Emit(Dali::Accessibility::ObjectPropertyChangeEvent::DESCRIPTION); } } diff --git a/dali-toolkit/internal/controls/canvas-view/canvas-view-impl.cpp b/dali-toolkit/internal/controls/canvas-view/canvas-view-impl.cpp index 6ec6fc9..7d4c14b 100644 --- a/dali-toolkit/internal/controls/canvas-view/canvas-view-impl.cpp +++ b/dali-toolkit/internal/controls/canvas-view/canvas-view-impl.cpp @@ -98,8 +98,7 @@ void CanvasView::OnInitialize() Dali::Toolkit::Control handle(GetOwner()); DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { - return std::unique_ptr( - new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::IMAGE)); + return std::make_unique(actor, Dali::Accessibility::Role::IMAGE); }); Adaptor::Get().RegisterProcessor(*this, true); diff --git a/dali-toolkit/internal/controls/control/control-data-impl.cpp b/dali-toolkit/internal/controls/control/control-data-impl.cpp index 3d71f4d..2c5a279 100644 --- a/dali-toolkit/internal/controls/control/control-data-impl.cpp +++ b/dali-toolkit/internal/controls/control/control-data-impl.cpp @@ -445,6 +445,19 @@ static bool IsShowingGeometryOnScreen(Dali::Rect<> rect) return rect.width > 0 && rect.height > 0; } +Dali::Accessibility::Accessible* ExternalAccessibleGetter(Dali::Actor actor) +{ + auto control = Toolkit::Control::DownCast(actor); + if (!control) + { + return nullptr; + } + + auto& controlImpl = Toolkit::Internal::GetImplementation(control); + + return controlImpl.GetAccessibleObject(); +} + } // unnamed namespace // clang-format off @@ -508,13 +521,10 @@ Control::Impl::Impl(Control& controlImpl) mNeedToEmitResourceReady(false), mDispatchKeyEvents(true) { - Dali::Accessibility::Accessible::RegisterExternalAccessibleGetter( - [](Dali::Actor actor) -> Dali::Accessibility::Accessible* { - return Control::Impl::GetAccessibilityObject(actor); - }); + Dali::Accessibility::Accessible::RegisterExternalAccessibleGetter(&ExternalAccessibleGetter); - mAccessibilityConstructor = [](Dali::Actor actor) -> std::unique_ptr { - return std::unique_ptr(new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::UNKNOWN)); + mAccessibilityConstructor = [](Dali::Actor actor) { + return std::make_unique(actor, Dali::Accessibility::Role::UNKNOWN); }; } @@ -552,13 +562,7 @@ const Control::Impl& Control::Impl::Get(const Internal::Control& internalControl void Control::Impl::CheckHighlightedObjectGeometry() { - auto accessible = dynamic_cast(mAccessibilityObject.get()); - if(!accessible) - { - DALI_LOG_ERROR("accessible is not a pointer to a DevelControl::ControlAccessible type"); - return; - } - + auto accessible = GetAccessibleObject(); auto lastPosition = accessible->GetLastPosition(); auto accessibleRect = accessible->GetExtents(Dali::Accessibility::CoordinateType::WINDOW); auto rect = GetShowingGeometry(accessibleRect, accessible); @@ -586,7 +590,7 @@ void Control::Impl::CheckHighlightedObjectGeometry() // notify AT-clients on outgoing moves only if(mAccessibilityLastScreenRelativeMoveType != Dali::Accessibility::ScreenRelativeMoveType::INSIDE) { - mAccessibilityObject.get()->EmitMovedOutOfScreen(mAccessibilityLastScreenRelativeMoveType); + accessible->EmitMovedOutOfScreen(mAccessibilityLastScreenRelativeMoveType); } break; } @@ -1358,7 +1362,7 @@ void Control::Impl::SetProperty(BaseObject* object, Property::Index index, const { controlImpl.mImpl->mAccessibilityHidden = hidden; - auto* accessible = controlImpl.mImpl->GetAccessibilityObject(); + auto* accessible = controlImpl.GetAccessibleObject(); auto* parent = dynamic_cast(accessible->GetParent()); if (parent) { @@ -2051,27 +2055,14 @@ void Control::Impl::OnIdleCallback() mIdleCallback = nullptr; } -Dali::Accessibility::Accessible* Control::Impl::GetAccessibilityObject() +Toolkit::DevelControl::ControlAccessible* Control::Impl::GetAccessibleObject() { - if(!mAccessibilityObject) + if(!mAccessibleObject) { - mAccessibilityObject = mAccessibilityConstructor(mControlImpl.Self()); + mAccessibleObject = mAccessibilityConstructor(mControlImpl.Self()); } - return mAccessibilityObject.get(); -} -Dali::Accessibility::Accessible* Control::Impl::GetAccessibilityObject(Dali::Actor actor) -{ - if(actor) - { - auto control = Dali::Toolkit::Control::DownCast(actor); - if(control) - { - auto controlImpl = static_cast(&control.GetImplementation()); - return controlImpl->mImpl->GetAccessibilityObject(); - } - } - return nullptr; + return mAccessibleObject.get(); } } // namespace Internal diff --git a/dali-toolkit/internal/controls/control/control-data-impl.h b/dali-toolkit/internal/controls/control/control-data-impl.h index 1321a100..4fe9c44 100644 --- a/dali-toolkit/internal/controls/control/control-data-impl.h +++ b/dali-toolkit/internal/controls/control/control-data-impl.h @@ -423,20 +423,9 @@ public: void UpdateVisualProperties(const std::vector>& properties); /** - * @brief Gets the current control's accessible object. - * - * @return The handle to Accessible object - */ - Dali::Accessibility::Accessible* GetAccessibilityObject(); - - /** - * @brief Gets Accessible object handle. - * - * The method acquires Accessible handle from Actor object - * @param actor Actor object - * @return The handle to Accessible object + * @copydoc Dali::Toolkit::Internal::Control::GetAccessibleObject() */ - static Dali::Accessibility::Accessible* GetAccessibilityObject(Dali::Actor actor); + Toolkit::DevelControl::ControlAccessible* GetAccessibleObject(); private: /** @@ -546,8 +535,8 @@ public: Dali::Accessibility::Role mAccessibilityRole = Dali::Accessibility::Role::UNKNOWN; std::map> mAccessibilityRelations; - std::function(Actor)> mAccessibilityConstructor; - std::unique_ptr mAccessibilityObject; + std::function(Actor)> mAccessibilityConstructor; + std::unique_ptr mAccessibleObject; // Gesture Detection PinchGestureDetector mPinchGestureDetector; diff --git a/dali-toolkit/internal/controls/effects-view/effects-view-impl.cpp b/dali-toolkit/internal/controls/effects-view/effects-view-impl.cpp index 0f3e141..937a9c9 100644 --- a/dali-toolkit/internal/controls/effects-view/effects-view-impl.cpp +++ b/dali-toolkit/internal/controls/effects-view/effects-view-impl.cpp @@ -235,8 +235,7 @@ void EffectsView::OnInitialize() self.Add(mChildrenRoot); DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) { - return std::unique_ptr( - new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::FILLER)); + return std::make_unique(actor, Dali::Accessibility::Role::FILLER); }); } diff --git a/dali-toolkit/internal/controls/flex-container/flex-container-impl.cpp b/dali-toolkit/internal/controls/flex-container/flex-container-impl.cpp index 964afe2..ae7f1aa 100644 --- a/dali-toolkit/internal/controls/flex-container/flex-container-impl.cpp +++ b/dali-toolkit/internal/controls/flex-container/flex-container-impl.cpp @@ -836,8 +836,7 @@ void FlexContainer::OnInitialize() SetAsKeyboardFocusGroup(true); DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) { - return std::unique_ptr( - new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::FILLER)); + return std::make_unique(actor, Dali::Accessibility::Role::FILLER); }); } diff --git a/dali-toolkit/internal/controls/gaussian-blur-view/gaussian-blur-view-impl.cpp b/dali-toolkit/internal/controls/gaussian-blur-view/gaussian-blur-view-impl.cpp index 64d5ecb..a471455 100644 --- a/dali-toolkit/internal/controls/gaussian-blur-view/gaussian-blur-view-impl.cpp +++ b/dali-toolkit/internal/controls/gaussian-blur-view/gaussian-blur-view-impl.cpp @@ -296,8 +296,7 @@ void GaussianBlurView::OnInitialize() mInternalRoot.Add(mRenderDownsampledCamera); DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { - return std::unique_ptr( - new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::FILLER)); + return std::make_unique(actor, Dali::Accessibility::Role::FILLER); }); } diff --git a/dali-toolkit/internal/controls/image-view/image-view-impl.cpp b/dali-toolkit/internal/controls/image-view/image-view-impl.cpp index 46c9e11..a13e438 100644 --- a/dali-toolkit/internal/controls/image-view/image-view-impl.cpp +++ b/dali-toolkit/internal/controls/image-view/image-view-impl.cpp @@ -95,8 +95,7 @@ void ImageView::OnInitialize() handle.ResourceReadySignal().Connect(this, &ImageView::OnResourceReady); DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { - return std::unique_ptr( - new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::IMAGE)); + return std::make_unique(actor, Dali::Accessibility::Role::IMAGE); }); } diff --git a/dali-toolkit/internal/controls/magnifier/magnifier-impl.cpp b/dali-toolkit/internal/controls/magnifier/magnifier-impl.cpp index 6da7915..0f8516e 100644 --- a/dali-toolkit/internal/controls/magnifier/magnifier-impl.cpp +++ b/dali-toolkit/internal/controls/magnifier/magnifier-impl.cpp @@ -219,8 +219,7 @@ void Magnifier::Initialize() constraint.Apply(); DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) { - return std::unique_ptr( - new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::FILLER)); + return std::make_unique(actor, Dali::Accessibility::Role::FILLER); }); } diff --git a/dali-toolkit/internal/controls/model3d-view/model3d-view-impl.cpp b/dali-toolkit/internal/controls/model3d-view/model3d-view-impl.cpp index b9ee873..44c2b91 100644 --- a/dali-toolkit/internal/controls/model3d-view/model3d-view-impl.cpp +++ b/dali-toolkit/internal/controls/model3d-view/model3d-view-impl.cpp @@ -281,8 +281,7 @@ void Model3dView::OnInitialize() mRenderer = Renderer::New(mesh, shader); DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { - return std::unique_ptr( - new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::IMAGE)); + return std::make_unique(actor, Dali::Accessibility::Role::IMAGE); }); } diff --git a/dali-toolkit/internal/controls/navigation-view/navigation-view-impl.cpp b/dali-toolkit/internal/controls/navigation-view/navigation-view-impl.cpp index 9eab290..f511fe8 100644 --- a/dali-toolkit/internal/controls/navigation-view/navigation-view-impl.cpp +++ b/dali-toolkit/internal/controls/navigation-view/navigation-view-impl.cpp @@ -71,8 +71,7 @@ Toolkit::NavigationView NavigationView::New() void NavigationView::OnInitialize() { DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { - return std::unique_ptr( - new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::FILLER)); + return std::make_unique(actor, Dali::Accessibility::Role::FILLER); }); } diff --git a/dali-toolkit/internal/controls/page-turn-view/page-turn-view-impl.cpp b/dali-toolkit/internal/controls/page-turn-view/page-turn-view-impl.cpp index 69369de..df54bd6 100644 --- a/dali-toolkit/internal/controls/page-turn-view/page-turn-view-impl.cpp +++ b/dali-toolkit/internal/controls/page-turn-view/page-turn-view-impl.cpp @@ -415,8 +415,7 @@ void PageTurnView::OnInitialize() EnableGestureDetection(GestureType::Value(GestureType::PAN)); DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { - return std::unique_ptr( - new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::PAGE_TAB_LIST)); + return std::make_unique(actor, Dali::Accessibility::Role::PAGE_TAB_LIST); }); } diff --git a/dali-toolkit/internal/controls/progress-bar/progress-bar-impl.cpp b/dali-toolkit/internal/controls/progress-bar/progress-bar-impl.cpp index 42d2189..0787b56 100644 --- a/dali-toolkit/internal/controls/progress-bar/progress-bar-impl.cpp +++ b/dali-toolkit/internal/controls/progress-bar/progress-bar-impl.cpp @@ -270,7 +270,7 @@ void ProgressBar::SetProgressValue(float value) mValueChangedSignal.Emit(self, mProgressValue, mSecondaryProgressValue); if(Self() == Dali::Accessibility::Accessible::GetCurrentlyHighlightedActor()) { - Control::Impl::GetAccessibilityObject(Self())->Emit(Dali::Accessibility::ObjectPropertyChangeEvent::VALUE); + GetAccessibleObject()->Emit(Dali::Accessibility::ObjectPropertyChangeEvent::VALUE); } RelayoutRequest(); } diff --git a/dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.cpp b/dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.cpp index 93773e9..a89b9f5 100644 --- a/dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.cpp +++ b/dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.cpp @@ -359,7 +359,7 @@ void ScrollBar::OnScrollPositionIntervalReached(PropertyNotification& source) mScrollPositionIntervalReachedSignal.Emit(scrollableHandle.GetCurrentProperty(mPropertyScrollPosition)); if(Self() == Dali::Accessibility::Accessible::GetCurrentlyHighlightedActor()) { - Control::Impl::GetAccessibilityObject(Self())->Emit(Dali::Accessibility::ObjectPropertyChangeEvent::VALUE); + GetAccessibleObject()->Emit(Dali::Accessibility::ObjectPropertyChangeEvent::VALUE); } } } diff --git a/dali-toolkit/internal/controls/shadow-view/shadow-view-impl.cpp b/dali-toolkit/internal/controls/shadow-view/shadow-view-impl.cpp index 1197a46..98025ec 100644 --- a/dali-toolkit/internal/controls/shadow-view/shadow-view-impl.cpp +++ b/dali-toolkit/internal/controls/shadow-view/shadow-view-impl.cpp @@ -257,8 +257,7 @@ void ShadowView::OnInitialize() blurStrengthConstraint.Apply(); DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { - return std::unique_ptr( - new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::FILLER)); + return std::make_unique(actor, Dali::Accessibility::Role::FILLER); }); } diff --git a/dali-toolkit/internal/controls/slider/slider-impl.cpp b/dali-toolkit/internal/controls/slider/slider-impl.cpp index 49bb8cb..7f47940 100644 --- a/dali-toolkit/internal/controls/slider/slider-impl.cpp +++ b/dali-toolkit/internal/controls/slider/slider-impl.cpp @@ -949,7 +949,7 @@ void Slider::SetValue(float value) DisplayValue(mValue, true); if(Self() == Dali::Accessibility::Accessible::GetCurrentlyHighlightedActor()) { - Control::Impl::GetAccessibilityObject(Self())->Emit(Dali::Accessibility::ObjectPropertyChangeEvent::VALUE); + GetAccessibleObject()->Emit(Dali::Accessibility::ObjectPropertyChangeEvent::VALUE); } } diff --git a/dali-toolkit/internal/controls/super-blur-view/super-blur-view-impl.cpp b/dali-toolkit/internal/controls/super-blur-view/super-blur-view-impl.cpp index ad90105..31fee22 100644 --- a/dali-toolkit/internal/controls/super-blur-view/super-blur-view-impl.cpp +++ b/dali-toolkit/internal/controls/super-blur-view/super-blur-view-impl.cpp @@ -150,8 +150,7 @@ void SuperBlurView::OnInitialize() mBlurStrengthPropertyIndex = self.RegisterUniqueProperty("blurStrength", 0.f); DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) { - return std::unique_ptr( - new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::FILLER)); + return std::make_unique(actor, Dali::Accessibility::Role::FILLER); }); } diff --git a/dali-toolkit/internal/controls/table-view/table-view-impl.cpp b/dali-toolkit/internal/controls/table-view/table-view-impl.cpp index 2426775..7a42643 100644 --- a/dali-toolkit/internal/controls/table-view/table-view-impl.cpp +++ b/dali-toolkit/internal/controls/table-view/table-view-impl.cpp @@ -1120,8 +1120,7 @@ void TableView::OnInitialize() SetAsKeyboardFocusGroup(true); DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) { - return std::unique_ptr( - new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::TABLE)); + return std::make_unique(actor, Dali::Accessibility::Role::TABLE); }); } diff --git a/dali-toolkit/internal/controls/text-controls/text-anchor-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-anchor-impl.cpp index 88fa3d3..a712d68 100644 --- a/dali-toolkit/internal/controls/text-controls/text-anchor-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-anchor-impl.cpp @@ -184,7 +184,7 @@ int32_t TextAnchor::TextAnchorAccessible::GetAnchorCount() const Dali::Accessibility::Accessible* TextAnchor::TextAnchorAccessible::GetAnchorAccessible(int32_t anchorIndex) const { - return Control::Impl::GetAccessibilityObject(Self()); + return const_cast(this); } std::string TextAnchor::TextAnchorAccessible::GetAnchorUri(int32_t anchorIndex) const diff --git a/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp index d931401..4e6fc1f 100644 --- a/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp @@ -907,26 +907,17 @@ void TextEditor::RequestTextRelayout() void TextEditor::TextInserted(unsigned int position, unsigned int length, const std::string& content) { - if(Accessibility::IsUp()) - { - Control::Impl::GetAccessibilityObject(Self())->EmitTextInserted(position, length, content); - } + GetAccessibleObject()->EmitTextInserted(position, length, content); } void TextEditor::TextDeleted(unsigned int position, unsigned int length, const std::string& content) { - if(Accessibility::IsUp()) - { - Control::Impl::GetAccessibilityObject(Self())->EmitTextDeleted(position, length, content); - } + GetAccessibleObject()->EmitTextDeleted(position, length, content); } void TextEditor::CursorPositionChanged(unsigned int oldPosition, unsigned int newPosition) { - if(Accessibility::IsUp()) - { - Control::Impl::GetAccessibilityObject(Self())->EmitTextCursorMoved(newPosition); - } + GetAccessibleObject()->EmitTextCursorMoved(newPosition); if((oldPosition != newPosition) && !mCursorPositionChanged) { diff --git a/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp index 8effb28..22738f6 100644 --- a/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp @@ -860,26 +860,17 @@ void TextField::SetEditable(bool editable) void TextField::TextInserted(unsigned int position, unsigned int length, const std::string& content) { - if(Accessibility::IsUp()) - { - Control::Impl::GetAccessibilityObject(Self())->EmitTextInserted(position, length, content); - } + GetAccessibleObject()->EmitTextInserted(position, length, content); } void TextField::TextDeleted(unsigned int position, unsigned int length, const std::string& content) { - if(Accessibility::IsUp()) - { - Control::Impl::GetAccessibilityObject(Self())->EmitTextDeleted(position, length, content); - } + GetAccessibleObject()->EmitTextDeleted(position, length, content); } void TextField::CursorPositionChanged(unsigned int oldPosition, unsigned int newPosition) { - if(Accessibility::IsUp()) - { - Control::Impl::GetAccessibilityObject(Self())->EmitTextCursorMoved(newPosition); - } + GetAccessibleObject()->EmitTextCursorMoved(newPosition); if((oldPosition != newPosition) && !mCursorPositionChanged) { diff --git a/dali-toolkit/internal/controls/text-controls/text-selection-popup-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-selection-popup-impl.cpp index 2ff1bd4..96838ba 100644 --- a/dali-toolkit/internal/controls/text-controls/text-selection-popup-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-selection-popup-impl.cpp @@ -398,8 +398,7 @@ void TextSelectionPopup::OnInitialize() self.SetProperty(Actor::Property::COLOR_ALPHA, 0.0f); DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { - return std::unique_ptr( - new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::DIALOG, true)); + return std::make_unique(actor, Dali::Accessibility::Role::DIALOG, true); }); //Enable highightability diff --git a/dali-toolkit/internal/controls/text-controls/text-selection-toolbar-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-selection-toolbar-impl.cpp index 3220328..3283e42 100644 --- a/dali-toolkit/internal/controls/text-controls/text-selection-toolbar-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-selection-toolbar-impl.cpp @@ -165,8 +165,7 @@ void TextSelectionToolbar::OnInitialize() SetUp(); DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { - return std::unique_ptr( - new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::TOOL_BAR)); + return std::make_unique(actor, Dali::Accessibility::Role::TOOL_BAR); }); } diff --git a/dali-toolkit/internal/controls/tool-bar/tool-bar-impl.cpp b/dali-toolkit/internal/controls/tool-bar/tool-bar-impl.cpp index 0e894df..e7c29b4 100644 --- a/dali-toolkit/internal/controls/tool-bar/tool-bar-impl.cpp +++ b/dali-toolkit/internal/controls/tool-bar/tool-bar-impl.cpp @@ -312,8 +312,7 @@ void ToolBar::OnInitialize() mLayout.SetRelativeWidth(1, mRightRelativeSpace); DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { - return std::unique_ptr( - new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::TOOL_BAR)); + return std::make_unique(actor, Dali::Accessibility::Role::TOOL_BAR); }); } diff --git a/dali-toolkit/internal/controls/video-view/video-view-impl.cpp b/dali-toolkit/internal/controls/video-view/video-view-impl.cpp index c08625f..eefdb2e 100644 --- a/dali-toolkit/internal/controls/video-view/video-view-impl.cpp +++ b/dali-toolkit/internal/controls/video-view/video-view-impl.cpp @@ -119,8 +119,7 @@ void VideoView::OnInitialize() mVideoPlayer.FinishedSignal().Connect(this, &VideoView::EmitSignalFinish); DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) { - return std::unique_ptr( - new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::VIDEO)); + return std::make_unique(actor, Dali::Accessibility::Role::VIDEO); }); //Enable highightability diff --git a/dali-toolkit/public-api/controls/control-impl.cpp b/dali-toolkit/public-api/controls/control-impl.cpp index afb2bf9..1407578 100644 --- a/dali-toolkit/public-api/controls/control-impl.cpp +++ b/dali-toolkit/public-api/controls/control-impl.cpp @@ -167,6 +167,11 @@ void Control::ClearBackground() RelayoutRequest(); } +Toolkit::DevelControl::ControlAccessible* Control::GetAccessibleObject() +{ + return mImpl->GetAccessibleObject(); +} + void Control::EnableGestureDetection(GestureType::Value type) { if((type & GestureType::PINCH) && !mImpl->mPinchGestureDetector) @@ -484,7 +489,7 @@ void Control::EmitKeyInputFocusSignal(bool focusGained) if(Accessibility::IsUp()) { - auto self = mImpl->GetAccessibilityObject(Self()); + auto self = GetAccessibleObject(); self->EmitFocused(focusGained); auto parent = self->GetParent(); if(parent && !self->GetStates()[Dali::Accessibility::State::MANAGES_DESCENDANTS]) @@ -571,10 +576,7 @@ void Control::OnPropertySet(Property::Index index, const Property::Value& proper } case Actor::Property::VISIBLE: { - if(Dali::Accessibility::IsUp() && !Self().GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIDDEN)) - { - Dali::Accessibility::Accessible::Get(Self())->EmitVisible(Self().GetProperty(Actor::Property::VISIBLE).Get()); - } + GetAccessibleObject()->EmitVisible(Self().GetProperty(Actor::Property::VISIBLE)); break; } } diff --git a/dali-toolkit/public-api/controls/control-impl.h b/dali-toolkit/public-api/controls/control-impl.h index e2d1ca4..0a3584e 100644 --- a/dali-toolkit/public-api/controls/control-impl.h +++ b/dali-toolkit/public-api/controls/control-impl.h @@ -43,6 +43,12 @@ namespace Toolkit class StyleManager; +namespace DevelControl +{ +class ControlAccessible; + +} // namespace DevelControl + namespace Internal { @@ -109,6 +115,17 @@ public: */ void ClearBackground(); + // Accessibility + + /** + * @brief Gets the Accessible object that represents this control. + * + * This method creates the Accessible object if necessary, so a non-null return is expected. + * + * @return The Accessible object + */ + Toolkit::DevelControl::ControlAccessible* GetAccessibleObject(); + // Gesture Detection /** -- 2.7.4