[AT-SPI] Store AccessibilityAttributes in NUI 88/277288/4
authorArtur Świgoń <a.swigon@samsung.com>
Mon, 4 Jul 2022 13:03:25 +0000 (15:03 +0200)
committerArtur Świgoń <a.swigon@samsung.com>
Thu, 7 Jul 2022 07:22:27 +0000 (09:22 +0200)
Having a modifiable attribute dictionary in NUI removes the performance
penalty of having to go through interops on every modification. A new
override for GetAttributes in NUIViewAccessible will now collect the
attributes stored in NUI.

Change-Id: I43e0e6d231f70583e3390a2f3730491f17f48811

dali-csharp-binder/src/control-devel-wrap.cpp
dali-csharp-binder/src/nui-view-accessible.cpp
dali-csharp-binder/src/nui-view-accessible.h

index 1bc95d9..174cd41 100644 (file)
@@ -202,39 +202,6 @@ SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Toolkit_DevelControl_ClearAccessibilityR
   }));
 }
 
-SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Toolkit_DevelControl_AppendAccessibilityAttribute(void* arg1, char* arg2, char* arg3)
-{
-  GUARD_ON_NULL_RET(arg1);
-  GUARD_ON_NULL_RET(arg2);
-  GUARD_ON_NULL_RET(arg3);
-  try_catch(([&]() {
-    auto*             control = (Dali::Toolkit::Control*)arg1;
-    const std::string key(arg2);
-    const std::string value(arg3);
-    AppendAccessibilityAttribute(*control, key, value);
-  }));
-}
-
-SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Toolkit_DevelControl_RemoveAccessibilityAttribute(void* arg1, char* arg2)
-{
-  GUARD_ON_NULL_RET(arg1);
-  GUARD_ON_NULL_RET(arg2);
-  try_catch(([&]() {
-    auto*             control = (Dali::Toolkit::Control*)arg1;
-    const std::string key(arg2);
-    RemoveAccessibilityAttribute(*control, key);
-  }));
-}
-
-SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Toolkit_DevelControl_ClearAccessibilityAttributes(void* arg1)
-{
-  GUARD_ON_NULL_RET(arg1);
-  try_catch(([&]() {
-    auto* control = (Dali::Toolkit::Control*)arg1;
-    ClearAccessibilityAttributes(*control);
-  }));
-}
-
 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Toolkit_DevelControl_SetAccessibilityReadingInfoType2(void* arg1, int arg2)
 {
   using namespace Dali::Accessibility;
index 88140ec..457db61 100644 (file)
@@ -29,6 +29,17 @@ using namespace Dali::Toolkit;
 
 using Interface = Accessibility::AtspiInterface;
 
+namespace
+{
+void GetAttributesCallback(const char* key, const char* value, Accessibility::Attributes* attributes)
+{
+  attributes->insert_or_assign(key, value);
+}
+
+using GetAttributesCallbackType = decltype(&GetAttributesCallback);
+
+} // unnamed namespace
+
 // Keep this structure layout binary compatible with the respective C# structure!
 struct NUIViewAccessible::AccessibilityDelegate
 {
@@ -71,6 +82,7 @@ struct NUIViewAccessible::AccessibilityDelegate
   bool                  (*clearSelection)          (RefObject*);                   // 34
   bool                  (*deselectChild)           (RefObject*, int);              // 35
   Rect<int>*            (*getRangeExtents)         (RefObject*, int, int, int);    // 36
+  void                  (*getAttributes)           (RefObject*, GetAttributesCallbackType, Accessibility::Attributes*); // 37
   // clang-format on
 };
 
@@ -193,6 +205,15 @@ Accessibility::States NUIViewAccessible::CalculateStates()
   return Accessibility::States{states};
 }
 
+Accessibility::Attributes NUIViewAccessible::GetAttributes() const
+{
+  auto attributes = ControlAccessible::GetAttributes();
+
+  CallMethod<Interface::ACCESSIBLE>(mTable->getAttributes, &GetAttributesCallback, &attributes);
+
+  return attributes;
+}
+
 Property::Index NUIViewAccessible::GetNamePropertyIndex()
 {
   return Property::INVALID_INDEX;
index f99c09e..4aad8cf 100644 (file)
@@ -65,6 +65,8 @@ public:
 
   Dali::Accessibility::States CalculateStates() override;
 
+  Dali::Accessibility::Attributes GetAttributes() const override;
+
   Dali::Property::Index GetNamePropertyIndex() override;
 
   Dali::Property::Index GetDescriptionPropertyIndex() override;