X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fcontrol%2Fcontrol-data-impl.cpp;h=c1618f3d6d019394d2461aaed2e48fc88155f80b;hp=a476ecae4597998195fbccecfea852ee5e9dde3c;hb=36b6c48b03fa926529904947f222aadebbf0c1ff;hpb=9a5ce98a301f74f8df8a3be6d223b525c8839b0b diff --git a/dali-toolkit/internal/controls/control/control-data-impl.cpp b/dali-toolkit/internal/controls/control/control-data-impl.cpp index a476eca..c1618f3 100644 --- a/dali-toolkit/internal/controls/control/control-data-impl.cpp +++ b/dali-toolkit/internal/controls/control/control-data-impl.cpp @@ -445,6 +445,19 @@ static bool IsShowingGeometryOnScreen(Dali::Rect<> rect) return rect.width > 0 && rect.height > 0; } +Dali::Accessibility::Accessible* ExternalAccessibleGetter(Dali::Actor actor) +{ + auto control = Toolkit::Control::DownCast(actor); + if (!control) + { + return nullptr; + } + + auto& controlImpl = Toolkit::Internal::GetImplementation(control); + + return controlImpl.GetAccessibleObject(); +} + } // unnamed namespace // clang-format off @@ -468,7 +481,8 @@ const PropertyRegistration Control::Impl::PROPERTY_18(typeRegistration, "accessi const PropertyRegistration Control::Impl::PROPERTY_19(typeRegistration, "accessibilityRole", Toolkit::DevelControl::Property::ACCESSIBILITY_ROLE, Property::INTEGER, &Control::Impl::SetProperty, &Control::Impl::GetProperty); const PropertyRegistration Control::Impl::PROPERTY_20(typeRegistration, "accessibilityHighlightable", Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, Property::BOOLEAN, &Control::Impl::SetProperty, &Control::Impl::GetProperty); const PropertyRegistration Control::Impl::PROPERTY_21(typeRegistration, "accessibilityAttributes", Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES, Property::MAP, &Control::Impl::SetProperty, &Control::Impl::GetProperty); -const PropertyRegistration Control::Impl::PROPERTY_22(typeRegistration, "dispatchKeyEvents", Toolkit::DevelControl::Property::DISPATCH_KEY_EVENTS, Property::BOOLEAN, &Control::Impl::SetProperty, &Control::Impl::GetProperty); +const PropertyRegistration Control::Impl::PROPERTY_22(typeRegistration, "dispatchKeyEvents", Toolkit::DevelControl::Property::DISPATCH_KEY_EVENTS, Property::BOOLEAN, &Control::Impl::SetProperty, &Control::Impl::GetProperty); +const PropertyRegistration Control::Impl::PROPERTY_23(typeRegistration, "accessibilityHidden", Toolkit::DevelControl::Property::ACCESSIBILITY_HIDDEN, Property::BOOLEAN, &Control::Impl::SetProperty, &Control::Impl::GetProperty); // clang-format on @@ -507,14 +521,7 @@ Control::Impl::Impl(Control& controlImpl) mNeedToEmitResourceReady(false), mDispatchKeyEvents(true) { - Dali::Accessibility::Accessible::RegisterExternalAccessibleGetter( - [](Dali::Actor actor) -> Dali::Accessibility::Accessible* { - return Control::Impl::GetAccessibilityObject(actor); - }); - - mAccessibilityConstructor = [](Dali::Actor actor) -> std::unique_ptr { - return std::unique_ptr(new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::UNKNOWN)); - }; + Dali::Accessibility::Accessible::RegisterExternalAccessibleGetter(&ExternalAccessibleGetter); } Control::Impl::~Impl() @@ -551,13 +558,7 @@ const Control::Impl& Control::Impl::Get(const Internal::Control& internalControl void Control::Impl::CheckHighlightedObjectGeometry() { - auto accessible = dynamic_cast(mAccessibilityObject.get()); - if(!accessible) - { - DALI_LOG_ERROR("accessible is not a pointer to a DevelControl::ControlAccessible type"); - return; - } - + auto accessible = GetAccessibleObject(); auto lastPosition = accessible->GetLastPosition(); auto accessibleRect = accessible->GetExtents(Dali::Accessibility::CoordinateType::WINDOW); auto rect = GetShowingGeometry(accessibleRect, accessible); @@ -585,7 +586,7 @@ void Control::Impl::CheckHighlightedObjectGeometry() // notify AT-clients on outgoing moves only if(mAccessibilityLastScreenRelativeMoveType != Dali::Accessibility::ScreenRelativeMoveType::INSIDE) { - mAccessibilityObject.get()->EmitMovedOutOfScreen(mAccessibilityLastScreenRelativeMoveType); + accessible->EmitMovedOutOfScreen(mAccessibilityLastScreenRelativeMoveType); } break; } @@ -1285,45 +1286,30 @@ void Control::Impl::SetProperty(BaseObject* object, Property::Index index, const std::string name; if(value.Get(name)) { - controlImpl.mImpl->mAccessibilityName = name; - controlImpl.mImpl->mAccessibilityNameSet = true; - } - else - { - controlImpl.mImpl->mAccessibilityNameSet = false; + controlImpl.mImpl->mAccessibilityName = name; } + break; } - break; case Toolkit::DevelControl::Property::ACCESSIBILITY_DESCRIPTION: { std::string text; if(value.Get(text)) { - controlImpl.mImpl->mAccessibilityDescription = text; - controlImpl.mImpl->mAccessibilityDescriptionSet = true; - } - else - { - controlImpl.mImpl->mAccessibilityDescriptionSet = false; + controlImpl.mImpl->mAccessibilityDescription = text; } + break; } - break; case Toolkit::DevelControl::Property::ACCESSIBILITY_TRANSLATION_DOMAIN: { std::string text; if(value.Get(text)) { - controlImpl.mImpl->mAccessibilityTranslationDomain = text; - controlImpl.mImpl->mAccessibilityTranslationDomainSet = true; - } - else - { - controlImpl.mImpl->mAccessibilityTranslationDomainSet = false; + controlImpl.mImpl->mAccessibilityTranslationDomain = text; } + break; } - break; case Toolkit::DevelControl::Property::ACCESSIBILITY_ROLE: { @@ -1332,23 +1318,18 @@ void Control::Impl::SetProperty(BaseObject* object, Property::Index index, const { controlImpl.mImpl->mAccessibilityRole = role; } + break; } - break; case Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE: { bool highlightable; if(value.Get(highlightable)) { - controlImpl.mImpl->mAccessibilityHighlightable = highlightable; - controlImpl.mImpl->mAccessibilityHighlightableSet = true; - } - else - { - controlImpl.mImpl->mAccessibilityHighlightableSet = false; + controlImpl.mImpl->mAccessibilityHighlightable = highlightable; } + break; } - break; case Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES: { @@ -1369,6 +1350,23 @@ void Control::Impl::SetProperty(BaseObject* object, Property::Index index, const } break; } + + case Toolkit::DevelControl::Property::ACCESSIBILITY_HIDDEN: + { + bool hidden; + if(value.Get(hidden)) + { + controlImpl.mImpl->mAccessibilityHidden = hidden; + + auto* accessible = controlImpl.GetAccessibleObject(); + auto* parent = dynamic_cast(accessible->GetParent()); + if (parent) + { + parent->OnChildrenChanged(); + } + } + break; + } } } } @@ -1484,28 +1482,19 @@ Property::Value Control::Impl::GetProperty(BaseObject* object, Property::Index i case Toolkit::DevelControl::Property::ACCESSIBILITY_NAME: { - if(controlImpl.mImpl->mAccessibilityNameSet) - { - value = controlImpl.mImpl->mAccessibilityName; - } + value = controlImpl.mImpl->mAccessibilityName; break; } case Toolkit::DevelControl::Property::ACCESSIBILITY_DESCRIPTION: { - if(controlImpl.mImpl->mAccessibilityDescriptionSet) - { - value = controlImpl.mImpl->mAccessibilityDescription; - } + value = controlImpl.mImpl->mAccessibilityDescription; break; } case Toolkit::DevelControl::Property::ACCESSIBILITY_TRANSLATION_DOMAIN: { - if(controlImpl.mImpl->mAccessibilityTranslationDomainSet) - { - value = controlImpl.mImpl->mAccessibilityTranslationDomain; - } + value = controlImpl.mImpl->mAccessibilityTranslationDomain; break; } @@ -1517,10 +1506,7 @@ Property::Value Control::Impl::GetProperty(BaseObject* object, Property::Index i case Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE: { - if(controlImpl.mImpl->mAccessibilityHighlightableSet) - { - value = controlImpl.mImpl->mAccessibilityHighlightable; - } + value = controlImpl.mImpl->mAccessibilityHighlightable; break; } @@ -1529,11 +1515,18 @@ Property::Value Control::Impl::GetProperty(BaseObject* object, Property::Index i value = controlImpl.mImpl->mAccessibilityAttributes; break; } + case Toolkit::DevelControl::Property::DISPATCH_KEY_EVENTS: { value = controlImpl.mImpl->mDispatchKeyEvents; break; } + + case Toolkit::DevelControl::Property::ACCESSIBILITY_HIDDEN: + { + value = controlImpl.mImpl->mAccessibilityHidden; + break; + } } } @@ -2058,27 +2051,14 @@ void Control::Impl::OnIdleCallback() mIdleCallback = nullptr; } -Dali::Accessibility::Accessible* Control::Impl::GetAccessibilityObject() +Toolkit::DevelControl::ControlAccessible* Control::Impl::GetAccessibleObject() { - if(!mAccessibilityObject) + if(!mAccessibleObject) { - mAccessibilityObject = mAccessibilityConstructor(mControlImpl.Self()); + mAccessibleObject.reset(mControlImpl.CreateAccessibleObject()); } - return mAccessibilityObject.get(); -} -Dali::Accessibility::Accessible* Control::Impl::GetAccessibilityObject(Dali::Actor actor) -{ - if(actor) - { - auto control = Dali::Toolkit::Control::DownCast(actor); - if(control) - { - auto controlImpl = static_cast(&control.GetImplementation()); - return controlImpl->mImpl->GetAccessibilityObject(); - } - } - return nullptr; + return mAccessibleObject.get(); } } // namespace Internal