X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fcontrol%2Fcontrol-data-impl.cpp;h=76de885aafe4b580efa0ee775cd48b1ecd9f44ce;hb=e4c8362431523550a745b190c67c0c8e3f25ac4d;hp=b49f9d0c5e29ea5c7105a9d66865726bffe323bd;hpb=24513084007fb981ed006ad2e8f8649d7b54e176;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/controls/control/control-data-impl.cpp b/dali-toolkit/internal/controls/control/control-data-impl.cpp index b49f9d0..76de885 100644 --- a/dali-toolkit/internal/controls/control/control-data-impl.cpp +++ b/dali-toolkit/internal/controls/control/control-data-impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Samsung Electronics Co., Ltd. + * Copyright (c) 2022 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. @@ -30,17 +30,18 @@ #include #include #include +#include #include #include #include #include // INTERNAL INCLUDES -#include #include #include #include #include +#include #include #include #include @@ -51,12 +52,12 @@ namespace { -const std::string READING_INFO_TYPE_NAME = "name"; -const std::string READING_INFO_TYPE_ROLE = "role"; -const std::string READING_INFO_TYPE_DESCRIPTION = "description"; -const std::string READING_INFO_TYPE_STATE = "state"; -const std::string READING_INFO_TYPE_ATTRIBUTE_NAME = "reading_info_type"; -const std::string READING_INFO_TYPE_SEPARATOR = "|"; +const char* READING_INFO_TYPE_NAME = "name"; +const char* READING_INFO_TYPE_ROLE = "role"; +const char* READING_INFO_TYPE_DESCRIPTION = "description"; +const char* READING_INFO_TYPE_STATE = "state"; +const char* READING_INFO_TYPE_ATTRIBUTE_NAME = "reading_info_type"; +const char* READING_INFO_TYPE_SEPARATOR = "|"; } // namespace namespace Dali @@ -448,7 +449,7 @@ static bool IsShowingGeometryOnScreen(Dali::Rect<> rect) Dali::Accessibility::Accessible* ExternalAccessibleGetter(Dali::Actor actor) { auto control = Toolkit::Control::DownCast(actor); - if (!control) + if(!control) { return nullptr; } @@ -485,6 +486,7 @@ const PropertyRegistration Control::Impl::PROPERTY_22(typeRegistration, "dispatc const PropertyRegistration Control::Impl::PROPERTY_23(typeRegistration, "accessibilityHidden", Toolkit::DevelControl::Property::ACCESSIBILITY_HIDDEN, Property::BOOLEAN, &Control::Impl::SetProperty, &Control::Impl::GetProperty); const PropertyRegistration Control::Impl::PROPERTY_24(typeRegistration, "clockwiseFocusableActorId", Toolkit::DevelControl::Property::CLOCKWISE_FOCUSABLE_ACTOR_ID, Property::INTEGER, &Control::Impl::SetProperty, &Control::Impl::GetProperty); const PropertyRegistration Control::Impl::PROPERTY_25(typeRegistration, "counterClockwiseFocusableActorId", Toolkit::DevelControl::Property::COUNTER_CLOCKWISE_FOCUSABLE_ACTOR_ID, Property::INTEGER, &Control::Impl::SetProperty, &Control::Impl::GetProperty); +const PropertyRegistration Control::Impl::PROPERTY_26(typeRegistration, "automationId", Toolkit::DevelControl::Property::AUTOMATION_ID, Property::STRING, &Control::Impl::SetProperty, &Control::Impl::GetProperty); // clang-format on @@ -565,7 +567,7 @@ void Control::Impl::CheckHighlightedObjectGeometry() auto accessible = GetAccessibleObject(); auto lastPosition = accessible->GetLastPosition(); auto accessibleRect = accessible->GetExtents(Dali::Accessibility::CoordinateType::WINDOW); - auto rect = GetShowingGeometry(accessibleRect, accessible); + auto rect = GetShowingGeometry(accessibleRect, accessible); switch(mAccessibilityLastScreenRelativeMoveType) { @@ -579,11 +581,11 @@ void Control::Impl::CheckHighlightedObjectGeometry() } case Dali::Accessibility::ScreenRelativeMoveType::INSIDE: { - if(rect.width < 0 && accessibleRect.x != lastPosition.x) + if(rect.width < 0 && !Dali::Equals(accessibleRect.x, lastPosition.x)) { mAccessibilityLastScreenRelativeMoveType = (accessibleRect.x < lastPosition.x) ? Dali::Accessibility::ScreenRelativeMoveType::OUTGOING_TOP_LEFT : Dali::Accessibility::ScreenRelativeMoveType::OUTGOING_BOTTOM_RIGHT; } - if(rect.height < 0 && accessibleRect.y != lastPosition.y) + if(rect.height < 0 && !Dali::Equals(accessibleRect.y, lastPosition.y)) { mAccessibilityLastScreenRelativeMoveType = (accessibleRect.y < lastPosition.y) ? Dali::Accessibility::ScreenRelativeMoveType::OUTGOING_TOP_LEFT : Dali::Accessibility::ScreenRelativeMoveType::OUTGOING_BOTTOM_RIGHT; } @@ -626,9 +628,9 @@ void Control::Impl::RegisterAccessibilityPositionPropertyNotification() mAccessibilityLastScreenRelativeMoveType = Dali::Accessibility::ScreenRelativeMoveType::OUTSIDE; // recalculate mAccessibilityLastScreenRelativeMoveType accordingly to the initial position CheckHighlightedObjectGeometry(); - mAccessibilityPositionNotification = mControlImpl.Self().AddPropertyNotification(Actor::Property::WORLD_POSITION, StepCondition(1.0f, 1.0f)); + mAccessibilityPositionNotification = mControlImpl.Self().AddPropertyNotification(Actor::Property::WORLD_POSITION, StepCondition(1.0f, 1.0f)); mAccessibilityPositionNotification.SetNotifyMode(PropertyNotification::NOTIFY_ON_CHANGED); - mAccessibilityPositionNotification.NotifySignal().Connect(this, [this](PropertyNotification&){ CheckHighlightedObjectGeometry(); }); + mAccessibilityPositionNotification.NotifySignal().Connect(this, [this](PropertyNotification&) { CheckHighlightedObjectGeometry(); }); mIsAccessibilityPositionPropertyNotificationSet = true; } @@ -908,6 +910,24 @@ void Control::Impl::StartObservingVisual(Toolkit::Visual::Base& visual) visualImpl.AddEventObserver(*this); } +void Control::Impl::ResourceReady(bool relayoutRequest) +{ + Actor self = mControlImpl.Self(); + // A visual is ready so control may need relayouting if staged + if(relayoutRequest && self.GetProperty(Actor::Property::CONNECTED_TO_SCENE)) + { + mControlImpl.RelayoutRequest(); + } + + // Emit signal if all enabled visuals registered by the control are ready or there are no visuals. + if(IsResourceReady()) + { + // Reset the flag + mNeedToEmitResourceReady = false; + EmitResourceReadySignal(); + } +} + // Called by a Visual when it's resource is ready void Control::Impl::ResourceReady(Visual::Base& object) { @@ -937,20 +957,8 @@ void Control::Impl::ResourceReady(Visual::Base& object) } } - // A visual is ready so control may need relayouting if staged - if(self.GetProperty(Actor::Property::CONNECTED_TO_SCENE)) - { - mControlImpl.RelayoutRequest(); - } - - // Emit signal if all enabled visuals registered by the control are ready. - if(IsResourceReady()) - { - // Reset the flag - mNeedToEmitResourceReady = false; - - EmitResourceReadySignal(); - } + // Called by a Visual when it's resource is ready + ResourceReady(true); } void Control::Impl::NotifyVisualEvent(Visual::Base& object, Property::Index signalId) @@ -967,6 +975,11 @@ void Control::Impl::NotifyVisualEvent(Visual::Base& object, Property::Index sign } } +void Control::Impl::RelayoutRequest(Visual::Base& object) +{ + mControlImpl.RelayoutRequest(); +} + bool Control::Impl::IsResourceReady() const { // Iterate through and check all the enabled visuals are ready @@ -1090,6 +1103,15 @@ void Control::Impl::DoAction(Dali::Property::Index visualIndex, Dali::Property:: } } +void Control::Impl::DoActionExtension(Dali::Property::Index visualIndex, Dali::Property::Index actionId, Dali::Any attributes) +{ + RegisteredVisualContainer::Iterator iter; + if(FindVisual(visualIndex, mVisuals, iter)) + { + Toolkit::GetImplementation((*iter)->visual).DoActionExtension(actionId, attributes); + } +} + void Control::Impl::AppendAccessibilityAttribute(const std::string& key, const std::string value) { Property::Value* checkedValue = mAccessibilityAttributes.Find(key); @@ -1364,7 +1386,7 @@ void Control::Impl::SetProperty(BaseObject* object, Property::Index index, const auto* accessible = controlImpl.GetAccessibleObject(); auto* parent = dynamic_cast(accessible->GetParent()); - if (parent) + if(parent) { parent->OnChildrenChanged(); } @@ -1389,6 +1411,16 @@ void Control::Impl::SetProperty(BaseObject* object, Property::Index index, const } break; } + + case Toolkit::DevelControl::Property::AUTOMATION_ID: + { + std::string automationId; + if(value.Get(automationId)) + { + controlImpl.mImpl->mAutomationId = automationId; + } + break; + } } } } @@ -1561,6 +1593,12 @@ Property::Value Control::Impl::GetProperty(BaseObject* object, Property::Index i value = controlImpl.mImpl->mCounterClockwiseFocusableActorId; break; } + + case Toolkit::DevelControl::Property::AUTOMATION_ID: + { + value = controlImpl.mImpl->mAutomationId; + break; + } } } @@ -1993,7 +2031,8 @@ Dali::Property Control::Impl::GetVisualProperty(Dali::Property::Index index, Dal void Control::Impl::CreateTransitions(std::vector>& sourceProperties, std::vector>& destinationProperties, - Dali::Toolkit::Control source, Dali::Toolkit::Control destination) + Dali::Toolkit::Control source, + Dali::Toolkit::Control destination) { // Retrieves background properties to be transitioned. Dali::Property::Map backgroundSourcePropertyMap, backgroundDestinationPropertyMap;