From: Artur Świgoń Date: Fri, 3 Dec 2021 13:00:20 +0000 (+0100) Subject: [AT-SPI] Synchronize with AT-SPI cleanup in dali-adaptor X-Git-Tag: dali_2.1.4~8 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9a5ce98a301f74f8df8a3be6d223b525c8839b0b;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git [AT-SPI] Synchronize with AT-SPI cleanup in dali-adaptor A related dali-adaptor change adds const-correctness and introduces a new, more coherent naming convention for Accessible objects. The name ControlAccessible now matches ApplicationAccessible, ProxyAccessible etc. and the upcoming ActorAccessible. Change-Id: I63a6887e1c291fbfb475fd8c2384126a31981d6b --- diff --git a/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Controls-BridgeUp.cpp b/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Controls-BridgeUp.cpp index 684d70d9b3..9e352e50f9 100644 --- a/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Controls-BridgeUp.cpp +++ b/automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Controls-BridgeUp.cpp @@ -1077,11 +1077,11 @@ int UtcDaliAccessibilityScrollToChildScrollView(void) Wait(application); - auto* accessibleParent = dynamic_cast(Dali::Accessibility::Accessible::Get(scrollView)); + auto* accessibleParent = dynamic_cast(Dali::Accessibility::Accessible::Get(scrollView)); DALI_TEST_CHECK(accessibleParent); - auto* accessibleA = dynamic_cast(Dali::Accessibility::Accessible::Get(actorA)); + auto* accessibleA = dynamic_cast(Dali::Accessibility::Accessible::Get(actorA)); DALI_TEST_CHECK(accessibleA); - auto* accessibleB = dynamic_cast(Dali::Accessibility::Accessible::Get(actorB)); + auto* accessibleB = dynamic_cast(Dali::Accessibility::Accessible::Get(actorB)); DALI_TEST_CHECK(accessibleB); accessibleA->GrabHighlight(); // == scrollView.ScrollTo(actorA) @@ -1132,11 +1132,11 @@ int UtcDaliAccessibilityScrollToChildItemView(void) Wait(application); - auto* accessibleParent = dynamic_cast(Dali::Accessibility::Accessible::Get(view)); + auto* accessibleParent = dynamic_cast(Dali::Accessibility::Accessible::Get(view)); DALI_TEST_CHECK(accessibleParent); - auto* accessibleA = dynamic_cast(Dali::Accessibility::Accessible::Get(view.GetItem(0))); + auto* accessibleA = dynamic_cast(Dali::Accessibility::Accessible::Get(view.GetItem(0))); DALI_TEST_CHECK(accessibleA); - auto* accessibleB = dynamic_cast(Dali::Accessibility::Accessible::Get(view.GetItem(1))); + auto* accessibleB = dynamic_cast(Dali::Accessibility::Accessible::Get(view.GetItem(1))); DALI_TEST_CHECK(accessibleB); accessibleA->GrabHighlight(); // == view.ScrollToItem(view.GetItemId(actorA)) @@ -1155,7 +1155,7 @@ int UtcDaliAccessibilityScrollToChildNonScrollable(void) TextLabel label = TextLabel::New("123"); - auto* accessible = dynamic_cast(Dali::Accessibility::Accessible::Get(label)); + auto* accessible = dynamic_cast(Dali::Accessibility::Accessible::Get(label)); DALI_TEST_CHECK(accessible); DALI_TEST_EQUALS(accessible->IsScrollable(), false, TEST_LOCATION); @@ -1197,7 +1197,7 @@ int UtcDaliAccessibilityCheckHighlight(void) Wait(application); // Set highlight to first child (A) to enable movement tracking - auto* accessible = dynamic_cast(Dali::Accessibility::Accessible::Get(buttonA)); + auto* accessible = dynamic_cast(Dali::Accessibility::Accessible::Get(buttonA)); DALI_TEST_CHECK(accessible); accessible->GrabHighlight(); Wait(application); @@ -1223,7 +1223,7 @@ int UtcDaliAccessibilityCheckHighlight(void) Dali::Accessibility::TestResetMoveOutedCalled(); // Set highlight to second child (B) to enable movement tracking - accessible = dynamic_cast(Dali::Accessibility::Accessible::Get(buttonB)); + accessible = dynamic_cast(Dali::Accessibility::Accessible::Get(buttonB)); DALI_TEST_CHECK(accessible); accessible->GrabHighlight(); Wait(application); @@ -1261,7 +1261,7 @@ int UtcDaliAccessibilityCheckHighlight(void) Dali::Accessibility::TestResetMoveOutedCalled(); // Disable movement tracking on B by giving highlight to A - accessible = dynamic_cast(Dali::Accessibility::Accessible::Get(buttonA)); + accessible = dynamic_cast(Dali::Accessibility::Accessible::Get(buttonA)); DALI_TEST_CHECK(accessible); accessible->GrabHighlight(); Wait(application); diff --git a/dali-toolkit/devel-api/controls/accessible-impl.cpp b/dali-toolkit/devel-api/controls/accessible-impl.cpp deleted file mode 100644 index e01bcb5ef5..0000000000 --- a/dali-toolkit/devel-api/controls/accessible-impl.cpp +++ /dev/null @@ -1,584 +0,0 @@ -/* - * Copyright (c) 2021 Samsung Electronics Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -// CLASS HEADER -#include "accessible-impl.h" - -// EXTERNAL INCLUDES -#ifdef DGETTEXT_ENABLED -#include -#endif - -#include -#include - -// INTERNAL INCLUDES -#include -#include -#include -#include -#include -#include - -namespace Dali::Toolkit::DevelControl -{ -namespace -{ -static std::string GetLocaleText(std::string string, const char *domain = "dali-toolkit") -{ -#ifdef DGETTEXT_ENABLED - /*TODO: currently non-localized string is used as a key for translation lookup. In case the lookup key formatting is forced - consider calling utility function for converting non-localized string into well-formatted key before lookup. */ - return dgettext(domain, string.c_str()); -#else - return string; -#endif -} - -static Dali::Actor CreateHighlightIndicatorActor() -{ - std::string focusBorderImagePath(AssetManager::GetDaliImagePath()); - focusBorderImagePath += "/keyboard_focus.9.png"; - - // Create the default if it hasn't been set and one that's shared by all the - // keyboard focusable actors - auto actor = Toolkit::ImageView::New(focusBorderImagePath); - actor.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS); - - DevelControl::AppendAccessibilityAttribute(actor, "highlight", std::string()); - actor.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, false); - - return actor; -} -} // unnamed namespace - -AccessibleImpl::AccessibleImpl(Dali::Actor self, Dali::Accessibility::Role role, bool modal) -: mSelf(self), - mIsModal(modal) -{ - auto control = Dali::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) { - if(this->Self() != Dali::Accessibility::Accessible::GetCurrentlyHighlightedActor()) - { - return; - } - - if(index == DevelControl::Property::ACCESSIBILITY_NAME || (index == GetNamePropertyIndex() && !controlImpl.mAccessibilityNameSet)) - { - if(controlImpl.mAccessibilityGetNameSignal.Empty()) - { - Emit(Dali::Accessibility::ObjectPropertyChangeEvent::NAME); - } - } - - if(index == DevelControl::Property::ACCESSIBILITY_DESCRIPTION || (index == GetDescriptionPropertyIndex() && !controlImpl.mAccessibilityDescriptionSet)) - { - if(controlImpl.mAccessibilityGetDescriptionSignal.Empty()) - { - Emit(Dali::Accessibility::ObjectPropertyChangeEvent::DESCRIPTION); - } - } - }); -} - -std::string AccessibleImpl::GetName() -{ - auto control = Dali::Toolkit::Control::DownCast(Self()); - - Internal::Control& internalControl = Toolkit::Internal::GetImplementation(control); - Internal::Control::Impl& controlImpl = Internal::Control::Impl::Get(internalControl); - std::string name; - - if(!controlImpl.mAccessibilityGetNameSignal.Empty()) - { - controlImpl.mAccessibilityGetNameSignal.Emit(name); - } - else if(controlImpl.mAccessibilityNameSet) - { - name = controlImpl.mAccessibilityName; - } - else if(auto raw = GetNameRaw(); !raw.empty()) - { - name = raw; - } - else - { - name = Self().GetProperty(Actor::Property::NAME); - } - - if(controlImpl.mAccessibilityTranslationDomainSet) - { - return GetLocaleText(name, controlImpl.mAccessibilityTranslationDomain.c_str()); - } - - return GetLocaleText(name); -} - -std::string AccessibleImpl::GetNameRaw() -{ - return {}; -} - -std::string AccessibleImpl::GetDescription() -{ - auto control = Dali::Toolkit::Control::DownCast(Self()); - - Internal::Control& internalControl = Toolkit::Internal::GetImplementation(control); - Internal::Control::Impl& controlImpl = Internal::Control::Impl::Get(internalControl); - std::string description; - - if(!controlImpl.mAccessibilityGetDescriptionSignal.Empty()) - { - controlImpl.mAccessibilityGetDescriptionSignal.Emit(description); - } - else if(controlImpl.mAccessibilityDescriptionSet) - { - description = controlImpl.mAccessibilityDescription; - } - else - { - description = GetDescriptionRaw(); - } - if(controlImpl.mAccessibilityTranslationDomainSet) - { - return GetLocaleText(description, controlImpl.mAccessibilityTranslationDomain.c_str()); - } - - return GetLocaleText(description); -} - -std::string AccessibleImpl::GetDescriptionRaw() -{ - return {}; -} - -Dali::Accessibility::Accessible* AccessibleImpl::GetParent() -{ - return Dali::Accessibility::Accessible::Get(Self().GetParent()); -} - -size_t AccessibleImpl::GetChildCount() -{ - return Self().GetChildCount(); -} - -Dali::Accessibility::Accessible* AccessibleImpl::GetChildAtIndex(size_t index) -{ - return Dali::Accessibility::Accessible::Get(Self().GetChildAt(static_cast(index))); -} - -size_t AccessibleImpl::GetIndexInParent() -{ - auto self = Self(); - auto parent = self.GetParent(); - DALI_ASSERT_ALWAYS(parent && "can't call GetIndexInParent on object without parent"); - - auto count = parent.GetChildCount(); - for(auto i = 0u; i < count; ++i) - { - auto child = parent.GetChildAt(i); - if(child == self) - { - return i; - } - } - DALI_ASSERT_ALWAYS(false && "object isn't child of it's parent"); - return static_cast(-1); -} - -Dali::Accessibility::Role AccessibleImpl::GetRole() -{ - return Self().GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ROLE); -} - -std::string AccessibleImpl::GetLocalizedRoleName() -{ - return GetLocaleText(GetRoleName()); -} - -bool AccessibleImpl::IsShowing() -{ - Dali::Actor self = Self(); - if(!self.GetProperty(Actor::Property::VISIBLE) || self.GetProperty(Actor::Property::WORLD_COLOR).a == 0 || self.GetProperty(Dali::DevelActor::Property::CULLED)) - { - return false; - } - - auto* child = this; - auto* parent = dynamic_cast(child->GetParent()); - if(!parent) - { - return true; - } - - auto childExtent = child->GetExtents(Dali::Accessibility::CoordinateType::WINDOW); - while(parent) - { - auto control = Dali::Toolkit::Control::DownCast(parent->Self()); - if(!control.GetProperty(Actor::Property::VISIBLE)) - { - return false; - } - auto clipMode = control.GetProperty(Actor::Property::CLIPPING_MODE).Get(); - auto parentExtent = parent->GetExtents(Dali::Accessibility::CoordinateType::WINDOW); - if ((clipMode != ClippingMode::DISABLED) && !parentExtent.Intersects(childExtent)) - { - return false; - } - parent = dynamic_cast(parent->GetParent()); - } - - return true; -} - -Dali::Accessibility::States AccessibleImpl::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); - - 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::Accessibility::States AccessibleImpl::GetStates() -{ - return CalculateStates(); -} - -Dali::Accessibility::Attributes AccessibleImpl::GetAttributes() -{ - std::unordered_map attributeMap; - auto control = Dali::Toolkit::Control::DownCast(Self()); - auto attribute = control.GetProperty(Dali::Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES); - auto map = attribute.GetMap(); - - if(map) - { - auto mapSize = map->Count(); - - for(unsigned int i = 0; i < mapSize; i++) - { - auto mapKey = map->GetKeyAt(i); - if(mapKey.type == Dali::Property::Key::STRING) - { - std::string mapValue; - if(map->GetValue(i).Get(mapValue)) - { - attributeMap.emplace(std::move(mapKey.stringKey), std::move(mapValue)); - } - } - } - } - - return attributeMap; -} - -Dali::Accessibility::ComponentLayer AccessibleImpl::GetLayer() -{ - return Dali::Accessibility::ComponentLayer::WINDOW; -} - -Dali::Rect<> AccessibleImpl::GetExtents(Dali::Accessibility::CoordinateType type) -{ - Dali::Actor self = Self(); - - Vector2 screenPosition = self.GetProperty(Dali::DevelActor::Property::SCREEN_POSITION).Get(); - auto size = self.GetCurrentProperty(Actor::Property::SIZE) * self.GetCurrentProperty(Actor::Property::WORLD_SCALE); - bool positionUsesAnchorPoint = self.GetProperty(Dali::DevelActor::Property::POSITION_USES_ANCHOR_POINT).Get(); - Vector3 anchorPointOffSet = size * (positionUsesAnchorPoint ? self.GetCurrentProperty(Actor::Property::ANCHOR_POINT) : AnchorPoint::TOP_LEFT); - Vector2 position = Vector2((screenPosition.x - anchorPointOffSet.x), (screenPosition.y - anchorPointOffSet.y)); - - if(type == Dali::Accessibility::CoordinateType::WINDOW) - { - return {position.x, position.y, size.x, size.y}; - } - else // Dali::Accessibility::CoordinateType::SCREEN - { - auto window = Dali::DevelWindow::Get(self); - auto windowPosition = window.GetPosition(); - return {position.x + windowPosition.GetX(), position.y + windowPosition.GetY(), size.x, size.y}; - } -} - -int16_t AccessibleImpl::GetMdiZOrder() -{ - return 0; -} -double AccessibleImpl::GetAlpha() -{ - return 0; -} - -bool AccessibleImpl::GrabFocus() -{ - return Toolkit::KeyboardFocusManager::Get().SetCurrentFocusActor(Self()); -} - -void AccessibleImpl::ScrollToSelf() -{ - auto* child = this; - auto* parent = dynamic_cast(child->GetParent()); - - while (parent) - { - if (parent->IsScrollable()) - { - parent->ScrollToChild(child->Self()); - } - - parent = dynamic_cast(parent->GetParent()); - } -} - -void AccessibleImpl::RegisterPositionPropertyNotification() -{ - auto control = Dali::Toolkit::Control::DownCast(Self()); - Internal::Control& internalControl = Toolkit::Internal::GetImplementation(control); - Internal::Control::Impl& controlImpl = Internal::Control::Impl::Get(internalControl); - controlImpl.RegisterAccessibilityPositionPropertyNotification(); -} - -void AccessibleImpl::UnregisterPositionPropertyNotification() -{ - auto control = Dali::Toolkit::Control::DownCast(Self()); - Internal::Control& internalControl = Toolkit::Internal::GetImplementation(control); - Internal::Control::Impl& controlImpl = Internal::Control::Impl::Get(internalControl); - controlImpl.UnregisterAccessibilityPositionPropertyNotification(); -} - -bool AccessibleImpl::GrabHighlight() -{ - Dali::Actor self = Self(); - auto oldHighlightedActor = GetCurrentlyHighlightedActor(); - - if(!Dali::Accessibility::IsUp()) - { - return false; - } - - if(self == oldHighlightedActor) - { - return true; - } - - // Clear the old highlight. - if(oldHighlightedActor) - { - auto oldHighlightObject = dynamic_cast(Internal::Control::Impl::GetAccessibilityObject(oldHighlightedActor)); - if(oldHighlightObject) - { - oldHighlightObject->ClearHighlight(); - } - } - - auto highlight = GetHighlightActor(); - if(!highlight) - { - highlight = CreateHighlightIndicatorActor(); - SetHighlightActor(highlight); - } - - highlight.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT); - highlight.SetProperty(Actor::Property::POSITION_Z, 1.0f); - highlight.SetProperty(Actor::Property::POSITION, Vector2(0.0f, 0.0f)); - - // Need to set resize policy again, to update SIZE property which is set by - // AccessibleImpl_NUI. The highlight could move from AccessibleImpl_NUI to - // AccessibleImpl. In this case, highlight has incorrect size. - highlight.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS); - - // Remember the highlight actor, so that when the default is changed with - // SetHighlightActor(), the currently displayed highlight can still be cleared. - mCurrentHighlightActor = highlight; - ScrollToSelf(); - self.Add(highlight); - SetCurrentlyHighlightedActor(self); - EmitHighlighted(true); - RegisterPositionPropertyNotification(); - - return true; -} - -bool AccessibleImpl::ClearHighlight() -{ - Dali::Actor self = Self(); - - if(!Dali::Accessibility::IsUp()) - { - return false; - } - - if(GetCurrentlyHighlightedActor() == self) - { - UnregisterPositionPropertyNotification(); - self.Remove(mCurrentHighlightActor.GetHandle()); - mCurrentHighlightActor = {}; - SetCurrentlyHighlightedActor({}); - EmitHighlighted(false); - return true; - } - return false; -} - -std::string AccessibleImpl::GetActionName(size_t index) -{ - if(index >= GetActionCount()) - { - return {}; - } - - Dali::TypeInfo type; - Self().GetTypeInfo(type); - DALI_ASSERT_ALWAYS(type && "no TypeInfo object"); - return type.GetActionName(index); -} - -std::string AccessibleImpl::GetLocalizedActionName(size_t index) -{ - return GetLocaleText(GetActionName(index)); -} - -std::string AccessibleImpl::GetActionDescription(size_t index) -{ - return {}; -} - -size_t AccessibleImpl::GetActionCount() -{ - Dali::TypeInfo type; - Self().GetTypeInfo(type); - DALI_ASSERT_ALWAYS(type && "no TypeInfo object"); - return type.GetActionCount(); -} - -std::string AccessibleImpl::GetActionKeyBinding(size_t index) -{ - return {}; -} - -bool AccessibleImpl::DoAction(size_t index) -{ - std::string actionName = GetActionName(index); - return Self().DoAction(actionName, {}); -} - -bool AccessibleImpl::DoAction(const std::string& name) -{ - return Self().DoAction(name, {}); -} - -bool AccessibleImpl::DoGesture(const Dali::Accessibility::GestureInfo& gestureInfo) -{ - auto control = Dali::Toolkit::Control::DownCast(Self()); - - Internal::Control& internalControl = Toolkit::Internal::GetImplementation(control); - Internal::Control::Impl& controlImpl = Internal::Control::Impl::Get(internalControl); - - if(!controlImpl.mAccessibilityDoGestureSignal.Empty()) - { - auto ret = std::make_pair(gestureInfo, false); - controlImpl.mAccessibilityDoGestureSignal.Emit(ret); - return ret.second; - } - - return false; -} - -std::vector AccessibleImpl::GetRelationSet() -{ - auto control = Dali::Toolkit::Control::DownCast(Self()); - - Internal::Control& internalControl = Toolkit::Internal::GetImplementation(control); - Internal::Control::Impl& controlImpl = Internal::Control::Impl::Get(internalControl); - - std::vector ret; - - for(auto& relation : controlImpl.mAccessibilityRelations) - { - auto& targets = relation.second; - - ret.emplace_back(Accessibility::Relation{relation.first, {}}); - - // Map every Accessible* to its Address - std::transform(targets.begin(), targets.end(), std::back_inserter(ret.back().targets), [](auto* x) { - return x->GetAddress(); - }); - } - - return ret; -} - -Dali::Actor AccessibleImpl::GetInternalActor() -{ - return Dali::Actor{}; -} - -bool AccessibleImpl::ScrollToChild(Actor child) -{ - return false; -} - -Dali::Property::Index AccessibleImpl::GetNamePropertyIndex() -{ - return Actor::Property::NAME; -} - -Dali::Property::Index AccessibleImpl::GetDescriptionPropertyIndex() -{ - return Dali::Property::INVALID_INDEX; -} - -void AccessibleImpl::SetLastPosition(Vector2 position) -{ - mLastPosition = position; -} - -Vector2 AccessibleImpl::GetLastPosition() const -{ - return mLastPosition; -} - -} // namespace Dali::Toolkit::DevelControl diff --git a/dali-toolkit/devel-api/controls/accessible-impl.h b/dali-toolkit/devel-api/controls/accessible-impl.h deleted file mode 100644 index f1f62a765a..0000000000 --- a/dali-toolkit/devel-api/controls/accessible-impl.h +++ /dev/null @@ -1,273 +0,0 @@ -#ifndef DALI_TOOLKIT_ACCESSIBLE_IMPL_H -#define DALI_TOOLKIT_ACCESSIBLE_IMPL_H -/* - * Copyright (c) 2021 Samsung Electronics Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -// EXTERNAL INCLUDES -#include -#include -#include -#include -#include -#include -#include - -// INTERNAL INCLUDES -#include - -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) - * 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 - * @see Dali::Accessibility::Action - * @see Dali::Accessibility::Value - * @see Dali::Accessibility::Text - * @see Dali::Accessibility::EditableText - */ -struct DALI_TOOLKIT_API AccessibleImpl : public virtual Dali::Accessibility::Accessible, - public virtual Dali::Accessibility::Component, - public virtual Dali::Accessibility::Collection, - public virtual Dali::Accessibility::Action -{ -protected: - Vector2 mLastPosition{0.0f, 0.0f}; - Dali::WeakHandle mSelf; - Dali::WeakHandle mCurrentHighlightActor; - bool mIsModal = false; - bool mIsRoot = false; - - Dali::Actor Self() const - { - auto handle = mSelf.GetHandle(); - - // Control::Impl holds a std::unique_ptr to the Accessible object, - // so that one does not outlive the other. - DALI_ASSERT_ALWAYS(handle); - - return handle; - } - - void ScrollToSelf(); - - /** - * @brief Register property notification to check highlighted object position - */ - void RegisterPositionPropertyNotification(); - - /** - * @brief Remove property notification added by RegisterPropertyNotification - */ - void UnregisterPositionPropertyNotification(); - - /** - * @brief Check if the actor is showing - * @return True if the actor is showing - */ - bool IsShowing(); - -public: - AccessibleImpl(Dali::Actor self, Dali::Accessibility::Role role, bool modal = false); - - /** - * @copydoc Dali::Accessibility::Accessible::GetName() - */ - std::string GetName() override; - - /** - * @brief Returns the actor's name in the absence of ACCESSIBILITY_NAME property - */ - virtual std::string GetNameRaw(); - - /** - * @copydoc Dali::Accessibility::Accessible::GetDescription() - */ - std::string GetDescription() override; - - /** - * @brief Returns the actor's description in the absence of ACCESSIBILITY_DESCRIPTION property - */ - virtual std::string GetDescriptionRaw(); - - /** - * @copydoc Dali::Accessibility::Accessible::GetParent() - */ - Dali::Accessibility::Accessible* GetParent() override; - - /** - * @copydoc Dali::Accessibility::Accessible::GetChildCount() - */ - size_t GetChildCount() override; - - /** - * @copydoc Dali::Accessibility::Accessible::GetChildAtIndex() - */ - Dali::Accessibility::Accessible* GetChildAtIndex(size_t index) override; - - /** - * @copydoc Dali::Accessibility::Accessible::GetIndexInParent() - */ - size_t GetIndexInParent() override; - - /** - * @copydoc Dali::Accessibility::Accessible::GetRole() - */ - Dali::Accessibility::Role GetRole() override; - - /** - * @copydoc Dali::Accessibility::Accessible::GetLocalizedRoleName() - */ - std::string GetLocalizedRoleName() override; - - /** - * @copydoc Dali::Accessibility::Accessible::GetStates() - */ - Dali::Accessibility::States GetStates() override; - - /** - * @copydoc Dali::Accessibility::Accessible::GetAttributes() - */ - Dali::Accessibility::Attributes GetAttributes() override; - - /** - * @copydoc Dali::Accessibility::Component::GetExtents() - */ - Dali::Rect<> GetExtents(Accessibility::CoordinateType type) override; - - /** - * @copydoc Dali::Accessibility::Component::GetLayer() - */ - Dali::Accessibility::ComponentLayer GetLayer() override; - - /** - * @copydoc Dali::Accessibility::Component::GetMdiZOrder() - */ - int16_t GetMdiZOrder() override; - - /** - * @copydoc Dali::Accessibility::Component::GrabFocus() - */ - bool GrabFocus() override; - - /** - * @copydoc Dali::Accessibility::Component::GetAlpha() - */ - double GetAlpha() override; - - /** - * @copydoc Dali::Accessibility::Component::GrabHighlight() - */ - bool GrabHighlight() override; - - /** - * @copydoc Dali::Accessibility::Component::ClearHighlight() - */ - bool ClearHighlight() override; - - /** - * @copydoc Dali::Accessibility::Action::GetActionName() - */ - std::string GetActionName(size_t index) override; - - /** - * @copydoc Dali::Accessibility::Action::GetLocalizedActionName() - */ - std::string GetLocalizedActionName(size_t index) override; - - /** - * @copydoc Dali::Accessibility::Action::GetActionDescription() - */ - std::string GetActionDescription(size_t index) override; - - /** - * @copydoc Dali::Accessibility::Action::GetActionCount() - */ - size_t GetActionCount() override; - - /** - * @copydoc Dali::Accessibility::Action::GetActionKeyBinding() - */ - std::string GetActionKeyBinding(size_t index) override; - - /** - * @copydoc Dali::Accessibility::Action::DoAction(size_t) - */ - bool DoAction(size_t index) override; - - /** - * @copydoc Dali::Accessibility::Action::DoAction(const std::string&) - */ - bool DoAction(const std::string& name) override; - - /** - * @copydoc Dali::Accessibility::Accessible::DoGesture() - */ - bool DoGesture(const Dali::Accessibility::GestureInfo& gestureInfo) override; - - /** - * @copydoc Dali::Accessibility::Accessible::GetRelationSet() - */ - std::vector GetRelationSet() override; - - /** - * @copydoc Dali::Accessibility::Accessible::GetInternalActor() - */ - Dali::Actor GetInternalActor() override; - - /** - * @copydoc Dali::Accessibility::Accessible::GetStates() - */ - virtual Dali::Accessibility::States CalculateStates(); - - /** - * @brief Makes sure that a given child (descendant) of this container (e.g. ItemView) is visible - * @return false if scrolling is not supported or child is already visible - */ - virtual bool ScrollToChild(Actor child); - - /** - * @brief Returns the index of the property that represents this actor's name - */ - virtual Dali::Property::Index GetNamePropertyIndex(); - - /** - * @brief Returns the index of the property that represents this actor's description - */ - virtual Dali::Property::Index GetDescriptionPropertyIndex(); - - /** - * @brief Sets last object position - * @param[in] position Last object position - */ - void SetLastPosition(Vector2 position); - - /** - * @brief Gets last object position - * @return The Last object position - */ - Vector2 GetLastPosition() const; -}; - -} // namespace Dali::Toolkit::DevelControl - -#endif // DALI_TOOLKIT_ACCESSIBLE_IMPL_H diff --git a/dali-toolkit/devel-api/controls/control-accessible.cpp b/dali-toolkit/devel-api/controls/control-accessible.cpp new file mode 100644 index 0000000000..7010a6ce1a --- /dev/null +++ b/dali-toolkit/devel-api/controls/control-accessible.cpp @@ -0,0 +1,585 @@ +/* + * Copyright (c) 2021 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// CLASS HEADER +#include "control-accessible.h" + +// EXTERNAL INCLUDES +#ifdef DGETTEXT_ENABLED +#include +#endif + +#include +#include + +// INTERNAL INCLUDES +#include +#include +#include +#include +#include +#include + +namespace Dali::Toolkit::DevelControl +{ +namespace +{ +static std::string GetLocaleText(std::string string, const char *domain = "dali-toolkit") +{ +#ifdef DGETTEXT_ENABLED + /*TODO: currently non-localized string is used as a key for translation lookup. In case the lookup key formatting is forced + consider calling utility function for converting non-localized string into well-formatted key before lookup. */ + return dgettext(domain, string.c_str()); +#else + return string; +#endif +} + +static Dali::Actor CreateHighlightIndicatorActor() +{ + std::string focusBorderImagePath(AssetManager::GetDaliImagePath()); + focusBorderImagePath += "/keyboard_focus.9.png"; + + // Create the default if it hasn't been set and one that's shared by all the + // keyboard focusable actors + auto actor = Toolkit::ImageView::New(focusBorderImagePath); + actor.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS); + + DevelControl::AppendAccessibilityAttribute(actor, "highlight", std::string()); + actor.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, false); + + return actor; +} +} // unnamed namespace + +ControlAccessible::ControlAccessible(Dali::Actor self, Dali::Accessibility::Role role, bool modal) +: mSelf(self), + mIsModal(modal) +{ + auto control = Dali::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) { + if(this->Self() != Dali::Accessibility::Accessible::GetCurrentlyHighlightedActor()) + { + return; + } + + if(index == DevelControl::Property::ACCESSIBILITY_NAME || (index == GetNamePropertyIndex() && !controlImpl.mAccessibilityNameSet)) + { + if(controlImpl.mAccessibilityGetNameSignal.Empty()) + { + Emit(Dali::Accessibility::ObjectPropertyChangeEvent::NAME); + } + } + + if(index == DevelControl::Property::ACCESSIBILITY_DESCRIPTION || (index == GetDescriptionPropertyIndex() && !controlImpl.mAccessibilityDescriptionSet)) + { + if(controlImpl.mAccessibilityGetDescriptionSignal.Empty()) + { + Emit(Dali::Accessibility::ObjectPropertyChangeEvent::DESCRIPTION); + } + } + }); +} + +std::string ControlAccessible::GetName() const +{ + auto control = Dali::Toolkit::Control::DownCast(Self()); + + Internal::Control& internalControl = Toolkit::Internal::GetImplementation(control); + Internal::Control::Impl& controlImpl = Internal::Control::Impl::Get(internalControl); + std::string name; + + if(!controlImpl.mAccessibilityGetNameSignal.Empty()) + { + controlImpl.mAccessibilityGetNameSignal.Emit(name); + } + else if(controlImpl.mAccessibilityNameSet) + { + name = controlImpl.mAccessibilityName; + } + else if(auto raw = GetNameRaw(); !raw.empty()) + { + name = raw; + } + else + { + name = Self().GetProperty(Actor::Property::NAME); + } + + if(controlImpl.mAccessibilityTranslationDomainSet) + { + return GetLocaleText(name, controlImpl.mAccessibilityTranslationDomain.c_str()); + } + + return GetLocaleText(name); +} + +std::string ControlAccessible::GetNameRaw() const +{ + return {}; +} + +std::string ControlAccessible::GetDescription() const +{ + auto control = Dali::Toolkit::Control::DownCast(Self()); + + Internal::Control& internalControl = Toolkit::Internal::GetImplementation(control); + Internal::Control::Impl& controlImpl = Internal::Control::Impl::Get(internalControl); + std::string description; + + if(!controlImpl.mAccessibilityGetDescriptionSignal.Empty()) + { + controlImpl.mAccessibilityGetDescriptionSignal.Emit(description); + } + else if(controlImpl.mAccessibilityDescriptionSet) + { + description = controlImpl.mAccessibilityDescription; + } + else + { + description = GetDescriptionRaw(); + } + if(controlImpl.mAccessibilityTranslationDomainSet) + { + return GetLocaleText(description, controlImpl.mAccessibilityTranslationDomain.c_str()); + } + + return GetLocaleText(description); +} + +std::string ControlAccessible::GetDescriptionRaw() const +{ + return {}; +} + +Dali::Accessibility::Accessible* ControlAccessible::GetParent() +{ + return Dali::Accessibility::Accessible::Get(Self().GetParent()); +} + +size_t ControlAccessible::GetChildCount() const +{ + return Self().GetChildCount(); +} + +Dali::Accessibility::Accessible* ControlAccessible::GetChildAtIndex(size_t index) +{ + return Dali::Accessibility::Accessible::Get(Self().GetChildAt(static_cast(index))); +} + +size_t ControlAccessible::GetIndexInParent() +{ + auto self = Self(); + auto parent = self.GetParent(); + DALI_ASSERT_ALWAYS(parent && "can't call GetIndexInParent on object without parent"); + + auto count = parent.GetChildCount(); + for(auto i = 0u; i < count; ++i) + { + auto child = parent.GetChildAt(i); + if(child == self) + { + return i; + } + } + DALI_ASSERT_ALWAYS(false && "object isn't child of it's parent"); + return static_cast(-1); +} + +Dali::Accessibility::Role ControlAccessible::GetRole() const +{ + return Self().GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_ROLE); +} + +std::string ControlAccessible::GetLocalizedRoleName() const +{ + return GetLocaleText(GetRoleName()); +} + +bool ControlAccessible::IsShowing() +{ + Dali::Actor self = Self(); + if(!self.GetProperty(Actor::Property::VISIBLE) || self.GetProperty(Actor::Property::WORLD_COLOR).a == 0 || self.GetProperty(Dali::DevelActor::Property::CULLED)) + { + return false; + } + + auto* child = this; + auto* parent = dynamic_cast(child->GetParent()); + if(!parent) + { + return true; + } + + auto childExtent = child->GetExtents(Dali::Accessibility::CoordinateType::WINDOW); + while(parent) + { + auto control = Dali::Toolkit::Control::DownCast(parent->Self()); + if(!control.GetProperty(Actor::Property::VISIBLE)) + { + return false; + } + auto clipMode = control.GetProperty(Actor::Property::CLIPPING_MODE).Get(); + auto parentExtent = parent->GetExtents(Dali::Accessibility::CoordinateType::WINDOW); + if ((clipMode != ClippingMode::DISABLED) && !parentExtent.Intersects(childExtent)) + { + return false; + } + parent = dynamic_cast(parent->GetParent()); + } + + return true; +} + +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); + + 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::Accessibility::States ControlAccessible::GetStates() +{ + return CalculateStates(); +} + +Dali::Accessibility::Attributes ControlAccessible::GetAttributes() const +{ + std::unordered_map attributeMap; + auto control = Dali::Toolkit::Control::DownCast(Self()); + auto attribute = control.GetProperty(Dali::Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES); + auto map = attribute.GetMap(); + + if(map) + { + auto mapSize = map->Count(); + + for(unsigned int i = 0; i < mapSize; i++) + { + auto mapKey = map->GetKeyAt(i); + if(mapKey.type == Dali::Property::Key::STRING) + { + std::string mapValue; + if(map->GetValue(i).Get(mapValue)) + { + attributeMap.emplace(std::move(mapKey.stringKey), std::move(mapValue)); + } + } + } + } + + return attributeMap; +} + +Dali::Accessibility::ComponentLayer ControlAccessible::GetLayer() const +{ + return Dali::Accessibility::ComponentLayer::WINDOW; +} + +Dali::Rect<> ControlAccessible::GetExtents(Dali::Accessibility::CoordinateType type) const +{ + Dali::Actor self = Self(); + + Vector2 screenPosition = self.GetProperty(Dali::DevelActor::Property::SCREEN_POSITION).Get(); + auto size = self.GetCurrentProperty(Actor::Property::SIZE) * self.GetCurrentProperty(Actor::Property::WORLD_SCALE); + bool positionUsesAnchorPoint = self.GetProperty(Dali::DevelActor::Property::POSITION_USES_ANCHOR_POINT).Get(); + Vector3 anchorPointOffSet = size * (positionUsesAnchorPoint ? self.GetCurrentProperty(Actor::Property::ANCHOR_POINT) : AnchorPoint::TOP_LEFT); + Vector2 position = Vector2((screenPosition.x - anchorPointOffSet.x), (screenPosition.y - anchorPointOffSet.y)); + + if(type == Dali::Accessibility::CoordinateType::WINDOW) + { + return {position.x, position.y, size.x, size.y}; + } + else // Dali::Accessibility::CoordinateType::SCREEN + { + auto window = Dali::DevelWindow::Get(self); + auto windowPosition = window.GetPosition(); + return {position.x + windowPosition.GetX(), position.y + windowPosition.GetY(), size.x, size.y}; + } +} + +int16_t ControlAccessible::GetMdiZOrder() const +{ + return 0; +} + +double ControlAccessible::GetAlpha() const +{ + return 0; +} + +bool ControlAccessible::GrabFocus() +{ + return Toolkit::KeyboardFocusManager::Get().SetCurrentFocusActor(Self()); +} + +void ControlAccessible::ScrollToSelf() +{ + auto* child = this; + auto* parent = dynamic_cast(child->GetParent()); + + while (parent) + { + if (parent->IsScrollable()) + { + parent->ScrollToChild(child->Self()); + } + + parent = dynamic_cast(parent->GetParent()); + } +} + +void ControlAccessible::RegisterPositionPropertyNotification() +{ + auto control = Dali::Toolkit::Control::DownCast(Self()); + Internal::Control& internalControl = Toolkit::Internal::GetImplementation(control); + Internal::Control::Impl& controlImpl = Internal::Control::Impl::Get(internalControl); + controlImpl.RegisterAccessibilityPositionPropertyNotification(); +} + +void ControlAccessible::UnregisterPositionPropertyNotification() +{ + auto control = Dali::Toolkit::Control::DownCast(Self()); + Internal::Control& internalControl = Toolkit::Internal::GetImplementation(control); + Internal::Control::Impl& controlImpl = Internal::Control::Impl::Get(internalControl); + controlImpl.UnregisterAccessibilityPositionPropertyNotification(); +} + +bool ControlAccessible::GrabHighlight() +{ + Dali::Actor self = Self(); + auto oldHighlightedActor = GetCurrentlyHighlightedActor(); + + if(!Dali::Accessibility::IsUp()) + { + return false; + } + + if(self == oldHighlightedActor) + { + return true; + } + + // Clear the old highlight. + if(oldHighlightedActor) + { + auto oldHighlightObject = dynamic_cast(Internal::Control::Impl::GetAccessibilityObject(oldHighlightedActor)); + if(oldHighlightObject) + { + oldHighlightObject->ClearHighlight(); + } + } + + auto highlight = GetHighlightActor(); + if(!highlight) + { + highlight = CreateHighlightIndicatorActor(); + SetHighlightActor(highlight); + } + + highlight.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT); + highlight.SetProperty(Actor::Property::POSITION_Z, 1.0f); + highlight.SetProperty(Actor::Property::POSITION, Vector2(0.0f, 0.0f)); + + // Need to set resize policy again, to update SIZE property which is set by + // NUIViewAccessible. The highlight could move from NUIViewAccessible to + // ControlAccessible. In this case, highlight has incorrect size. + highlight.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS); + + // Remember the highlight actor, so that when the default is changed with + // SetHighlightActor(), the currently displayed highlight can still be cleared. + mCurrentHighlightActor = highlight; + ScrollToSelf(); + self.Add(highlight); + SetCurrentlyHighlightedActor(self); + EmitHighlighted(true); + RegisterPositionPropertyNotification(); + + return true; +} + +bool ControlAccessible::ClearHighlight() +{ + Dali::Actor self = Self(); + + if(!Dali::Accessibility::IsUp()) + { + return false; + } + + if(GetCurrentlyHighlightedActor() == self) + { + UnregisterPositionPropertyNotification(); + self.Remove(mCurrentHighlightActor.GetHandle()); + mCurrentHighlightActor = {}; + SetCurrentlyHighlightedActor({}); + EmitHighlighted(false); + return true; + } + return false; +} + +std::string ControlAccessible::GetActionName(size_t index) const +{ + if(index >= GetActionCount()) + { + return {}; + } + + Dali::TypeInfo type; + Self().GetTypeInfo(type); + DALI_ASSERT_ALWAYS(type && "no TypeInfo object"); + return type.GetActionName(index); +} + +std::string ControlAccessible::GetLocalizedActionName(size_t index) const +{ + return GetLocaleText(GetActionName(index)); +} + +std::string ControlAccessible::GetActionDescription(size_t index) const +{ + return {}; +} + +size_t ControlAccessible::GetActionCount() const +{ + Dali::TypeInfo type; + Self().GetTypeInfo(type); + DALI_ASSERT_ALWAYS(type && "no TypeInfo object"); + return type.GetActionCount(); +} + +std::string ControlAccessible::GetActionKeyBinding(size_t index) const +{ + return {}; +} + +bool ControlAccessible::DoAction(size_t index) +{ + std::string actionName = GetActionName(index); + return Self().DoAction(actionName, {}); +} + +bool ControlAccessible::DoAction(const std::string& name) +{ + return Self().DoAction(name, {}); +} + +bool ControlAccessible::DoGesture(const Dali::Accessibility::GestureInfo& gestureInfo) +{ + auto control = Dali::Toolkit::Control::DownCast(Self()); + + Internal::Control& internalControl = Toolkit::Internal::GetImplementation(control); + Internal::Control::Impl& controlImpl = Internal::Control::Impl::Get(internalControl); + + if(!controlImpl.mAccessibilityDoGestureSignal.Empty()) + { + auto ret = std::make_pair(gestureInfo, false); + controlImpl.mAccessibilityDoGestureSignal.Emit(ret); + return ret.second; + } + + return false; +} + +std::vector ControlAccessible::GetRelationSet() +{ + auto control = Dali::Toolkit::Control::DownCast(Self()); + + Internal::Control& internalControl = Toolkit::Internal::GetImplementation(control); + Internal::Control::Impl& controlImpl = Internal::Control::Impl::Get(internalControl); + + std::vector ret; + + for(auto& relation : controlImpl.mAccessibilityRelations) + { + auto& targets = relation.second; + + ret.emplace_back(Accessibility::Relation{relation.first, {}}); + + // Map every Accessible* to its Address + std::transform(targets.begin(), targets.end(), std::back_inserter(ret.back().targets), [](auto* x) { + return x->GetAddress(); + }); + } + + return ret; +} + +Dali::Actor ControlAccessible::GetInternalActor() +{ + return Dali::Actor{}; +} + +bool ControlAccessible::ScrollToChild(Actor child) +{ + return false; +} + +Dali::Property::Index ControlAccessible::GetNamePropertyIndex() +{ + return Actor::Property::NAME; +} + +Dali::Property::Index ControlAccessible::GetDescriptionPropertyIndex() +{ + return Dali::Property::INVALID_INDEX; +} + +void ControlAccessible::SetLastPosition(Vector2 position) +{ + mLastPosition = position; +} + +Vector2 ControlAccessible::GetLastPosition() const +{ + return mLastPosition; +} + +} // namespace Dali::Toolkit::DevelControl diff --git a/dali-toolkit/devel-api/controls/control-accessible.h b/dali-toolkit/devel-api/controls/control-accessible.h new file mode 100644 index 0000000000..5e576fd86b --- /dev/null +++ b/dali-toolkit/devel-api/controls/control-accessible.h @@ -0,0 +1,275 @@ +#ifndef DALI_TOOLKIT_CONTROL_ACCESSIBLE_H +#define DALI_TOOLKIT_CONTROL_ACCESSIBLE_H + +/* + * Copyright (c) 2021 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// EXTERNAL INCLUDES +#include +#include +#include +#include +#include +#include +#include + +// INTERNAL INCLUDES +#include + +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) + * 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 + * @see Dali::Accessibility::Action + * @see Dali::Accessibility::Value + * @see Dali::Accessibility::Text + * @see Dali::Accessibility::EditableText + */ +struct DALI_TOOLKIT_API ControlAccessible : public virtual Dali::Accessibility::Accessible, + public virtual Dali::Accessibility::Component, + public virtual Dali::Accessibility::Collection, + public virtual Dali::Accessibility::Action +{ +protected: + Vector2 mLastPosition{0.0f, 0.0f}; + Dali::WeakHandle mSelf; + Dali::WeakHandle mCurrentHighlightActor; + bool mIsModal = false; + bool mIsRoot = false; + + Dali::Actor Self() const + { + auto handle = mSelf.GetHandle(); + + // Control::Impl holds a std::unique_ptr to the Accessible object, + // so that one does not outlive the other. + DALI_ASSERT_ALWAYS(handle); + + return handle; + } + + void ScrollToSelf(); + + /** + * @brief Register property notification to check highlighted object position + */ + void RegisterPositionPropertyNotification(); + + /** + * @brief Remove property notification added by RegisterPropertyNotification + */ + void UnregisterPositionPropertyNotification(); + + /** + * @brief Check if the actor is showing + * @return True if the actor is showing + */ + bool IsShowing(); + +public: + ControlAccessible(Dali::Actor self, Dali::Accessibility::Role role, bool modal = false); + + /** + * @copydoc Dali::Accessibility::Accessible::GetName() + */ + std::string GetName() const override; + + /** + * @brief Returns the actor's name in the absence of ACCESSIBILITY_NAME property + */ + virtual std::string GetNameRaw() const; + + /** + * @copydoc Dali::Accessibility::Accessible::GetDescription() + */ + std::string GetDescription() const override; + + /** + * @brief Returns the actor's description in the absence of ACCESSIBILITY_DESCRIPTION property + */ + virtual std::string GetDescriptionRaw() const; + + /** + * @copydoc Dali::Accessibility::Accessible::GetParent() + */ + Dali::Accessibility::Accessible* GetParent() override; + + /** + * @copydoc Dali::Accessibility::Accessible::GetChildCount() + */ + size_t GetChildCount() const override; + + /** + * @copydoc Dali::Accessibility::Accessible::GetChildAtIndex() + */ + Dali::Accessibility::Accessible* GetChildAtIndex(size_t index) override; + + /** + * @copydoc Dali::Accessibility::Accessible::GetIndexInParent() + */ + size_t GetIndexInParent() override; + + /** + * @copydoc Dali::Accessibility::Accessible::GetRole() + */ + Dali::Accessibility::Role GetRole() const override; + + /** + * @copydoc Dali::Accessibility::Accessible::GetLocalizedRoleName() + */ + std::string GetLocalizedRoleName() const override; + + /** + * @copydoc Dali::Accessibility::Accessible::GetStates() + */ + Dali::Accessibility::States GetStates() override; + + /** + * @copydoc Dali::Accessibility::Accessible::GetAttributes() + */ + Dali::Accessibility::Attributes GetAttributes() const override; + + /** + * @copydoc Dali::Accessibility::Component::GetExtents() + */ + Dali::Rect<> GetExtents(Accessibility::CoordinateType type) const override; + + /** + * @copydoc Dali::Accessibility::Component::GetLayer() + */ + Dali::Accessibility::ComponentLayer GetLayer() const override; + + /** + * @copydoc Dali::Accessibility::Component::GetMdiZOrder() + */ + int16_t GetMdiZOrder() const override; + + /** + * @copydoc Dali::Accessibility::Component::GrabFocus() + */ + bool GrabFocus() override; + + /** + * @copydoc Dali::Accessibility::Component::GetAlpha() + */ + double GetAlpha() const override; + + /** + * @copydoc Dali::Accessibility::Component::GrabHighlight() + */ + bool GrabHighlight() override; + + /** + * @copydoc Dali::Accessibility::Component::ClearHighlight() + */ + bool ClearHighlight() override; + + /** + * @copydoc Dali::Accessibility::Action::GetActionName() + */ + std::string GetActionName(size_t index) const override; + + /** + * @copydoc Dali::Accessibility::Action::GetLocalizedActionName() + */ + std::string GetLocalizedActionName(size_t index) const override; + + /** + * @copydoc Dali::Accessibility::Action::GetActionDescription() + */ + std::string GetActionDescription(size_t index) const override; + + /** + * @copydoc Dali::Accessibility::Action::GetActionCount() + */ + size_t GetActionCount() const override; + + /** + * @copydoc Dali::Accessibility::Action::GetActionKeyBinding() + */ + std::string GetActionKeyBinding(size_t index) const override; + + /** + * @copydoc Dali::Accessibility::Action::DoAction(std::size_t) + */ + bool DoAction(size_t index) override; + + /** + * @copydoc Dali::Accessibility::Action::DoAction(const std::string&) + */ + bool DoAction(const std::string& name) override; + + /** + * @copydoc Dali::Accessibility::Accessible::DoGesture() + */ + bool DoGesture(const Dali::Accessibility::GestureInfo& gestureInfo) override; + + /** + * @copydoc Dali::Accessibility::Accessible::GetRelationSet() + */ + std::vector GetRelationSet() override; + + /** + * @copydoc Dali::Accessibility::Accessible::GetInternalActor() + */ + Dali::Actor GetInternalActor() override; + + /** + * @copydoc Dali::Accessibility::Accessible::GetStates() + */ + virtual Dali::Accessibility::States CalculateStates(); + + /** + * @brief Makes sure that a given child (descendant) of this container (e.g. ItemView) is visible + * @return false if scrolling is not supported or child is already visible + */ + virtual bool ScrollToChild(Actor child); + + /** + * @brief Returns the index of the property that represents this actor's name + */ + virtual Dali::Property::Index GetNamePropertyIndex(); + + /** + * @brief Returns the index of the property that represents this actor's description + */ + virtual Dali::Property::Index GetDescriptionPropertyIndex(); + + /** + * @brief Sets last object position + * @param[in] position Last object position + */ + void SetLastPosition(Vector2 position); + + /** + * @brief Gets last object position + * @return The Last object position + */ + Vector2 GetLastPosition() const; +}; + +} // namespace Dali::Toolkit::DevelControl + +#endif // DALI_TOOLKIT_CONTROL_ACCESSIBLE_H diff --git a/dali-toolkit/devel-api/controls/control-devel.h b/dali-toolkit/devel-api/controls/control-devel.h index 00ff6a0e3a..5d276cbbb3 100644 --- a/dali-toolkit/devel-api/controls/control-devel.h +++ b/dali-toolkit/devel-api/controls/control-devel.h @@ -24,7 +24,7 @@ #include // INTERNAL INCLUDES -#include +#include #include #include @@ -563,7 +563,7 @@ DALI_TOOLKIT_API void NotifyAccessibilityStateChange(Dali::Actor control, Dali:: * @code * SetAccessibilityConstructor( []( Dali::Actor actor ) { return std::unique_ptr< Dali::Accessibility::Accessible >( - new AccessibleImpl( actor, Dali::Accessibility::Role::DIALOG, true ) ); + new ControlAccessible( actor, Dali::Accessibility::Role::DIALOG, true ) ); } ); * @endcode * diff --git a/dali-toolkit/devel-api/file.list b/dali-toolkit/devel-api/file.list index 3a40bc9634..cc5abef21c 100755 --- a/dali-toolkit/devel-api/file.list +++ b/dali-toolkit/devel-api/file.list @@ -9,8 +9,8 @@ SET( devel_api_src_files ${devel_api_src_dir}/builder/builder.cpp ${devel_api_src_dir}/builder/json-parser.cpp ${devel_api_src_dir}/builder/tree-node.cpp - ${devel_api_src_dir}/controls/accessible-impl.cpp ${devel_api_src_dir}/controls/canvas-view/canvas-view.cpp + ${devel_api_src_dir}/controls/control-accessible.cpp ${devel_api_src_dir}/controls/control-devel.cpp ${devel_api_src_dir}/controls/control-wrapper.cpp ${devel_api_src_dir}/controls/control-wrapper-impl.cpp @@ -86,8 +86,8 @@ SET( devel_api_accessibility-manager_header_files ) SET( devel_api_controls_header_files - ${devel_api_src_dir}/controls/accessible-impl.h ${devel_api_src_dir}/controls/canvas-view/canvas-view.h + ${devel_api_src_dir}/controls/control-accessible.h ${devel_api_src_dir}/controls/control-depth-index-ranges.h ${devel_api_src_dir}/controls/control-devel.h ${devel_api_src_dir}/controls/control-wrapper.h diff --git a/dali-toolkit/internal/controls/alignment/alignment-impl.cpp b/dali-toolkit/internal/controls/alignment/alignment-impl.cpp index 1c2271c4bc..d9b3b4dbcc 100644 --- a/dali-toolkit/internal/controls/alignment/alignment-impl.cpp +++ b/dali-toolkit/internal/controls/alignment/alignment-impl.cpp @@ -189,7 +189,7 @@ void Alignment::OnInitialize() { DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { return std::unique_ptr( - new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::FILLER)); + new DevelControl::ControlAccessible(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 55259db2ce..5ed17c8d64 100644 --- a/dali-toolkit/internal/controls/bloom-view/bloom-view-impl.cpp +++ b/dali-toolkit/internal/controls/bloom-view/bloom-view-impl.cpp @@ -219,7 +219,7 @@ void BloomView::OnInitialize() DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { return std::unique_ptr( - new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::ANIMATION)); + new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::ANIMATION)); }); } diff --git a/dali-toolkit/internal/controls/buttons/button-impl.cpp b/dali-toolkit/internal/controls/buttons/button-impl.cpp index 7ff5875b77..7fb1ab8294 100644 --- a/dali-toolkit/internal/controls/buttons/button-impl.cpp +++ b/dali-toolkit/internal/controls/buttons/button-impl.cpp @@ -1303,7 +1303,7 @@ Padding Button::GetForegroundPadding() return mForegroundPadding; } -std::string Button::AccessibleImpl::GetNameRaw() +std::string Button::AccessibleImpl::GetNameRaw() const { std::string labelText; auto slf = Toolkit::Button::DownCast(Self()); @@ -1335,7 +1335,7 @@ Property::Index Button::AccessibleImpl::GetNamePropertyIndex() Dali::Accessibility::States Button::AccessibleImpl::CalculateStates() { - auto tmp = DevelControl::AccessibleImpl::CalculateStates(); + auto tmp = DevelControl::ControlAccessible::CalculateStates(); tmp[Dali::Accessibility::State::SELECTABLE] = true; auto slf = Toolkit::Button::DownCast(Self()); tmp[Dali::Accessibility::State::ENABLED] = !slf.GetProperty(Toolkit::Button::Property::DISABLED); diff --git a/dali-toolkit/internal/controls/buttons/button-impl.h b/dali-toolkit/internal/controls/buttons/button-impl.h index ced51fde93..3e36873403 100644 --- a/dali-toolkit/internal/controls/buttons/button-impl.h +++ b/dali-toolkit/internal/controls/buttons/button-impl.h @@ -535,12 +535,12 @@ private: bool mClickActionPerforming; ///< Used to manage signal emissions during action protected: - struct AccessibleImpl : public DevelControl::AccessibleImpl + struct AccessibleImpl : public DevelControl::ControlAccessible { - using DevelControl::AccessibleImpl::AccessibleImpl; + using DevelControl::ControlAccessible::ControlAccessible; Dali::Accessibility::States CalculateStates() override; - std::string GetNameRaw() override; + std::string GetNameRaw() const override; Property::Index GetNamePropertyIndex() override; }; }; diff --git a/dali-toolkit/internal/controls/buttons/toggle-button-impl.cpp b/dali-toolkit/internal/controls/buttons/toggle-button-impl.cpp index 1697b20e4f..3010e694b9 100644 --- a/dali-toolkit/internal/controls/buttons/toggle-button-impl.cpp +++ b/dali-toolkit/internal/controls/buttons/toggle-button-impl.cpp @@ -383,7 +383,7 @@ Dali::Accessibility::States ToggleButton::AccessibleImpl::CalculateStates() return states; } -std::string ToggleButton::AccessibleImpl::GetDescriptionRaw() +std::string ToggleButton::AccessibleImpl::GetDescriptionRaw() const { auto button = Toolkit::ToggleButton::DownCast(Self()); auto index = button.GetProperty(Toolkit::ToggleButton::Property::CURRENT_STATE_INDEX); diff --git a/dali-toolkit/internal/controls/buttons/toggle-button-impl.h b/dali-toolkit/internal/controls/buttons/toggle-button-impl.h index 322285b1dc..6629d404ac 100644 --- a/dali-toolkit/internal/controls/buttons/toggle-button-impl.h +++ b/dali-toolkit/internal/controls/buttons/toggle-button-impl.h @@ -158,7 +158,7 @@ protected: using Button::AccessibleImpl::AccessibleImpl; Dali::Accessibility::States CalculateStates() override; - std::string GetDescriptionRaw() override; + std::string GetDescriptionRaw() const override; Property::Index GetDescriptionPropertyIndex() override; }; void OnStateChange(State newState) 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 e8fefbf474..6ec6fc996e 100644 --- a/dali-toolkit/internal/controls/canvas-view/canvas-view-impl.cpp +++ b/dali-toolkit/internal/controls/canvas-view/canvas-view-impl.cpp @@ -99,7 +99,7 @@ void CanvasView::OnInitialize() DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { return std::unique_ptr( - new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::IMAGE)); + new DevelControl::ControlAccessible(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 4aecc292a8..a476ecae45 100644 --- a/dali-toolkit/internal/controls/control/control-data-impl.cpp +++ b/dali-toolkit/internal/controls/control/control-data-impl.cpp @@ -411,11 +411,11 @@ void SetVisualsOffScene(const RegisteredVisualContainer& container, Actor parent } } -Dali::Rect<> GetShowingGeometry(Dali::Rect<> rect, Dali::Toolkit::DevelControl::AccessibleImpl* accessibleImpl) +Dali::Rect<> GetShowingGeometry(Dali::Rect<> rect, Dali::Toolkit::DevelControl::ControlAccessible* accessible) { Rect<> parentRect; Vector2 currentPosition; - auto parent = dynamic_cast(accessibleImpl->GetParent()); + auto parent = dynamic_cast(accessible->GetParent()); while(parent) { @@ -434,7 +434,7 @@ Dali::Rect<> GetShowingGeometry(Dali::Rect<> rect, Dali::Toolkit::DevelControl:: return rect; } - parent = dynamic_cast(parent->GetParent()); + parent = dynamic_cast(parent->GetParent()); } return rect; @@ -513,7 +513,7 @@ Control::Impl::Impl(Control& controlImpl) }); mAccessibilityConstructor = [](Dali::Actor actor) -> std::unique_ptr { - return std::unique_ptr(new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::UNKNOWN)); + return std::unique_ptr(new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::UNKNOWN)); }; } @@ -551,16 +551,16 @@ const Control::Impl& Control::Impl::Get(const Internal::Control& internalControl void Control::Impl::CheckHighlightedObjectGeometry() { - auto accessibleImpl = dynamic_cast(mAccessibilityObject.get()); - if(!accessibleImpl) + auto accessible = dynamic_cast(mAccessibilityObject.get()); + if(!accessible) { - DALI_LOG_ERROR("accessibleImpl is not a pointer to a DevelControl::AccessibleImpl type"); + DALI_LOG_ERROR("accessible is not a pointer to a DevelControl::ControlAccessible type"); return; } - auto lastPosition = accessibleImpl->GetLastPosition(); - auto accessibleRect = accessibleImpl->GetExtents(Dali::Accessibility::CoordinateType::WINDOW); - auto rect = GetShowingGeometry(accessibleRect, accessibleImpl); + auto lastPosition = accessible->GetLastPosition(); + auto accessibleRect = accessible->GetExtents(Dali::Accessibility::CoordinateType::WINDOW); + auto rect = GetShowingGeometry(accessibleRect, accessible); switch(mAccessibilityLastScreenRelativeMoveType) { @@ -608,7 +608,7 @@ void Control::Impl::CheckHighlightedObjectGeometry() } } - accessibleImpl->SetLastPosition(Vector2(accessibleRect.x, accessibleRect.y)); + accessible->SetLastPosition(Vector2(accessibleRect.x, accessibleRect.y)); } void Control::Impl::RegisterAccessibilityPositionPropertyNotification() diff --git a/dali-toolkit/internal/controls/control/control-data-impl.h b/dali-toolkit/internal/controls/control/control-data-impl.h index c81be41145..e616e52b32 100644 --- a/dali-toolkit/internal/controls/control/control-data-impl.h +++ b/dali-toolkit/internal/controls/control/control-data-impl.h @@ -71,7 +71,7 @@ typedef Dali::OwnerContainer RegisteredVisualContainer; */ class Control::Impl : public ConnectionTracker, public Visual::EventObserver { - friend class Toolkit::DevelControl::AccessibleImpl; + friend class Toolkit::DevelControl::ControlAccessible; public: /** 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 88fa83f344..0f3e141cf4 100644 --- a/dali-toolkit/internal/controls/effects-view/effects-view-impl.cpp +++ b/dali-toolkit/internal/controls/effects-view/effects-view-impl.cpp @@ -236,7 +236,7 @@ void EffectsView::OnInitialize() DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) { return std::unique_ptr( - new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::FILLER)); + new DevelControl::ControlAccessible(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 4a3b065e3e..964afe214f 100644 --- a/dali-toolkit/internal/controls/flex-container/flex-container-impl.cpp +++ b/dali-toolkit/internal/controls/flex-container/flex-container-impl.cpp @@ -837,7 +837,7 @@ void FlexContainer::OnInitialize() DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) { return std::unique_ptr( - new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::FILLER)); + new DevelControl::ControlAccessible(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 29d36b1e9b..64d5ecb516 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 @@ -297,7 +297,7 @@ void GaussianBlurView::OnInitialize() DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { return std::unique_ptr( - new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::FILLER)); + new DevelControl::ControlAccessible(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 1a653a1347..c299886554 100644 --- a/dali-toolkit/internal/controls/image-view/image-view-impl.cpp +++ b/dali-toolkit/internal/controls/image-view/image-view-impl.cpp @@ -96,7 +96,7 @@ void ImageView::OnInitialize() DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { return std::unique_ptr( - new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::IMAGE)); + new DevelControl::ControlAccessible(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 e37a53430e..c4e8ce2bcd 100644 --- a/dali-toolkit/internal/controls/magnifier/magnifier-impl.cpp +++ b/dali-toolkit/internal/controls/magnifier/magnifier-impl.cpp @@ -220,7 +220,7 @@ void Magnifier::Initialize() DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) { return std::unique_ptr( - new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::FILLER)); + new DevelControl::ControlAccessible(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 f9bf49110f..b9ee8734f9 100644 --- a/dali-toolkit/internal/controls/model3d-view/model3d-view-impl.cpp +++ b/dali-toolkit/internal/controls/model3d-view/model3d-view-impl.cpp @@ -282,7 +282,7 @@ void Model3dView::OnInitialize() DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { return std::unique_ptr( - new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::IMAGE)); + new DevelControl::ControlAccessible(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 3dd690938e..9eab2906be 100644 --- a/dali-toolkit/internal/controls/navigation-view/navigation-view-impl.cpp +++ b/dali-toolkit/internal/controls/navigation-view/navigation-view-impl.cpp @@ -72,7 +72,7 @@ void NavigationView::OnInitialize() { DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { return std::unique_ptr( - new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::FILLER)); + new DevelControl::ControlAccessible(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 d74574ce2e..69369de7b8 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 @@ -416,7 +416,7 @@ void PageTurnView::OnInitialize() DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { return std::unique_ptr( - new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::PAGE_TAB_LIST)); + new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::PAGE_TAB_LIST)); }); } diff --git a/dali-toolkit/internal/controls/popup/popup-impl.cpp b/dali-toolkit/internal/controls/popup/popup-impl.cpp index 9abcfe0118..5331e74f74 100644 --- a/dali-toolkit/internal/controls/popup/popup-impl.cpp +++ b/dali-toolkit/internal/controls/popup/popup-impl.cpp @@ -1994,7 +1994,7 @@ void Popup::SetupTouch() } } -std::string Popup::AccessibleImpl::GetNameRaw() +std::string Popup::AccessibleImpl::GetNameRaw() const { auto popup = Toolkit::Popup::DownCast(Self()); std::string title; @@ -2018,7 +2018,7 @@ std::string Popup::AccessibleImpl::GetNameRaw() Dali::Accessibility::States Popup::AccessibleImpl::CalculateStates() { - auto states = DevelControl::AccessibleImpl::CalculateStates(); + auto states = DevelControl::ControlAccessible::CalculateStates(); auto popup = Toolkit::Popup::DownCast(Self()); auto displayState = popup.GetProperty(Toolkit::Popup::Property::DISPLAY_STATE); diff --git a/dali-toolkit/internal/controls/popup/popup-impl.h b/dali-toolkit/internal/controls/popup/popup-impl.h index 630caa8763..50a2fd6f1b 100644 --- a/dali-toolkit/internal/controls/popup/popup-impl.h +++ b/dali-toolkit/internal/controls/popup/popup-impl.h @@ -241,11 +241,11 @@ public: static Property::Value GetProperty(BaseObject* object, Property::Index propertyIndex); protected: - struct AccessibleImpl : public DevelControl::AccessibleImpl + struct AccessibleImpl : public DevelControl::ControlAccessible { - using DevelControl::AccessibleImpl::AccessibleImpl; + using DevelControl::ControlAccessible::ControlAccessible; - std::string GetNameRaw() override; + std::string GetNameRaw() const override; Dali::Accessibility::States CalculateStates() override; }; 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 100630734b..1a243a25f8 100644 --- a/dali-toolkit/internal/controls/progress-bar/progress-bar-impl.cpp +++ b/dali-toolkit/internal/controls/progress-bar/progress-bar-impl.cpp @@ -676,18 +676,18 @@ void ProgressBar::OnSceneConnection(int depth) } } -double ProgressBar::AccessibleImpl::GetMinimum() +double ProgressBar::AccessibleImpl::GetMinimum() const { return DEFAULT_LOWER_BOUND; } -double ProgressBar::AccessibleImpl::GetCurrent() +double ProgressBar::AccessibleImpl::GetCurrent() const { auto self = Toolkit::ProgressBar::DownCast(Self()); return self.GetProperty(Toolkit::ProgressBar::Property::PROGRESS_VALUE).Get(); } -double ProgressBar::AccessibleImpl::GetMaximum() +double ProgressBar::AccessibleImpl::GetMaximum() const { return DEFAULT_UPPER_BOUND; } @@ -704,7 +704,7 @@ bool ProgressBar::AccessibleImpl::SetCurrent(double current) return true; } -double ProgressBar::AccessibleImpl::GetMinimumIncrement() +double ProgressBar::AccessibleImpl::GetMinimumIncrement() const { return 0.0; } 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 c6729bb046..96540d2e06 100644 --- a/dali-toolkit/internal/controls/progress-bar/progress-bar-impl.h +++ b/dali-toolkit/internal/controls/progress-bar/progress-bar-impl.h @@ -265,15 +265,16 @@ private: Property::Map mSecondaryProgressVisualMap; ///< To backup visual properties when switching determinate/indeterminate. protected: - struct AccessibleImpl : public DevelControl::AccessibleImpl, + struct AccessibleImpl : public DevelControl::ControlAccessible, public virtual Dali::Accessibility::Value { - using DevelControl::AccessibleImpl::AccessibleImpl; - double GetMinimum() override; - double GetCurrent() override; - double GetMaximum() override; + using DevelControl::ControlAccessible::ControlAccessible; + + double GetMinimum() const override; + double GetCurrent() const override; + double GetMaximum() const override; bool SetCurrent(double) override; - double GetMinimumIncrement() override; + double GetMinimumIncrement() const override; }; }; 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 1da42973a0..1fef71b504 100644 --- a/dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.cpp +++ b/dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.cpp @@ -861,21 +861,21 @@ Toolkit::ScrollBar ScrollBar::New(Toolkit::ScrollBar::Direction direction) return handle; } -double ScrollBar::AccessibleImpl::GetMinimum() +double ScrollBar::AccessibleImpl::GetMinimum() const { auto self = Toolkit::ScrollBar::DownCast(Self()); Handle scrollableHandle = GetImpl(self).mScrollableObject.GetHandle(); return scrollableHandle ? scrollableHandle.GetCurrentProperty(GetImpl(self).mPropertyMinScrollPosition) : 0.0f; } -double ScrollBar::AccessibleImpl::GetCurrent() +double ScrollBar::AccessibleImpl::GetCurrent() const { auto self = Toolkit::ScrollBar::DownCast(Self()); Handle scrollableHandle = GetImpl(self).mScrollableObject.GetHandle(); return scrollableHandle ? scrollableHandle.GetCurrentProperty(GetImpl(self).mPropertyScrollPosition) : 0.0f; } -double ScrollBar::AccessibleImpl::GetMaximum() +double ScrollBar::AccessibleImpl::GetMaximum() const { auto self = Toolkit::ScrollBar::DownCast(Self()); Handle scrollableHandle = GetImpl(self).mScrollableObject.GetHandle(); @@ -910,7 +910,7 @@ bool ScrollBar::AccessibleImpl::SetCurrent(double current) return true; } -double ScrollBar::AccessibleImpl::GetMinimumIncrement() +double ScrollBar::AccessibleImpl::GetMinimumIncrement() const { return 1.0; } 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 8c6ef2a20a..97a7daa5c3 100644 --- a/dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.h +++ b/dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.h @@ -314,15 +314,16 @@ private: bool mIndicatorFirstShow : 1; ///< True if the indicator has never been shown protected: - struct AccessibleImpl : public DevelControl::AccessibleImpl, + struct AccessibleImpl : public DevelControl::ControlAccessible, public virtual Dali::Accessibility::Value { - using DevelControl::AccessibleImpl::AccessibleImpl; - double GetMinimum() override; - double GetCurrent() override; - double GetMaximum() override; + using DevelControl::ControlAccessible::ControlAccessible; + + double GetMinimum() const override; + double GetCurrent() const override; + double GetMaximum() const override; bool SetCurrent(double) override; - double GetMinimumIncrement() override; + double GetMinimumIncrement() const override; }; }; diff --git a/dali-toolkit/internal/controls/scrollable/scrollable-impl.cpp b/dali-toolkit/internal/controls/scrollable/scrollable-impl.cpp index 609476a6ee..ea3240f2bb 100644 --- a/dali-toolkit/internal/controls/scrollable/scrollable-impl.cpp +++ b/dali-toolkit/internal/controls/scrollable/scrollable-impl.cpp @@ -92,7 +92,7 @@ Scrollable::~Scrollable() { } -bool Scrollable::AccessibleImpl::IsScrollable() +bool Scrollable::AccessibleImpl::IsScrollable() const { return true; } diff --git a/dali-toolkit/internal/controls/scrollable/scrollable-impl.h b/dali-toolkit/internal/controls/scrollable/scrollable-impl.h index 4240a1e46c..44d9a332f9 100644 --- a/dali-toolkit/internal/controls/scrollable/scrollable-impl.h +++ b/dali-toolkit/internal/controls/scrollable/scrollable-impl.h @@ -117,11 +117,11 @@ public: virtual void SetOvershootSize(const Vector2& size) = 0; protected: // From Control - struct AccessibleImpl : public DevelControl::AccessibleImpl + struct AccessibleImpl : public DevelControl::ControlAccessible { - using DevelControl::AccessibleImpl::AccessibleImpl; + using DevelControl::ControlAccessible::ControlAccessible; - bool IsScrollable() override; + bool IsScrollable() const override; }; /** 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 612a9a4773..1197a464a4 100644 --- a/dali-toolkit/internal/controls/shadow-view/shadow-view-impl.cpp +++ b/dali-toolkit/internal/controls/shadow-view/shadow-view-impl.cpp @@ -258,7 +258,7 @@ void ShadowView::OnInitialize() DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { return std::unique_ptr( - new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::FILLER)); + new DevelControl::ControlAccessible(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 8cac5edfbc..7e6370d984 100644 --- a/dali-toolkit/internal/controls/slider/slider-impl.cpp +++ b/dali-toolkit/internal/controls/slider/slider-impl.cpp @@ -1411,19 +1411,19 @@ Property::Value Slider::GetProperty(BaseObject* object, Property::Index property return value; } -double Slider::AccessibleImpl::GetMinimum() +double Slider::AccessibleImpl::GetMinimum() const { auto self = Toolkit::Slider::DownCast(Self()); return self.GetProperty(Toolkit::Slider::Property::LOWER_BOUND).Get(); } -double Slider::AccessibleImpl::GetCurrent() +double Slider::AccessibleImpl::GetCurrent() const { auto self = Toolkit::Slider::DownCast(Self()); return self.GetProperty(Toolkit::Slider::Property::VALUE).Get(); } -double Slider::AccessibleImpl::GetMaximum() +double Slider::AccessibleImpl::GetMaximum() const { auto self = Toolkit::Slider::DownCast(Self()); return self.GetProperty(Toolkit::Slider::Property::UPPER_BOUND).Get(); @@ -1477,7 +1477,7 @@ bool Slider::AccessibleImpl::SetCurrent(double current) return true; } -double Slider::AccessibleImpl::GetMinimumIncrement() +double Slider::AccessibleImpl::GetMinimumIncrement() const { auto self = Toolkit::Slider::DownCast(Self()); diff --git a/dali-toolkit/internal/controls/slider/slider-impl.h b/dali-toolkit/internal/controls/slider/slider-impl.h index 082f06653d..73859532cc 100644 --- a/dali-toolkit/internal/controls/slider/slider-impl.h +++ b/dali-toolkit/internal/controls/slider/slider-impl.h @@ -749,15 +749,16 @@ private: mSnapToMarks : 1; ///< Turn on or off snapping to marks protected: - struct AccessibleImpl : public DevelControl::AccessibleImpl, + struct AccessibleImpl : public DevelControl::ControlAccessible, public virtual Dali::Accessibility::Value { - using DevelControl::AccessibleImpl::AccessibleImpl; - double GetMinimum() override; - double GetCurrent() override; - double GetMaximum() override; + using DevelControl::ControlAccessible::ControlAccessible; + + double GetMinimum() const override; + double GetCurrent() const override; + double GetMaximum() const override; bool SetCurrent(double) override; - double GetMinimumIncrement() override; + double GetMinimumIncrement() const override; }; }; 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 6325e62940..fef8956b51 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 @@ -151,7 +151,7 @@ void SuperBlurView::OnInitialize() DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) { return std::unique_ptr( - new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::FILLER)); + new DevelControl::ControlAccessible(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 9aec5bac2f..24267756f7 100644 --- a/dali-toolkit/internal/controls/table-view/table-view-impl.cpp +++ b/dali-toolkit/internal/controls/table-view/table-view-impl.cpp @@ -1121,7 +1121,7 @@ void TableView::OnInitialize() DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) { return std::unique_ptr( - new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::TABLE)); + new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::TABLE)); }); } 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 6e595b1913..e26006d6fc 100644 --- a/dali-toolkit/internal/controls/text-controls/text-anchor-impl.h +++ b/dali-toolkit/internal/controls/text-controls/text-anchor-impl.h @@ -105,10 +105,10 @@ protected: /** * @brief This structure is to connect TextAnchor with Accessible functions. */ - struct AccessibleImpl : public DevelControl::AccessibleImpl, + struct AccessibleImpl : public DevelControl::ControlAccessible, public virtual Dali::Accessibility::Hyperlink { - using DevelControl::AccessibleImpl::AccessibleImpl; + using DevelControl::ControlAccessible::ControlAccessible; /** * @copydoc Dali::Accessibility::Hyperlink::GetEndIndex() */ 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 5e9e7d91a1..d35e92b20b 100644 --- a/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp @@ -1289,13 +1289,13 @@ TextEditor::~TextEditor() } } -std::string TextEditor::AccessibleImpl::GetName() +std::string TextEditor::AccessibleImpl::GetName() const { auto self = Toolkit::TextEditor::DownCast(Self()); return self.GetProperty(Toolkit::TextEditor::Property::TEXT).Get(); } -std::string TextEditor::AccessibleImpl::GetText(size_t startOffset, size_t endOffset) +std::string TextEditor::AccessibleImpl::GetText(size_t startOffset, size_t endOffset) const { if(endOffset <= startOffset) { @@ -1313,7 +1313,7 @@ std::string TextEditor::AccessibleImpl::GetText(size_t startOffset, size_t endOf return text.substr(startOffset, endOffset - startOffset); } -size_t TextEditor::AccessibleImpl::GetCharacterCount() +size_t TextEditor::AccessibleImpl::GetCharacterCount() const { auto self = Toolkit::TextEditor::DownCast(Self()); auto text = self.GetProperty(Toolkit::TextEditor::Property::TEXT).Get(); @@ -1321,7 +1321,7 @@ size_t TextEditor::AccessibleImpl::GetCharacterCount() return text.size(); } -size_t TextEditor::AccessibleImpl::GetCursorOffset() +size_t TextEditor::AccessibleImpl::GetCursorOffset() const { auto slf = Toolkit::TextEditor::DownCast(Self()); return Dali::Toolkit::GetImpl(slf).GetTextController()->GetCursorPosition(); @@ -1343,7 +1343,7 @@ bool TextEditor::AccessibleImpl::SetCursorOffset(size_t offset) return true; } -Dali::Accessibility::Range TextEditor::AccessibleImpl::GetTextAtOffset(size_t offset, Dali::Accessibility::TextBoundary boundary) +Dali::Accessibility::Range TextEditor::AccessibleImpl::GetTextAtOffset(size_t offset, Dali::Accessibility::TextBoundary boundary) const { auto self = Toolkit::TextEditor::DownCast(Self()); auto text = self.GetProperty(Toolkit::TextEditor::Property::TEXT).Get(); @@ -1434,7 +1434,7 @@ Dali::Accessibility::Range TextEditor::AccessibleImpl::GetTextAtOffset(size_t of return range; } -Dali::Accessibility::Range TextEditor::AccessibleImpl::GetRangeOfSelection(size_t selectionIndex) +Dali::Accessibility::Range TextEditor::AccessibleImpl::GetRangeOfSelection(size_t selectionIndex) const { // Since DALi supports only one selection indexes higher than 0 are ignored if(selectionIndex > 0) @@ -1526,12 +1526,12 @@ Dali::Accessibility::States TextEditor::AccessibleImpl::CalculateStates() { using namespace Dali::Accessibility; - auto states = DevelControl::AccessibleImpl::CalculateStates(); + auto states = DevelControl::ControlAccessible::CalculateStates(); states[State::EDITABLE] = true; states[State::FOCUSABLE] = true; Toolkit::Control focusControl = Toolkit::KeyInputFocusManager::Get().GetCurrentFocusControl(); - if(mSelf == focusControl) + if(Self() == focusControl) { states[State::FOCUSED] = true; } 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 50ecda5737..6ea1cc86f5 100644 --- a/dali-toolkit/internal/controls/text-controls/text-editor-impl.h +++ b/dali-toolkit/internal/controls/text-controls/text-editor-impl.h @@ -556,32 +556,31 @@ private: // Data /** * @brief This structure is to connect TextEditor with Accessible functions. */ - struct AccessibleImpl : public DevelControl::AccessibleImpl, - public virtual Dali::Accessibility::Text, + struct AccessibleImpl : public DevelControl::ControlAccessible, public virtual Dali::Accessibility::EditableText, public virtual Dali::Accessibility::Hypertext { - using DevelControl::AccessibleImpl::AccessibleImpl; + using DevelControl::ControlAccessible::ControlAccessible; /** * @copydoc Dali::Accessibility::Accessible::GetName() */ - std::string GetName() override; + std::string GetName() const override; /** * @copydoc Dali::Accessibility::Text::GetText() */ - std::string GetText(size_t startOffset, size_t endOffset) override; + std::string GetText(size_t startOffset, size_t endOffset) const override; /** * @copydoc Dali::Accessibility::Text::GetCharacterCount() */ - size_t GetCharacterCount() override; + size_t GetCharacterCount() const override; /** * @copydoc Dali::Accessibility::Text::GetCursorOffset() */ - size_t GetCursorOffset() override; + size_t GetCursorOffset() const override; /** * @copydoc Dali::Accessibility::Text::SetCursorOffset() @@ -591,12 +590,12 @@ private: // Data /** * @copydoc Dali::Accessibility::Text::GetTextAtOffset() */ - Accessibility::Range GetTextAtOffset(size_t offset, Accessibility::TextBoundary boundary) override; + Accessibility::Range GetTextAtOffset(size_t offset, Accessibility::TextBoundary boundary) const override; /** * @copydoc Dali::Accessibility::Text::GetRangeOfSelection() */ - Accessibility::Range GetRangeOfSelection(size_t selectionIndex) override; + Accessibility::Range GetRangeOfSelection(size_t selectionIndex) const override; /** * @copydoc Dali::Accessibility::Text::RemoveSelection() 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 9cefc6c0f1..7eec04ef49 100644 --- a/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp @@ -1138,7 +1138,7 @@ Vector TextField::GetTextPosition(const uint32_t startIndex, const uint return mController->GetTextPosition(startIndex, endIndex); } -std::string TextField::AccessibleImpl::GetName() +std::string TextField::AccessibleImpl::GetName() const { auto self = Toolkit::TextField::DownCast(Self()); if(IsHiddenInput(self)) @@ -1149,7 +1149,7 @@ std::string TextField::AccessibleImpl::GetName() return self.GetProperty(Toolkit::TextField::Property::TEXT).Get(); } -std::string TextField::AccessibleImpl::GetText(size_t startOffset, size_t endOffset) +std::string TextField::AccessibleImpl::GetText(size_t startOffset, size_t endOffset) const { if(endOffset <= startOffset) { @@ -1170,7 +1170,7 @@ std::string TextField::AccessibleImpl::GetText(size_t startOffset, size_t endOff return text.substr(startOffset, endOffset - startOffset); } -size_t TextField::AccessibleImpl::GetCharacterCount() +size_t TextField::AccessibleImpl::GetCharacterCount() const { auto self = Toolkit::TextField::DownCast(Self()); auto text = self.GetProperty(Toolkit::TextField::Property::TEXT).Get(); @@ -1178,7 +1178,7 @@ size_t TextField::AccessibleImpl::GetCharacterCount() return text.size(); } -size_t TextField::AccessibleImpl::GetCursorOffset() +size_t TextField::AccessibleImpl::GetCursorOffset() const { auto self = Toolkit::TextField::DownCast(Self()); return Dali::Toolkit::GetImpl(self).GetTextController()->GetCursorPosition(); @@ -1201,7 +1201,7 @@ bool TextField::AccessibleImpl::SetCursorOffset(size_t offset) } Dali::Accessibility::Range TextField::AccessibleImpl::GetTextAtOffset( - size_t offset, Dali::Accessibility::TextBoundary boundary) + size_t offset, Dali::Accessibility::TextBoundary boundary) const { auto self = Toolkit::TextField::DownCast(Self()); auto range = Dali::Accessibility::Range{}; @@ -1299,7 +1299,7 @@ Dali::Accessibility::Range TextField::AccessibleImpl::GetTextAtOffset( return range; } -Dali::Accessibility::Range TextField::AccessibleImpl::GetRangeOfSelection(size_t selectionIndex) +Dali::Accessibility::Range TextField::AccessibleImpl::GetRangeOfSelection(size_t selectionIndex) const { // Since DALi supports only one selection indexes higher than 0 are ignored if(selectionIndex > 0) @@ -1399,13 +1399,13 @@ Dali::Accessibility::States TextField::AccessibleImpl::CalculateStates() { using namespace Dali::Accessibility; - auto states = DevelControl::AccessibleImpl::CalculateStates(); + auto states = DevelControl::ControlAccessible::CalculateStates(); states[State::EDITABLE] = true; states[State::FOCUSABLE] = true; Toolkit::Control focusControl = Toolkit::KeyInputFocusManager::Get().GetCurrentFocusControl(); - if(mSelf == focusControl) + if(Self() == focusControl) { states[State::FOCUSED] = true; } 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 6efd495291..e53189eabe 100644 --- a/dali-toolkit/internal/controls/text-controls/text-field-impl.h +++ b/dali-toolkit/internal/controls/text-controls/text-field-impl.h @@ -504,32 +504,31 @@ protected: /** * @brief This structure is to connect TextField with Accessible functions. */ - struct AccessibleImpl : public DevelControl::AccessibleImpl, - public virtual Dali::Accessibility::Text, + struct AccessibleImpl : public DevelControl::ControlAccessible, public virtual Dali::Accessibility::EditableText, public virtual Dali::Accessibility::Hypertext { - using DevelControl::AccessibleImpl::AccessibleImpl; + using DevelControl::ControlAccessible::ControlAccessible; /** * @copydoc Dali::Accessibility::Accessible::GetName() */ - std::string GetName() override; + std::string GetName() const override; /** * @copydoc Dali::Accessibility::Text::GetText() */ - std::string GetText(size_t startOffset, size_t endOffset) override; + std::string GetText(size_t startOffset, size_t endOffset) const override; /** * @copydoc Dali::Accessibility::Text::GetCharacterCount() */ - size_t GetCharacterCount() override; + size_t GetCharacterCount() const override; /** * @copydoc Dali::Accessibility::Text::GetCursorOffset() */ - size_t GetCursorOffset() override; + size_t GetCursorOffset() const override; /** * @copydoc Dali::Accessibility::Text::SetCursorOffset() @@ -539,12 +538,12 @@ protected: /** * @copydoc Dali::Accessibility::Text::GetTextAtOffset() */ - Accessibility::Range GetTextAtOffset(size_t offset, Accessibility::TextBoundary boundary) override; + Accessibility::Range GetTextAtOffset(size_t offset, Accessibility::TextBoundary boundary) const override; /** * @copydoc Dali::Accessibility::Text::GetRangeOfSelection() */ - Accessibility::Range GetRangeOfSelection(size_t selectionIndex) override; + Accessibility::Range GetRangeOfSelection(size_t selectionIndex) const override; /** * @copydoc Dali::Accessibility::Text::RemoveSelection() 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 9e15b344fc..ae948e2710 100644 --- a/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp @@ -1146,7 +1146,7 @@ Vector TextLabel::GetTextPosition(const uint32_t startIndex, const uint return mController->GetTextPosition(startIndex, endIndex); } -std::string TextLabel::AccessibleImpl::GetNameRaw() +std::string TextLabel::AccessibleImpl::GetNameRaw() const { auto self = Toolkit::TextLabel::DownCast(Self()); return self.GetProperty(Toolkit::TextLabel::Property::TEXT).Get(); @@ -1157,7 +1157,7 @@ Property::Index TextLabel::AccessibleImpl::GetNamePropertyIndex() return Toolkit::TextLabel::Property::TEXT; } -std::string TextLabel::AccessibleImpl::GetText(size_t startOffset, size_t endOffset) +std::string TextLabel::AccessibleImpl::GetText(size_t startOffset, size_t endOffset) const { if(endOffset <= startOffset) { @@ -1175,7 +1175,7 @@ std::string TextLabel::AccessibleImpl::GetText(size_t startOffset, size_t endOff return text.substr(startOffset, endOffset - startOffset); } -size_t TextLabel::AccessibleImpl::GetCharacterCount() +size_t TextLabel::AccessibleImpl::GetCharacterCount() const { auto self = Toolkit::TextLabel::DownCast(Self()); auto text = self.GetProperty(Toolkit::TextLabel::Property::TEXT).Get(); @@ -1183,7 +1183,7 @@ size_t TextLabel::AccessibleImpl::GetCharacterCount() return text.size(); } -size_t TextLabel::AccessibleImpl::GetCursorOffset() +size_t TextLabel::AccessibleImpl::GetCursorOffset() const { return {}; } @@ -1193,7 +1193,7 @@ bool TextLabel::AccessibleImpl::SetCursorOffset(size_t offset) return {}; } -Dali::Accessibility::Range TextLabel::AccessibleImpl::GetTextAtOffset(size_t offset, Dali::Accessibility::TextBoundary boundary) +Dali::Accessibility::Range TextLabel::AccessibleImpl::GetTextAtOffset(size_t offset, Dali::Accessibility::TextBoundary boundary) const { auto self = Toolkit::TextLabel::DownCast(Self()); auto text = self.GetProperty(Toolkit::TextLabel::Property::TEXT).Get(); @@ -1284,7 +1284,7 @@ Dali::Accessibility::Range TextLabel::AccessibleImpl::GetTextAtOffset(size_t off return range; } -Dali::Accessibility::Range TextLabel::AccessibleImpl::GetRangeOfSelection(size_t selectionIndex) +Dali::Accessibility::Range TextLabel::AccessibleImpl::GetRangeOfSelection(size_t selectionIndex) const { // Since DALi supports only one selection indexes higher than 0 are ignored if(selectionIndex > 0) 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 3f1080c177..8bedc5baeb 100644 --- a/dali-toolkit/internal/controls/text-controls/text-label-impl.h +++ b/dali-toolkit/internal/controls/text-controls/text-label-impl.h @@ -243,26 +243,26 @@ protected: /** * @brief This structure is to connect TextLabel with Accessible functions. */ - struct AccessibleImpl : public DevelControl::AccessibleImpl, + struct AccessibleImpl : public DevelControl::ControlAccessible, public virtual Dali::Accessibility::Text, public virtual Dali::Accessibility::Hypertext { - using DevelControl::AccessibleImpl::AccessibleImpl; + using DevelControl::ControlAccessible::ControlAccessible; /** * @copydoc Dali::Accessibility::Text::GetText() */ - std::string GetText(size_t startOffset, size_t endOffset) override; + std::string GetText(size_t startOffset, size_t endOffset) const override; /** * @copydoc Dali::Accessibility::Text::GetCharacterCount() */ - size_t GetCharacterCount() override; + size_t GetCharacterCount() const override; /** * @copydoc Dali::Accessibility::Text::GetCursorOffset() */ - size_t GetCursorOffset() override; + size_t GetCursorOffset() const override; /** * @copydoc Dali::Accessibility::Text::SetCursorOffset() @@ -272,12 +272,12 @@ protected: /** * @copydoc Dali::Accessibility::Text::GetTextAtOffset() */ - Accessibility::Range GetTextAtOffset(size_t offset, Accessibility::TextBoundary boundary) override; + Accessibility::Range GetTextAtOffset(size_t offset, Accessibility::TextBoundary boundary) const override; /** * @copydoc Dali::Accessibility::Text::GetRangeOfSelection() */ - Accessibility::Range GetRangeOfSelection(size_t selectionIndex) override; + Accessibility::Range GetRangeOfSelection(size_t selectionIndex) const override; /** * @copydoc Dali::Accessibility::Text::RemoveSelection() @@ -292,7 +292,7 @@ protected: /** * @copydoc Dali::Accessibility::Text::GetNameRaw() */ - std::string GetNameRaw() override; + std::string GetNameRaw() const override; /** * @copydoc Dali::Accessibility::Text::GetNamePropertyIndex() 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 e2d9f911e8..2ff1bd413e 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 @@ -399,7 +399,7 @@ void TextSelectionPopup::OnInitialize() DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { return std::unique_ptr( - new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::DIALOG, true)); + new DevelControl::ControlAccessible(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 ba2b8d5bc7..3220328903 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 @@ -166,7 +166,7 @@ void TextSelectionToolbar::OnInitialize() DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { return std::unique_ptr( - new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::TOOL_BAR)); + new DevelControl::ControlAccessible(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 2aefaafcc7..0e894df0de 100644 --- a/dali-toolkit/internal/controls/tool-bar/tool-bar-impl.cpp +++ b/dali-toolkit/internal/controls/tool-bar/tool-bar-impl.cpp @@ -313,7 +313,7 @@ void ToolBar::OnInitialize() DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) { return std::unique_ptr( - new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::TOOL_BAR)); + new DevelControl::ControlAccessible(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 181a47e851..9934f3b3f5 100644 --- a/dali-toolkit/internal/controls/video-view/video-view-impl.cpp +++ b/dali-toolkit/internal/controls/video-view/video-view-impl.cpp @@ -120,7 +120,7 @@ void VideoView::OnInitialize() DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) { return std::unique_ptr( - new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::VIDEO)); + new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::VIDEO)); }); //Enable highightability