std::vector<Dali::Accessibility::Relation> ret;
- auto& relation = controlImpl.mAccessibilityRelations;
- for(auto i = 0u; i < relation.size(); ++i)
+ auto& relations = controlImpl.mAccessibilityRelations;
+ for(auto i = 0u; i < relations.size(); ++i)
{
- if(relation[i].empty()) continue;
+ auto& relation = relations[i];
- ret.emplace_back(Accessibility::Relation{static_cast<Accessibility::RelationType>(i), relation[i]});
+ if(relation.empty())
+ {
+ continue;
+ }
+
+ // Map every Accessible* to its Address
+ std::vector<Accessibility::Address> targets;
+ std::transform(relation.begin(), relation.end(), std::back_inserter(targets), [](auto* x) {
+ return x->GetAddress();
+ });
+
+ ret.emplace_back(Accessibility::Relation{static_cast<Accessibility::RelationType>(i), std::move(targets)});
}
return ret;
auto object = controlDataImpl->GetAccessibilityObject(destination);
if(object)
{
- controlDataImpl->mAccessibilityRelations[index].push_back(object->GetAddress());
+ controlDataImpl->mAccessibilityRelations[index].push_back(object);
}
}
}
return;
}
- auto address = object->GetAddress();
-
auto& targets = controlDataImpl->mAccessibilityRelations[index];
for(auto i = 0u; i < targets.size(); ++i)
{
- if(targets[i].ToString() == address.ToString())
+ if(targets[i] == object)
{
- targets[i] = targets.back();
- targets.erase(targets.end() - 1);
+ std::swap(targets[i], targets.back());
+ targets.pop_back();
+ --i;
}
}
}
{
if(auto controlDataImpl = GetControlImplementation(control))
{
- return controlDataImpl->mAccessibilityRelations;
+ auto& relations = controlDataImpl->mAccessibilityRelations;
+
+ std::vector<std::vector<Accessibility::Address>> result(relations.size());
+
+ // Map every Accessible* to its Address
+ for(std::size_t i = 0; i < relations.size(); ++i)
+ {
+ auto& relation = relations[i];
+
+ std::transform(relation.begin(), relation.end(), std::back_inserter(result[i]), [](auto* x) {
+ return x->GetAddress();
+ });
+ }
+
+ return result;
}
+
return {};
}
Dali::Accessibility::Role mAccessibilityRole = Dali::Accessibility::Role::UNKNOWN;
- std::vector<std::vector<Accessibility::Address>> mAccessibilityRelations;
+ std::vector<std::vector<Accessibility::Accessible*>> mAccessibilityRelations;
std::function<std::unique_ptr<Dali::Accessibility::Accessible>(Actor)> mAccessibilityConstructor;
std::unique_ptr<Dali::Accessibility::Accessible> mAccessibilityObject;