From 36b6c48b03fa926529904947f222aadebbf0c1ff Mon Sep 17 00:00:00 2001 From: =?utf8?q?Artur=20=C5=9Awigo=C5=84?= Date: Mon, 14 Mar 2022 16:41:02 +0100 Subject: [PATCH] [AT-SPI] Remove SetAccessibilityConstructor() This function is replaced by a new Control virtual method, CreateAccessibleObject(), which allows to achieve the same goal using less eccentric syntax. A slight reduction in memory usage is also expected, thanks to the fact that there is now no need to store a 'mAccessibilityConstructor' functor in every Control::Impl instance. Change-Id: I6399a6ca9acefb1648086b17d154541535f6bd2d --- .../devel-api/controls/control-accessible.cpp | 53 ++++++++-------------- .../devel-api/controls/control-accessible.h | 7 +-- dali-toolkit/devel-api/controls/control-devel.cpp | 5 -- dali-toolkit/devel-api/controls/control-devel.h | 18 -------- .../internal/controls/alignment/alignment-impl.cpp | 4 +- .../controls/bloom-view/bloom-view-impl.cpp | 4 +- .../internal/controls/buttons/button-impl.cpp | 5 ++ .../internal/controls/buttons/button-impl.h | 5 ++ .../controls/buttons/check-box-button-impl.cpp | 9 ++-- .../controls/buttons/check-box-button-impl.h | 5 ++ .../internal/controls/buttons/push-button-impl.cpp | 9 ++-- .../internal/controls/buttons/push-button-impl.h | 5 ++ .../controls/buttons/radio-button-impl.cpp | 9 ++-- .../internal/controls/buttons/radio-button-impl.h | 5 ++ .../controls/buttons/toggle-button-impl.cpp | 9 ++-- .../internal/controls/buttons/toggle-button-impl.h | 5 ++ .../controls/canvas-view/canvas-view-impl.cpp | 4 +- .../controls/control/control-data-impl.cpp | 6 +-- .../internal/controls/control/control-data-impl.h | 1 - .../controls/effects-view/effects-view-impl.cpp | 4 +- .../flex-container/flex-container-impl.cpp | 4 +- .../gaussian-blur-view/gaussian-blur-view-impl.cpp | 4 +- .../controls/image-view/image-view-impl.cpp | 4 +- .../internal/controls/magnifier/magnifier-impl.cpp | 4 +- .../controls/model3d-view/model3d-view-impl.cpp | 4 +- .../navigation-view/navigation-view-impl.cpp | 4 +- .../page-turn-view/page-turn-view-impl.cpp | 4 +- .../internal/controls/popup/popup-impl.cpp | 10 ++-- dali-toolkit/internal/controls/popup/popup-impl.h | 5 ++ .../controls/progress-bar/progress-bar-impl.cpp | 13 ++++-- .../controls/progress-bar/progress-bar-impl.h | 5 ++ .../controls/scroll-bar/scroll-bar-impl.cpp | 13 ++++-- .../internal/controls/scroll-bar/scroll-bar-impl.h | 5 ++ .../scrollable/item-view/item-view-impl.cpp | 9 ++-- .../controls/scrollable/item-view/item-view-impl.h | 5 ++ .../scrollable/scroll-view/scroll-view-impl.cpp | 9 ++-- .../scrollable/scroll-view/scroll-view-impl.h | 5 ++ .../controls/scrollable/scrollable-impl.cpp | 9 ++-- .../internal/controls/scrollable/scrollable-impl.h | 5 ++ .../controls/shadow-view/shadow-view-impl.cpp | 4 +- .../internal/controls/slider/slider-impl.cpp | 14 +++--- .../internal/controls/slider/slider-impl.h | 5 ++ .../super-blur-view/super-blur-view-impl.cpp | 4 +- .../controls/table-view/table-view-impl.cpp | 4 +- .../controls/text-controls/text-anchor-impl.cpp | 12 +++-- .../controls/text-controls/text-anchor-impl.h | 5 ++ .../controls/text-controls/text-editor-impl.cpp | 14 +++--- .../controls/text-controls/text-editor-impl.h | 5 ++ .../controls/text-controls/text-field-impl.cpp | 14 +++--- .../controls/text-controls/text-field-impl.h | 5 ++ .../controls/text-controls/text-label-impl.cpp | 14 +++--- .../controls/text-controls/text-label-impl.h | 5 ++ .../text-controls/text-selection-popup-impl.cpp | 21 +++++++-- .../text-controls/text-selection-popup-impl.h | 18 ++++++++ .../text-controls/text-selection-toolbar-impl.cpp | 4 +- .../internal/controls/tool-bar/tool-bar-impl.cpp | 4 +- .../controls/video-view/video-view-impl.cpp | 9 ++-- dali-toolkit/public-api/controls/control-impl.cpp | 5 ++ dali-toolkit/public-api/controls/control-impl.h | 22 ++++++++- 59 files changed, 291 insertions(+), 190 deletions(-) diff --git a/dali-toolkit/devel-api/controls/control-accessible.cpp b/dali-toolkit/devel-api/controls/control-accessible.cpp index 582f739..9a3da6c 100644 --- a/dali-toolkit/devel-api/controls/control-accessible.cpp +++ b/dali-toolkit/devel-api/controls/control-accessible.cpp @@ -66,20 +66,15 @@ static Dali::Actor CreateHighlightIndicatorActor() } } // unnamed namespace -ControlAccessible::ControlAccessible(Dali::Actor self, Dali::Accessibility::Role role, bool modal) -: ActorAccessible(self), - mIsModal(modal) +ControlAccessible::ControlAccessible(Dali::Actor self) +: ActorAccessible(self) { - auto control = Dali::Toolkit::Control::DownCast(Self()); + auto control = Toolkit::Control::DownCast(self); Internal::Control& internalControl = Toolkit::Internal::GetImplementation(control); Internal::Control::Impl& controlImpl = Internal::Control::Impl::Get(internalControl); - if(controlImpl.mAccessibilityRole == Dali::Accessibility::Role::UNKNOWN) - { - controlImpl.mAccessibilityRole = role; - } - Self().PropertySetSignal().Connect(&controlImpl, [this, &controlImpl](Dali::Handle& handle, Dali::Property::Index index, Dali::Property::Value value) { + self.PropertySetSignal().Connect(&controlImpl, [this, &controlImpl](Dali::Handle& handle, Dali::Property::Index index, Dali::Property::Value value) { if(this->Self() != Dali::Accessibility::Accessible::GetCurrentlyHighlightedActor()) { return; @@ -222,32 +217,22 @@ bool ControlAccessible::IsShowing() Dali::Accessibility::States ControlAccessible::CalculateStates() { - Dali::Actor self = Self(); - Dali::Accessibility::States state; - state[Dali::Accessibility::State::FOCUSABLE] = self.GetProperty(Actor::Property::KEYBOARD_FOCUSABLE); - state[Dali::Accessibility::State::FOCUSED] = Toolkit::KeyboardFocusManager::Get().GetCurrentFocusActor() == self; - - if(self.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE).GetType() == Dali::Property::NONE) - { - state[Dali::Accessibility::State::HIGHLIGHTABLE] = false; - } - else - { - state[Dali::Accessibility::State::HIGHLIGHTABLE] = self.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE).Get(); - } - - state[Dali::Accessibility::State::HIGHLIGHTED] = GetCurrentlyHighlightedActor() == self; - state[Dali::Accessibility::State::ENABLED] = true; - state[Dali::Accessibility::State::SENSITIVE] = true; - state[Dali::Accessibility::State::VISIBLE] = self.GetProperty(Actor::Property::VISIBLE); + using Dali::Accessibility::State; - if(mIsModal) - { - state[Dali::Accessibility::State::MODAL] = true; - } - state[Dali::Accessibility::State::SHOWING] = IsShowing(); - state[Dali::Accessibility::State::DEFUNCT] = !self.GetProperty(Dali::DevelActor::Property::CONNECTED_TO_SCENE).Get(); - return state; + Dali::Actor self = Self(); + Dali::Accessibility::States states; + + states[State::FOCUSABLE] = self.GetProperty(Actor::Property::KEYBOARD_FOCUSABLE); + states[State::FOCUSED] = Toolkit::KeyboardFocusManager::Get().GetCurrentFocusActor() == self; + states[State::HIGHLIGHTABLE] = self.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE); + states[State::HIGHLIGHTED] = GetCurrentlyHighlightedActor() == self; + states[State::ENABLED] = true; + states[State::SENSITIVE] = true; + states[State::VISIBLE] = self.GetProperty(Actor::Property::VISIBLE); + states[State::SHOWING] = IsShowing(); + states[State::DEFUNCT] = !self.GetProperty(Dali::DevelActor::Property::CONNECTED_TO_SCENE).Get(); + + return states; } Dali::Accessibility::States ControlAccessible::GetStates() diff --git a/dali-toolkit/devel-api/controls/control-accessible.h b/dali-toolkit/devel-api/controls/control-accessible.h index 7b0ae78..dd8389a 100644 --- a/dali-toolkit/devel-api/controls/control-accessible.h +++ b/dali-toolkit/devel-api/controls/control-accessible.h @@ -33,10 +33,9 @@ namespace Dali::Toolkit::DevelControl { /** * @brief Represents the Accessible object for Dali::Toolkit::Control and derived classes * - * You can create a derived class (and register it using SetAccessibilityConstructor) + * You can create a derived class (and override Control::CreateAccessibleObject) * in order to customize Accessibility for a given control. * - * @see Dali::Toolkit::DevelControl::SetAccessibilityConstructor * @see Dali::Accessibility::Accessible * @see Dali::Accessibility::Component * @see Dali::Accessibility::Collection @@ -51,8 +50,6 @@ struct DALI_TOOLKIT_API ControlAccessible : public Dali::Accessibility::ActorAcc protected: Vector2 mLastPosition{0.0f, 0.0f}; Dali::WeakHandle mCurrentHighlightActor; - bool mIsModal = false; - bool mIsRoot = false; void ScrollToSelf(); @@ -73,7 +70,7 @@ protected: bool IsShowing(); public: - ControlAccessible(Dali::Actor self, Dali::Accessibility::Role role, bool modal = false); + ControlAccessible(Dali::Actor self); /** * @copydoc Dali::Accessibility::Accessible::GetName() diff --git a/dali-toolkit/devel-api/controls/control-devel.cpp b/dali-toolkit/devel-api/controls/control-devel.cpp index a15e5a1..a604433 100644 --- a/dali-toolkit/devel-api/controls/control-devel.cpp +++ b/dali-toolkit/devel-api/controls/control-devel.cpp @@ -224,11 +224,6 @@ void ClearAccessibilityRelations(Toolkit::Control control) GetControlImplementation(control).mAccessibilityRelations.clear(); } -void SetAccessibilityConstructor(Dali::Actor control, std::function(Dali::Actor)> constructor) -{ - GetControlImplementation(Toolkit::Control::DownCast(control)).mAccessibilityConstructor = constructor; -} - void AppendAccessibilityAttribute(Toolkit::Control control, const std::string& key, const std::string& value) { GetControlImplementation(control).AppendAccessibilityAttribute(key, value); diff --git a/dali-toolkit/devel-api/controls/control-devel.h b/dali-toolkit/devel-api/controls/control-devel.h index 66df21c..895e404 100644 --- a/dali-toolkit/devel-api/controls/control-devel.h +++ b/dali-toolkit/devel-api/controls/control-devel.h @@ -561,24 +561,6 @@ DALI_TOOLKIT_API Dali::Accessibility::States GetAccessibilityStates(Toolkit::Con */ DALI_TOOLKIT_API void NotifyAccessibilityStateChange(Toolkit::Control control, Dali::Accessibility::States states, bool recurse); -/** - * The method allows to set specific constructor for creating accessibility structure - * - * Thank to this method hierarchy of accessibility objects can be based on internal hierarchy of Actors. - * It prevents from necessity of keeping two trees synchronized. - * The method should be called inside OnInitialize method of all classes inheriting from Control. - * - * Possible usage can be as follows: - * @code - * 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); - } // namespace DevelControl } // namespace Toolkit diff --git a/dali-toolkit/internal/controls/alignment/alignment-impl.cpp b/dali-toolkit/internal/controls/alignment/alignment-impl.cpp index 77af58f..002ab93 100644 --- a/dali-toolkit/internal/controls/alignment/alignment-impl.cpp +++ b/dali-toolkit/internal/controls/alignment/alignment-impl.cpp @@ -187,9 +187,7 @@ const Toolkit::Alignment::Padding& Alignment::GetPadding() const void Alignment::OnInitialize() { - DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { - return std::make_unique(actor, Dali::Accessibility::Role::FILLER); - }); + Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::FILLER); } void Alignment::OnRelayout(const Vector2& size, RelayoutContainer& container) 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 8b6bf6e..d7e474f 100644 --- a/dali-toolkit/internal/controls/bloom-view/bloom-view-impl.cpp +++ b/dali-toolkit/internal/controls/bloom-view/bloom-view-impl.cpp @@ -217,9 +217,7 @@ void BloomView::OnInitialize() // bind properties for / set shader constants to defaults SetupProperties(); - DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { - return std::make_unique(actor, Dali::Accessibility::Role::ANIMATION); - }); + Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::ANIMATION); } void BloomView::OnSizeSet(const Vector3& targetSize) diff --git a/dali-toolkit/internal/controls/buttons/button-impl.cpp b/dali-toolkit/internal/controls/buttons/button-impl.cpp index e4a41a1..6c33e19 100644 --- a/dali-toolkit/internal/controls/buttons/button-impl.cpp +++ b/dali-toolkit/internal/controls/buttons/button-impl.cpp @@ -620,6 +620,11 @@ bool Button::OnAccessibilityActivated() return OnKeyboardEnter(); } +DevelControl::ControlAccessible* Button::CreateAccessibleObject() +{ + return new ButtonAccessible(Self()); +} + bool Button::OnTouch(Actor actor, const TouchEvent& touch) { if(!IsDisabled() && (actor == touch.GetHitActor(0))) diff --git a/dali-toolkit/internal/controls/buttons/button-impl.h b/dali-toolkit/internal/controls/buttons/button-impl.h index c13fc3f..cae3dc8 100644 --- a/dali-toolkit/internal/controls/buttons/button-impl.h +++ b/dali-toolkit/internal/controls/buttons/button-impl.h @@ -322,6 +322,11 @@ protected: // From Control bool OnAccessibilityActivated() override; /** + * @copydoc Toolkit::Internal::Control::CreateAccessibleObject() + */ + DevelControl::ControlAccessible* CreateAccessibleObject() override; + + /** * @copydoc Toolkit::Control::OnKeyboardEnter() */ bool OnKeyboardEnter() override; 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 4d63d92..78a2794 100644 --- a/dali-toolkit/internal/controls/buttons/check-box-button-impl.cpp +++ b/dali-toolkit/internal/controls/buttons/check-box-button-impl.cpp @@ -77,9 +77,12 @@ void CheckBoxButton::OnInitialize() { Button::OnInitialize(); - DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { - return std::make_unique(actor, Dali::Accessibility::Role::CHECK_BOX); - }); + Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::CHECK_BOX); +} + +DevelControl::ControlAccessible* CheckBoxButton::CreateAccessibleObject() +{ + return new CheckBoxButton::CheckBoxButtonAccessible(Self()); } Dali::Accessibility::States CheckBoxButton::CheckBoxButtonAccessible::CalculateStates() diff --git a/dali-toolkit/internal/controls/buttons/check-box-button-impl.h b/dali-toolkit/internal/controls/buttons/check-box-button-impl.h index a6154d5..c542143 100644 --- a/dali-toolkit/internal/controls/buttons/check-box-button-impl.h +++ b/dali-toolkit/internal/controls/buttons/check-box-button-impl.h @@ -63,6 +63,11 @@ private: // From Button */ void OnInitialize() override; + /** + * @copydoc Toolkit::Internal::Control::CreateAccessibleObject() + */ + DevelControl::ControlAccessible* CreateAccessibleObject() override; + private: // Undefined CheckBoxButton(const CheckBoxButton&); diff --git a/dali-toolkit/internal/controls/buttons/push-button-impl.cpp b/dali-toolkit/internal/controls/buttons/push-button-impl.cpp index bd6cffb..9ff9531 100644 --- a/dali-toolkit/internal/controls/buttons/push-button-impl.cpp +++ b/dali-toolkit/internal/controls/buttons/push-button-impl.cpp @@ -95,9 +95,12 @@ void PushButton::OnInitialize() Actor self = Self(); self.SetProperty(Actor::Property::LEAVE_REQUIRED, true); - DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) { - return std::make_unique(actor, Dali::Accessibility::Role::PUSH_BUTTON); - }); + self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::PUSH_BUTTON); +} + +DevelControl::ControlAccessible* PushButton::CreateAccessibleObject() +{ + return new PushButtonAccessible(Self()); } void PushButton::SetIconAlignment(const PushButton::IconAlignment iconAlignment) diff --git a/dali-toolkit/internal/controls/buttons/push-button-impl.h b/dali-toolkit/internal/controls/buttons/push-button-impl.h index b04f6b7..21a4d01 100644 --- a/dali-toolkit/internal/controls/buttons/push-button-impl.h +++ b/dali-toolkit/internal/controls/buttons/push-button-impl.h @@ -93,6 +93,11 @@ private: // From Button */ void OnInitialize() override; + /** + * @copydoc Toolkit::Internal::Control::CreateAccessibleObject() + */ + DevelControl::ControlAccessible* CreateAccessibleObject() override; + private: /** * @brief Sets the alignment mode to use to align the icon to the label. diff --git a/dali-toolkit/internal/controls/buttons/radio-button-impl.cpp b/dali-toolkit/internal/controls/buttons/radio-button-impl.cpp index 01be254..bf35f99 100644 --- a/dali-toolkit/internal/controls/buttons/radio-button-impl.cpp +++ b/dali-toolkit/internal/controls/buttons/radio-button-impl.cpp @@ -71,9 +71,12 @@ void RadioButton::OnInitialize() { Button::OnInitialize(); - DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { - return std::make_unique(actor, Dali::Accessibility::Role::RADIO_BUTTON); - }); + Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::RADIO_BUTTON); +} + +DevelControl::ControlAccessible* RadioButton::CreateAccessibleObject() +{ + return new RadioButtonAccessible(Self()); } bool RadioButton::OnToggleReleased() diff --git a/dali-toolkit/internal/controls/buttons/radio-button-impl.h b/dali-toolkit/internal/controls/buttons/radio-button-impl.h index 8c3289d..dbe2d35 100644 --- a/dali-toolkit/internal/controls/buttons/radio-button-impl.h +++ b/dali-toolkit/internal/controls/buttons/radio-button-impl.h @@ -65,6 +65,11 @@ private: // From Button void OnInitialize() override; /** + * @copydoc Toolkit::Internal::Control::CreateAccessibleObject() + */ + DevelControl::ControlAccessible* CreateAccessibleObject() override; + + /** * @copydoc Toolkit::Internal::Button::OnStateChange */ void OnStateChange(State newState) override; diff --git a/dali-toolkit/internal/controls/buttons/toggle-button-impl.cpp b/dali-toolkit/internal/controls/buttons/toggle-button-impl.cpp index a69f7ec..1b6ef02 100644 --- a/dali-toolkit/internal/controls/buttons/toggle-button-impl.cpp +++ b/dali-toolkit/internal/controls/buttons/toggle-button-impl.cpp @@ -106,9 +106,12 @@ void ToggleButton::OnInitialize() Actor self = Self(); self.SetProperty(Actor::Property::LEAVE_REQUIRED, true); - DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { - return std::make_unique(actor, Dali::Accessibility::Role::TOGGLE_BUTTON); - }); + self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::TOGGLE_BUTTON); +} + +DevelControl::ControlAccessible* ToggleButton::CreateAccessibleObject() +{ + return new ToggleButtonAccessible(Self()); } void ToggleButton::SetProperty(BaseObject* object, Property::Index propertyIndex, const Property::Value& value) diff --git a/dali-toolkit/internal/controls/buttons/toggle-button-impl.h b/dali-toolkit/internal/controls/buttons/toggle-button-impl.h index 587c54e..c6652a5 100644 --- a/dali-toolkit/internal/controls/buttons/toggle-button-impl.h +++ b/dali-toolkit/internal/controls/buttons/toggle-button-impl.h @@ -128,6 +128,11 @@ private: // From Button void OnInitialize() override; /** + * @copydoc Toolkit::Internal::Control::CreateAccessibleObject() + */ + DevelControl::ControlAccessible* CreateAccessibleObject() override; + + /** * @copydoc Toolkit::Internal::Button::OnRelayout */ void OnRelayout(const Vector2& size, RelayoutContainer& container) override; 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 7d4c14b..39253d0 100644 --- a/dali-toolkit/internal/controls/canvas-view/canvas-view-impl.cpp +++ b/dali-toolkit/internal/controls/canvas-view/canvas-view-impl.cpp @@ -97,9 +97,7 @@ void CanvasView::OnInitialize() // CanvasView can relayout in the OnImageReady, alternative to a signal would be to have a upcall from the Control to CanvasView Dali::Toolkit::Control handle(GetOwner()); - DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { - return std::make_unique(actor, Dali::Accessibility::Role::IMAGE); - }); + Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, 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 2c5a279..c1618f3 100644 --- a/dali-toolkit/internal/controls/control/control-data-impl.cpp +++ b/dali-toolkit/internal/controls/control/control-data-impl.cpp @@ -522,10 +522,6 @@ Control::Impl::Impl(Control& controlImpl) mDispatchKeyEvents(true) { Dali::Accessibility::Accessible::RegisterExternalAccessibleGetter(&ExternalAccessibleGetter); - - mAccessibilityConstructor = [](Dali::Actor actor) { - return std::make_unique(actor, Dali::Accessibility::Role::UNKNOWN); - }; } Control::Impl::~Impl() @@ -2059,7 +2055,7 @@ Toolkit::DevelControl::ControlAccessible* Control::Impl::GetAccessibleObject() { if(!mAccessibleObject) { - mAccessibleObject = mAccessibilityConstructor(mControlImpl.Self()); + mAccessibleObject.reset(mControlImpl.CreateAccessibleObject()); } return mAccessibleObject.get(); diff --git a/dali-toolkit/internal/controls/control/control-data-impl.h b/dali-toolkit/internal/controls/control/control-data-impl.h index 4fe9c44..13ee7de 100644 --- a/dali-toolkit/internal/controls/control/control-data-impl.h +++ b/dali-toolkit/internal/controls/control/control-data-impl.h @@ -535,7 +535,6 @@ public: Dali::Accessibility::Role mAccessibilityRole = Dali::Accessibility::Role::UNKNOWN; std::map> mAccessibilityRelations; - std::function(Actor)> mAccessibilityConstructor; std::unique_ptr mAccessibleObject; // Gesture Detection 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 937a9c9..5f132c7 100644 --- a/dali-toolkit/internal/controls/effects-view/effects-view-impl.cpp +++ b/dali-toolkit/internal/controls/effects-view/effects-view-impl.cpp @@ -234,9 +234,7 @@ void EffectsView::OnInitialize() mChildrenRoot.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); self.Add(mChildrenRoot); - DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) { - return std::make_unique(actor, Dali::Accessibility::Role::FILLER); - }); + self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::FILLER); } void EffectsView::OnSizeSet(const Vector3& targetSize) 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 ae7f1aa..b220445 100644 --- a/dali-toolkit/internal/controls/flex-container/flex-container-impl.cpp +++ b/dali-toolkit/internal/controls/flex-container/flex-container-impl.cpp @@ -835,9 +835,7 @@ void FlexContainer::OnInitialize() self.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true); SetAsKeyboardFocusGroup(true); - DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) { - return std::make_unique(actor, Dali::Accessibility::Role::FILLER); - }); + self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::FILLER); } } // namespace Internal 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 a471455..31b7c61 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 @@ -295,9 +295,7 @@ void GaussianBlurView::OnInitialize() mInternalRoot.Add(mVertBlurActor); mInternalRoot.Add(mRenderDownsampledCamera); - DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { - return std::make_unique(actor, Dali::Accessibility::Role::FILLER); - }); + Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::FILLER); } void GaussianBlurView::OnSizeSet(const Vector3& targetSize) 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 a13e438..f769b44 100644 --- a/dali-toolkit/internal/controls/image-view/image-view-impl.cpp +++ b/dali-toolkit/internal/controls/image-view/image-view-impl.cpp @@ -94,9 +94,7 @@ void ImageView::OnInitialize() Dali::Toolkit::Control handle(GetOwner()); handle.ResourceReadySignal().Connect(this, &ImageView::OnResourceReady); - DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { - return std::make_unique(actor, Dali::Accessibility::Role::IMAGE); - }); + Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::IMAGE); } void ImageView::SetImage(const Property::Map& map) diff --git a/dali-toolkit/internal/controls/magnifier/magnifier-impl.cpp b/dali-toolkit/internal/controls/magnifier/magnifier-impl.cpp index 0f8516e..671551b 100644 --- a/dali-toolkit/internal/controls/magnifier/magnifier-impl.cpp +++ b/dali-toolkit/internal/controls/magnifier/magnifier-impl.cpp @@ -218,9 +218,7 @@ void Magnifier::Initialize() constraint.AddSource(Source(self, Actor::Property::WORLD_SCALE)); constraint.Apply(); - DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) { - return std::make_unique(actor, Dali::Accessibility::Role::FILLER); - }); + self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::FILLER); } Magnifier::~Magnifier() 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 44c2b91..1384a15 100644 --- a/dali-toolkit/internal/controls/model3d-view/model3d-view-impl.cpp +++ b/dali-toolkit/internal/controls/model3d-view/model3d-view-impl.cpp @@ -280,9 +280,7 @@ void Model3dView::OnInitialize() Shader shader = Shader::New(SHADER_MODEL3D_VIEW_SIMPLE_SHADER_VERT, SHADER_MODEL3D_VIEW_SIMPLE_SHADER_FRAG); mRenderer = Renderer::New(mesh, shader); - DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { - return std::make_unique(actor, Dali::Accessibility::Role::IMAGE); - }); + Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::IMAGE); } void Model3dView::LoadGeometry() 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 f511fe8..f140e3e 100644 --- a/dali-toolkit/internal/controls/navigation-view/navigation-view-impl.cpp +++ b/dali-toolkit/internal/controls/navigation-view/navigation-view-impl.cpp @@ -70,9 +70,7 @@ Toolkit::NavigationView NavigationView::New() void NavigationView::OnInitialize() { - DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { - return std::make_unique(actor, Dali::Accessibility::Role::FILLER); - }); + Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::FILLER); } void NavigationView::OnSceneConnection(int depth) 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 df54bd6..a5e9e95 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 @@ -414,9 +414,7 @@ void PageTurnView::OnInitialize() // enable the pan gesture which is attached to the control EnableGestureDetection(GestureType::Value(GestureType::PAN)); - DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { - return std::make_unique(actor, Dali::Accessibility::Role::PAGE_TAB_LIST); - }); + Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::PAGE_TAB_LIST); } Shader PageTurnView::CreateShader(const Property::Map& shaderMap) diff --git a/dali-toolkit/internal/controls/popup/popup-impl.cpp b/dali-toolkit/internal/controls/popup/popup-impl.cpp index cf4e02c..f7ebcf4 100644 --- a/dali-toolkit/internal/controls/popup/popup-impl.cpp +++ b/dali-toolkit/internal/controls/popup/popup-impl.cpp @@ -345,9 +345,12 @@ void Popup::OnInitialize() DevelControl::AppendAccessibilityAttribute(Toolkit::Control::DownCast(self), "sub-role", "Alert"); - DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) { - return std::make_unique(actor, Dali::Accessibility::Role::DIALOG, true); - }); + self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::DIALOG); +} + +DevelControl::ControlAccessible* Popup::CreateAccessibleObject() +{ + return new PopupAccessible(Self()); } Popup::~Popup() @@ -2023,6 +2026,7 @@ Dali::Accessibility::States Popup::PopupAccessible::CalculateStates() auto displayState = popup.GetProperty(Toolkit::Popup::Property::DISPLAY_STATE); states[Dali::Accessibility::State::SHOWING] = (displayState == "SHOWN" || displayState == "SHOWING"); + states[Dali::Accessibility::State::MODAL] = true; return states; } diff --git a/dali-toolkit/internal/controls/popup/popup-impl.h b/dali-toolkit/internal/controls/popup/popup-impl.h index 2445ac6..8f4aef0 100644 --- a/dali-toolkit/internal/controls/popup/popup-impl.h +++ b/dali-toolkit/internal/controls/popup/popup-impl.h @@ -437,6 +437,11 @@ private: void OnInitialize() override; /** + * @copydoc Toolkit::Internal::Control::CreateAccessibleObject() + */ + DevelControl::ControlAccessible* CreateAccessibleObject() override; + + /** * Called whenever the popup layout is re-set up. * Normally due to a change in contents. * Note: This is only done when the popup is shown. 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 0787b56..f98ece7 100644 --- a/dali-toolkit/internal/controls/progress-bar/progress-bar-impl.cpp +++ b/dali-toolkit/internal/controls/progress-bar/progress-bar-impl.cpp @@ -165,11 +165,14 @@ ProgressBar::~ProgressBar() void ProgressBar::OnInitialize() { - DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { - return std::make_unique(actor, Dali::Accessibility::Role::PROGRESS_BAR); - }); - //Enable highightability - Self().SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true); + // Accessibility + Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::PROGRESS_BAR); + Self().SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true); +} + +DevelControl::ControlAccessible* ProgressBar::CreateAccessibleObject() +{ + return new ProgressBarAccessible(Self()); } void ProgressBar::OnRelayout(const Vector2& size, RelayoutContainer& container) diff --git a/dali-toolkit/internal/controls/progress-bar/progress-bar-impl.h b/dali-toolkit/internal/controls/progress-bar/progress-bar-impl.h index 0879d97..13c9cb3 100644 --- a/dali-toolkit/internal/controls/progress-bar/progress-bar-impl.h +++ b/dali-toolkit/internal/controls/progress-bar/progress-bar-impl.h @@ -201,6 +201,11 @@ private: void OnInitialize() override; /** + * @copydoc Toolkit::Internal::Control::CreateAccessibleObject() + */ + DevelControl::ControlAccessible* CreateAccessibleObject() override; + + /** * Get the range of the valid values the ProgressBar handle can move between * * @param[in] currentSize The current size of the ProgressBar 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 a89b9f5..88fdf6b 100644 --- a/dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.cpp +++ b/dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.cpp @@ -209,12 +209,17 @@ ScrollBar::~ScrollBar() void ScrollBar::OnInitialize() { + auto self = Self(); + CreateDefaultIndicatorActor(); - Self().SetProperty(Actor::Property::DRAW_MODE, DrawMode::OVERLAY_2D); + self.SetProperty(Actor::Property::DRAW_MODE, DrawMode::OVERLAY_2D); + + self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::SCROLL_BAR); +} - DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { - return std::make_unique(actor, Dali::Accessibility::Role::SCROLL_BAR); - }); +DevelControl::ControlAccessible* ScrollBar::CreateAccessibleObject() +{ + return new ScrollBarAccessible(Self()); } void ScrollBar::SetScrollPropertySource(Handle handle, Property::Index propertyScrollPosition, Property::Index propertyMinScrollPosition, Property::Index propertyMaxScrollPosition, Property::Index propertyScrollContentSize) diff --git a/dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.h b/dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.h index f50009f..57def7f 100644 --- a/dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.h +++ b/dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.h @@ -211,6 +211,11 @@ private: // from Control void OnInitialize() override; /** + * @copydoc Toolkit::Internal::Control::CreateAccessibleObject() + */ + DevelControl::ControlAccessible* CreateAccessibleObject() override; + + /** * @copydoc Toolkit::Control::OnPan */ void OnPan(const PanGesture& gesture) override; diff --git a/dali-toolkit/internal/controls/scrollable/item-view/item-view-impl.cpp b/dali-toolkit/internal/controls/scrollable/item-view/item-view-impl.cpp index 5984721..6d6e211 100644 --- a/dali-toolkit/internal/controls/scrollable/item-view/item-view-impl.cpp +++ b/dali-toolkit/internal/controls/scrollable/item-view/item-view-impl.cpp @@ -367,9 +367,12 @@ void ItemView::OnInitialize() // Connect wheel event self.WheelEventSignal().Connect(this, &ItemView::OnWheelEvent); - DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) { - return std::make_unique(actor, Dali::Accessibility::Role::SCROLL_PANE); - }); + self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::SCROLL_PANE); +} + +DevelControl::ControlAccessible* ItemView::CreateAccessibleObject() +{ + return new ItemViewAccessible(Self()); } ItemView::~ItemView() diff --git a/dali-toolkit/internal/controls/scrollable/item-view/item-view-impl.h b/dali-toolkit/internal/controls/scrollable/item-view/item-view-impl.h index 2201c84..b388e22 100644 --- a/dali-toolkit/internal/controls/scrollable/item-view/item-view-impl.h +++ b/dali-toolkit/internal/controls/scrollable/item-view/item-view-impl.h @@ -419,6 +419,11 @@ private: // From Control void OnInitialize() override; /** + * @copydoc Toolkit::Internal::Control::CreateAccessibleObject() + */ + DevelControl::ControlAccessible* CreateAccessibleObject() override; + + /** * @copydoc Toolkit::Control::OnAccessibilityPan() */ bool OnAccessibilityPan(PanGesture gesture) override; diff --git a/dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-impl.cpp b/dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-impl.cpp index 331ec0c..a4d724d 100644 --- a/dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-impl.cpp +++ b/dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-impl.cpp @@ -680,9 +680,12 @@ void ScrollView::OnInitialize() // Connect wheel event self.WheelEventSignal().Connect(this, &ScrollView::OnWheelEvent); - DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { - return std::make_unique(actor, Dali::Accessibility::Role::SCROLL_PANE); - }); + self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::SCROLL_PANE); +} + +DevelControl::ControlAccessible* ScrollView::CreateAccessibleObject() +{ + return new ScrollViewAccessible(Self()); } void ScrollView::OnSceneConnection(int depth) diff --git a/dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-impl.h b/dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-impl.h index 5bfcb04..d9dddfc 100644 --- a/dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-impl.h +++ b/dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-impl.h @@ -661,6 +661,11 @@ private: // private overridden functions from CustomActorImpl and Controls void OnInitialize() override; /** + * @copydoc Toolkit::Internal::Control::CreateAccessibleObject() + */ + DevelControl::ControlAccessible* CreateAccessibleObject() override; + + /** * @copydoc CustomActorImpl::OnSceneConnection() */ void OnSceneConnection(int depth) override; diff --git a/dali-toolkit/internal/controls/scrollable/scrollable-impl.cpp b/dali-toolkit/internal/controls/scrollable/scrollable-impl.cpp index 8cf0856..7c12348 100644 --- a/dali-toolkit/internal/controls/scrollable/scrollable-impl.cpp +++ b/dali-toolkit/internal/controls/scrollable/scrollable-impl.cpp @@ -99,9 +99,12 @@ bool Scrollable::ScrollableAccessible::IsScrollable() const void Scrollable::OnInitialize() { - DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { - return std::make_unique(actor, Dali::Accessibility::Role::SCROLL_PANE); - }); + Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::SCROLL_PANE); +} + +DevelControl::ControlAccessible* Scrollable::CreateAccessibleObject() +{ + return new ScrollableAccessible(Self()); } bool Scrollable::IsOvershootEnabled() const diff --git a/dali-toolkit/internal/controls/scrollable/scrollable-impl.h b/dali-toolkit/internal/controls/scrollable/scrollable-impl.h index cbed9c1..5e30b86 100644 --- a/dali-toolkit/internal/controls/scrollable/scrollable-impl.h +++ b/dali-toolkit/internal/controls/scrollable/scrollable-impl.h @@ -133,6 +133,11 @@ protected: // From Control */ virtual void OnInitialize() override; + /** + * @copydoc Toolkit::Internal::Control::CreateAccessibleObject() + */ + DevelControl::ControlAccessible* CreateAccessibleObject() override; + private: /** * Temporary function to override EnableScrollOvershoot functionality for overshoot 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 98025ec..9140b97 100644 --- a/dali-toolkit/internal/controls/shadow-view/shadow-view-impl.cpp +++ b/dali-toolkit/internal/controls/shadow-view/shadow-view-impl.cpp @@ -256,9 +256,7 @@ void ShadowView::OnInitialize() blurStrengthConstraint.AddSource(Source(self, mBlurStrengthPropertyIndex)); blurStrengthConstraint.Apply(); - DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { - return std::make_unique(actor, Dali::Accessibility::Role::FILLER); - }); + Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::FILLER); } void ShadowView::OnChildAdd(Actor& child) diff --git a/dali-toolkit/internal/controls/slider/slider-impl.cpp b/dali-toolkit/internal/controls/slider/slider-impl.cpp index 7f47940..a48ddbe 100644 --- a/dali-toolkit/internal/controls/slider/slider-impl.cpp +++ b/dali-toolkit/internal/controls/slider/slider-impl.cpp @@ -202,15 +202,17 @@ void Slider::OnInitialize() // Size the Slider actor to a default self.SetProperty(Actor::Property::SIZE, Vector2(DEFAULT_HIT_REGION.x, DEFAULT_HIT_REGION.y)); - // Set the Slider to be highlightable in Screen Reader mode - self.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true); - // Connect to the touch signal self.TouchedSignal().Connect(this, &Slider::OnTouch); - DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) { - return std::make_unique(actor, Dali::Accessibility::Role::SLIDER); - }); + // Accessibility + self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::SLIDER); + self.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true); +} + +DevelControl::ControlAccessible* Slider::CreateAccessibleObject() +{ + return new SliderAccessible(Self()); } void Slider::OnRelayout(const Vector2& size, RelayoutContainer& container) diff --git a/dali-toolkit/internal/controls/slider/slider-impl.h b/dali-toolkit/internal/controls/slider/slider-impl.h index b34f30c..7bf3e2a 100644 --- a/dali-toolkit/internal/controls/slider/slider-impl.h +++ b/dali-toolkit/internal/controls/slider/slider-impl.h @@ -319,6 +319,11 @@ private: void OnInitialize() override; /** + * @copydoc Toolkit::Internal::Control::CreateAccessibleObject() + */ + DevelControl::ControlAccessible* CreateAccessibleObject() override; + + /** * Hit region touch * * @param[in] actor The actor the event is raised for 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 31fee22..7ea1492 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 @@ -149,9 +149,7 @@ void SuperBlurView::OnInitialize() mBlurStrengthPropertyIndex = self.RegisterUniqueProperty("blurStrength", 0.f); - DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) { - return std::make_unique(actor, Dali::Accessibility::Role::FILLER); - }); + self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::FILLER); } void SuperBlurView::SetTexture(Texture texture) 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 7a42643..2afc0da 100644 --- a/dali-toolkit/internal/controls/table-view/table-view-impl.cpp +++ b/dali-toolkit/internal/controls/table-view/table-view-impl.cpp @@ -1119,9 +1119,7 @@ void TableView::OnInitialize() self.SetProperty(Actor::Property::KEYBOARD_FOCUSABLE, true); SetAsKeyboardFocusGroup(true); - DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) { - return std::make_unique(actor, Dali::Accessibility::Role::TABLE); - }); + self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::TABLE); } void TableView::ResizeContainers(unsigned int rows, unsigned int columns) 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 a712d68..8abb0ae 100644 --- a/dali-toolkit/internal/controls/text-controls/text-anchor-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-anchor-impl.cpp @@ -145,12 +145,14 @@ void TextAnchor::OnInitialize() { Actor self = Self(); - // Enable highlightability - self.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true); + // Accessibility + self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::LINK); + self.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true); +} - DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) { - return std::make_unique(actor, Dali::Accessibility::Role::LINK); - }); +DevelControl::ControlAccessible* TextAnchor::CreateAccessibleObject() +{ + return new TextAnchorAccessible(Self()); } TextAnchor::TextAnchor() diff --git a/dali-toolkit/internal/controls/text-controls/text-anchor-impl.h b/dali-toolkit/internal/controls/text-controls/text-anchor-impl.h index 75ef5a2..8b32bdd 100644 --- a/dali-toolkit/internal/controls/text-controls/text-anchor-impl.h +++ b/dali-toolkit/internal/controls/text-controls/text-anchor-impl.h @@ -71,6 +71,11 @@ private: // From Control void OnInitialize() override; /** + * @copydoc Toolkit::Internal::Control::CreateAccessibleObject() + */ + DevelControl::ControlAccessible* CreateAccessibleObject() override; + + /** * @copydoc Control::OnPropertySet() */ // void OnPropertySet(Property::Index index, const Property::Value& propertyValue) override; 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 4e6fc1f..d3c0154 100644 --- a/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp @@ -582,9 +582,6 @@ void TextEditor::OnInitialize() self.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::HEIGHT); self.OnSceneSignal().Connect(this, &TextEditor::OnSceneConnect); - //Enable highightability - self.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true); - DevelControl::SetInputMethodContext(*this, mInputMethodContext); // Creates an extra control to be used as stencil buffer. @@ -602,14 +599,19 @@ void TextEditor::OnInitialize() self.Add(mStencil); - DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) { - return std::make_unique(actor, Dali::Accessibility::Role::ENTRY); - }); + // Accessibility + self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::ENTRY); + self.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true); Accessibility::Bridge::EnabledSignal().Connect(this, &TextEditor::OnAccessibilityStatusChanged); Accessibility::Bridge::DisabledSignal().Connect(this, &TextEditor::OnAccessibilityStatusChanged); } +DevelControl::ControlAccessible* TextEditor::CreateAccessibleObject() +{ + return new TextEditorAccessible(Self()); +} + void TextEditor::OnStyleChange(Toolkit::StyleManager styleManager, StyleChange::Type change) { DALI_LOG_INFO(gTextEditorLogFilter, Debug::Verbose, "TextEditor::OnStyleChange\n"); diff --git a/dali-toolkit/internal/controls/text-controls/text-editor-impl.h b/dali-toolkit/internal/controls/text-controls/text-editor-impl.h index de10dd4..5739ac2 100644 --- a/dali-toolkit/internal/controls/text-controls/text-editor-impl.h +++ b/dali-toolkit/internal/controls/text-controls/text-editor-impl.h @@ -161,6 +161,11 @@ private: // From Control void OnInitialize() override; /** + * @copydoc Toolkit::Internal::Control::CreateAccessibleObject() + */ + DevelControl::ControlAccessible* CreateAccessibleObject() override; + + /** * @copydoc Control::OnStyleChange() */ void OnStyleChange(Toolkit::StyleManager styleManager, StyleChange::Type change) override; 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 22738f6..b1ea8e7 100644 --- a/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp @@ -527,9 +527,6 @@ void TextField::OnInitialize() self.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::HEIGHT); self.OnSceneSignal().Connect(this, &TextField::OnSceneConnect); - //Enable highightability - self.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true); - DevelControl::SetInputMethodContext(*this, mInputMethodContext); if(Dali::Toolkit::TextField::EXCEED_POLICY_CLIP == mExceedPolicy) @@ -537,14 +534,19 @@ void TextField::OnInitialize() EnableClipping(); } - DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) { - return std::make_unique(actor, Dali::Accessibility::Role::ENTRY); - }); + // Accessibility + self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::ENTRY); + self.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true); Accessibility::Bridge::EnabledSignal().Connect(this, &TextField::OnAccessibilityStatusChanged); Accessibility::Bridge::DisabledSignal().Connect(this, &TextField::OnAccessibilityStatusChanged); } +DevelControl::ControlAccessible* TextField::CreateAccessibleObject() +{ + return new TextFieldAccessible(Self()); +} + void TextField::OnStyleChange(Toolkit::StyleManager styleManager, StyleChange::Type change) { DALI_LOG_INFO(gTextFieldLogFilter, Debug::Verbose, "TextField::OnStyleChange\n"); diff --git a/dali-toolkit/internal/controls/text-controls/text-field-impl.h b/dali-toolkit/internal/controls/text-controls/text-field-impl.h index 223fa71..d2d7fdf 100644 --- a/dali-toolkit/internal/controls/text-controls/text-field-impl.h +++ b/dali-toolkit/internal/controls/text-controls/text-field-impl.h @@ -152,6 +152,11 @@ private: // From Control void OnInitialize() override; /** + * @copydoc Toolkit::Internal::Control::CreateAccessibleObject() + */ + DevelControl::ControlAccessible* CreateAccessibleObject() override; + + /** * @copydoc Control::OnStyleChange() */ void OnStyleChange(Toolkit::StyleManager styleManager, StyleChange::Type change) override; diff --git a/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp index 21a0285..76d0ee2 100644 --- a/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp @@ -883,9 +883,6 @@ void TextLabel::OnInitialize() self.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH); self.SetResizePolicy(ResizePolicy::DIMENSION_DEPENDENCY, Dimension::HEIGHT); - // Enable highlightability - self.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true); - // Enable the text ellipsis. mController->SetTextElideEnabled(true); // If false then text larger than control will overflow @@ -899,14 +896,19 @@ void TextLabel::OnInitialize() Layout::Engine& engine = mController->GetLayoutEngine(); engine.SetCursorWidth(0u); // Do not layout space for the cursor. - DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) { - return std::make_unique(actor, Dali::Accessibility::Role::LABEL); - }); + // Accessibility + self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::LABEL); + self.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true); Accessibility::Bridge::EnabledSignal().Connect(this, &TextLabel::OnAccessibilityStatusChanged); Accessibility::Bridge::DisabledSignal().Connect(this, &TextLabel::OnAccessibilityStatusChanged); } +DevelControl::ControlAccessible* TextLabel::CreateAccessibleObject() +{ + return new TextLabelAccessible(Self()); +} + void TextLabel::OnStyleChange(Toolkit::StyleManager styleManager, StyleChange::Type change) { DALI_LOG_INFO(gLogFilter, Debug::Verbose, "TextLabel::OnStyleChange\n"); diff --git a/dali-toolkit/internal/controls/text-controls/text-label-impl.h b/dali-toolkit/internal/controls/text-controls/text-label-impl.h index fb78d60..49f9197 100644 --- a/dali-toolkit/internal/controls/text-controls/text-label-impl.h +++ b/dali-toolkit/internal/controls/text-controls/text-label-impl.h @@ -131,6 +131,11 @@ private: // From Control void OnInitialize() override; /** + * @copydoc Toolkit::Internal::Control::CreateAccessibleObject() + */ + DevelControl::ControlAccessible* CreateAccessibleObject() override; + + /** * @copydoc Control::OnStyleChange() */ void OnStyleChange(Toolkit::StyleManager styleManager, StyleChange::Type change) override; 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 96838ba..5d41058 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 @@ -397,12 +397,23 @@ void TextSelectionPopup::OnInitialize() self.SetResizePolicy(ResizePolicy::FIT_TO_CHILDREN, Dimension::ALL_DIMENSIONS); self.SetProperty(Actor::Property::COLOR_ALPHA, 0.0f); - DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { - return std::make_unique(actor, Dali::Accessibility::Role::DIALOG, true); - }); - - //Enable highightability + // Accessibility self.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true); + self.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::DIALOG); +} + +DevelControl::ControlAccessible* TextSelectionPopup::CreateAccessibleObject() +{ + return new TextSelectionPopupAccessible(Self()); +} + +Dali::Accessibility::States TextSelectionPopup::TextSelectionPopupAccessible::CalculateStates() +{ + auto states = ControlAccessible::CalculateStates(); + + states[Dali::Accessibility::State::MODAL] = true; + + return states; } void TextSelectionPopup::HideAnimationFinished(Animation& animation) diff --git a/dali-toolkit/internal/controls/text-controls/text-selection-popup-impl.h b/dali-toolkit/internal/controls/text-controls/text-selection-popup-impl.h index 64130e1..41686ee 100644 --- a/dali-toolkit/internal/controls/text-controls/text-selection-popup-impl.h +++ b/dali-toolkit/internal/controls/text-controls/text-selection-popup-impl.h @@ -24,6 +24,7 @@ #include // INTERNAL INCLUDES +#include #include #include #include @@ -139,6 +140,11 @@ private: // From Control */ void OnInitialize() override; + /** + * @copydoc Toolkit::Internal::Control::CreateAccessibleObject() + */ + DevelControl::ControlAccessible* CreateAccessibleObject() override; + private: // Implementation void HideAnimationFinished(Animation& animation); @@ -266,6 +272,18 @@ private: // Implementation */ virtual ~TextSelectionPopup(); +protected: + class TextSelectionPopupAccessible : public DevelControl::ControlAccessible + { + public: + using DevelControl::ControlAccessible::ControlAccessible; + + /** + * @copydoc DevelControl::ControlAccessible::CalculateStates() + */ + Dali::Accessibility::States CalculateStates() override; + }; + private: // Undefined copy constructor and assignment operators TextSelectionPopup(const TextSelectionPopup&); 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 3283e42..f28f92b 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 @@ -164,9 +164,7 @@ void TextSelectionToolbar::OnInitialize() { SetUp(); - DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { - return std::make_unique(actor, Dali::Accessibility::Role::TOOL_BAR); - }); + Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::TOOL_BAR); } void TextSelectionToolbar::OnRelayout(const Vector2& size, RelayoutContainer& container) 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 e7c29b4..19cb548 100644 --- a/dali-toolkit/internal/controls/tool-bar/tool-bar-impl.cpp +++ b/dali-toolkit/internal/controls/tool-bar/tool-bar-impl.cpp @@ -311,9 +311,7 @@ void ToolBar::OnInitialize() mLayout.SetRelativeWidth(0, mLeftRelativeSpace); mLayout.SetRelativeWidth(1, mRightRelativeSpace); - DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { - return std::make_unique(actor, Dali::Accessibility::Role::TOOL_BAR); - }); + Self().SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::TOOL_BAR); } void ToolBar::OnChildAdd(Actor& child) 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 eefdb2e..154caac 100644 --- a/dali-toolkit/internal/controls/video-view/video-view-impl.cpp +++ b/dali-toolkit/internal/controls/video-view/video-view-impl.cpp @@ -118,12 +118,9 @@ void VideoView::OnInitialize() Actor self = Self(); mVideoPlayer.FinishedSignal().Connect(this, &VideoView::EmitSignalFinish); - DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) { - return std::make_unique(actor, Dali::Accessibility::Role::VIDEO); - }); - - //Enable highightability - Self().SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true); + // Accessibility + self.SetProperty(DevelControl::Property::ACCESSIBILITY_ROLE, Dali::Accessibility::Role::VIDEO); + self.SetProperty(DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true); //update self property self.RegisterProperty(IS_VIDEO_VIEW_PROPERTY_NAME, true, Property::READ_WRITE); diff --git a/dali-toolkit/public-api/controls/control-impl.cpp b/dali-toolkit/public-api/controls/control-impl.cpp index 1407578..271b826 100644 --- a/dali-toolkit/public-api/controls/control-impl.cpp +++ b/dali-toolkit/public-api/controls/control-impl.cpp @@ -345,6 +345,11 @@ bool Control::OnAccessibilityZoom() return false; // Accessibility zoom action is not handled by default } +DevelControl::ControlAccessible* Control::CreateAccessibleObject() +{ + return new DevelControl::ControlAccessible(Self()); +} + Actor Control::GetNextKeyboardFocusableActor(Actor currentFocusedActor, Toolkit::Control::KeyboardFocus::Direction direction, bool loopEnabled) { return Actor(); diff --git a/dali-toolkit/public-api/controls/control-impl.h b/dali-toolkit/public-api/controls/control-impl.h index 0a3584e..9ccb533 100644 --- a/dali-toolkit/public-api/controls/control-impl.h +++ b/dali-toolkit/public-api/controls/control-impl.h @@ -120,9 +120,11 @@ public: /** * @brief Gets the Accessible object that represents this control. * - * This method creates the Accessible object if necessary, so a non-null return is expected. + * This method calls CreateAccessibleObject() if necessary, so a non-null return is expected. * * @return The Accessible object + * + * @see CreateAccessibleObject() */ Toolkit::DevelControl::ControlAccessible* GetAccessibleObject(); @@ -505,6 +507,24 @@ public: // API for derived classes to override */ virtual bool OnAccessibilityZoom(); + /** + * @brief This method should be overriden by deriving classes when they wish to be + * represented by a custom Accessible object implementation. + * + * The AT-SPI infrastructure is responsible for destroying the returned object. + * + * Currently, this method is called at most once in a given Control's lifetime, when + * GetAccessibleObject() is called for the first time. A future version of the + * AT-SPI infrastructure, however, may delete the Accessible object and request a new + * one to be created (by calling this method) multiple times, for example during + * scene connection and disconnection. + * + * @return The newly created Accessible object + * + * @see GetAccessibleObject() + */ + virtual DevelControl::ControlAccessible* CreateAccessibleObject(); + // Keyboard focus /** -- 2.7.4