| // Copyright 2020 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SRC_UI_A11Y_LIB_SEMANTICS_SEMANTICS_SOURCE_H_ |
| #define SRC_UI_A11Y_LIB_SEMANTICS_SEMANTICS_SOURCE_H_ |
| |
| #include <fuchsia/accessibility/semantics/cpp/fidl.h> |
| #include <fuchsia/math/cpp/fidl.h> |
| #include <fuchsia/ui/views/cpp/fidl.h> |
| #include <zircon/types.h> |
| |
| #include <optional> |
| |
| #include "src/ui/a11y/lib/semantics/typedefs.h" |
| #include "src/ui/a11y/lib/semantics/util/semantic_transform.h" |
| |
| namespace a11y { |
| |
| // An interface for a11y query existing semantic information. |
| class SemanticsSource { |
| public: |
| SemanticsSource() = default; |
| virtual ~SemanticsSource() = default; |
| |
| // Returns true if the view referenced by |view_ref_koid| is providing semantics. |
| virtual bool ViewHasSemantics(zx_koid_t view_ref_koid) = 0; |
| |
| // Returns a clone of the ViewRef referenced by |view_ref_koid| if it is known. |
| // TODO(https://fxbug.dev/42123849): Move ViewRefClone from SemanticsSource to ViewRefWrapper. |
| virtual std::optional<fuchsia::ui::views::ViewRef> ViewRefClone(zx_koid_t view_ref_koid) = 0; |
| |
| // Returns the semantic node with id |node_id| in the semantic tree with koid |koid|, if one |
| // exists. Returns nullptr if |koid| is invalid, or if no node with id |node_id| is found. |
| virtual const fuchsia::accessibility::semantics::Node* GetSemanticNode( |
| zx_koid_t koid, uint32_t node_id) const = 0; |
| |
| // Returns the parent of the node with id |node_id|. Returns nullptr if the |
| // input node is the root. |
| // Currently O(N). TODO(https://fxbug.dev/42059816): improve this. |
| virtual const fuchsia::accessibility::semantics::Node* GetParentNode(zx_koid_t koid, |
| uint32_t node_id) const = 0; |
| |
| // Returns the next node in traversal-order neighbors relative to the node with id |node_id|. |
| virtual const fuchsia::accessibility::semantics::Node* GetNextNode( |
| zx_koid_t koid, uint32_t node_id, a11y::NodeFilter filter) const = 0; |
| |
| // Returns the next node in traversal-order neighbors relative to the node with id |node_id|. |
| // This version provides both the node and its parent to the 'filter' function, for convenience. |
| virtual const fuchsia::accessibility::semantics::Node* GetNextNode( |
| zx_koid_t koid, uint32_t node_id, a11y::NodeFilterWithParent filter) const = 0; |
| |
| // Returns the previous node in traversal-order neighbors relative to the node with id |node_id|. |
| // Note: Currently O(N). TODO(https://fxbug.dev/42060491): improve this. |
| virtual const fuchsia::accessibility::semantics::Node* GetPreviousNode( |
| zx_koid_t koid, uint32_t node_id, a11y::NodeFilter filter) const = 0; |
| |
| // Returns the previous node in traversal-order neighbors relative to the node with id |node_id|. |
| // This version provides both the node and its parent to the 'filter' function, for convenience. |
| // Note: Currently O(N). TODO(https://fxbug.dev/42060491): improve this. |
| virtual const fuchsia::accessibility::semantics::Node* GetPreviousNode( |
| zx_koid_t koid, uint32_t node_id, a11y::NodeFilterWithParent filter) const = 0; |
| |
| // Performs a hit test at the point specified by |local_point| within the view corresponding to |
| // |koid|. If no such view is found, this function will return without attempting a hit test. |
| virtual void ExecuteHitTesting( |
| zx_koid_t koid, fuchsia::math::PointF local_point, |
| fuchsia::accessibility::semantics::SemanticListener::HitTestCallback callback) = 0; |
| |
| // Performs accessibility action on node with id |node_id| in view with koid |koid|. |
| // If no such view is found, this function will return without attempting a hit test. |
| virtual void PerformAccessibilityAction( |
| zx_koid_t koid, uint32_t node_id, fuchsia::accessibility::semantics::Action action, |
| fuchsia::accessibility::semantics::SemanticListener::OnAccessibilityActionRequestedCallback |
| callback) = 0; |
| |
| // Returns a std::optional<SemanticTransform> to transform coordinates from node-local space into |
| // view-root space. If the transform cannot be computed, then this method returns std::nullopt. |
| virtual std::optional<SemanticTransform> GetNodeToRootTransform(zx_koid_t, |
| uint32_t node_id) const = 0; |
| }; |
| |
| } // namespace a11y |
| |
| #endif // SRC_UI_A11Y_LIB_SEMANTICS_SEMANTICS_SOURCE_H_ |