42 :
public fuchsia::accessibility::semantics::SemanticListener {
54 static_assert(fuchsia::accessibility::semantics::MAX_LABEL_SIZE <
63 sizeof(fuchsia::accessibility::semantics::Node().node_id()),
64 "flutter::SemanticsNode::id and "
65 "fuchsia::accessibility::semantics::Node::node_id differ in size.");
74 fuchsia::accessibility::semantics::SemanticsManagerHandle
76 fuchsia::ui::views::ViewRef view_ref,
77 inspect::Node inspect_node);
91 float view_pixel_ratio);
101 fuchsia::math::PointF local_point,
102 fuchsia::accessibility::semantics::SemanticListener::HitTestCallback
108 fuchsia::accessibility::semantics::Action
action,
109 fuchsia::accessibility::semantics::SemanticListener::
110 OnAccessibilityActionRequestedCallback
callback) override;
114 static constexpr int32_t kRootNodeId = 0;
122 struct FuchsiaAtomicUpdate {
123 FuchsiaAtomicUpdate() =
default;
124 ~FuchsiaAtomicUpdate() =
default;
125 FuchsiaAtomicUpdate(FuchsiaAtomicUpdate&&) =
default;
129 void AddNodeUpdate(fuchsia::accessibility::semantics::Node node,
133 void AddNodeDeletion(uint32_t
id);
135 std::vector<std::pair<fuchsia::accessibility::semantics::Node, size_t>>
137 std::vector<uint32_t> deletions;
142 struct SemanticsNode {
147 fuchsia::accessibility::semantics::Node GetRootNodeUpdate(
size_t& node_size);
151 fuchsia::ui::gfx::BoundingBox GetNodeLocation(
155 fuchsia::ui::gfx::mat4 GetNodeTransform(
159 fuchsia::ui::gfx::mat4 ConvertSkiaTransformToMat4(
164 fuchsia::accessibility::semantics::Attributes GetNodeAttributes(
166 size_t* added_size)
const;
170 fuchsia::accessibility::semantics::States GetNodeStates(
172 size_t* additional_size)
const;
176 std::vector<fuchsia::accessibility::semantics::Action> GetNodeActions(
178 size_t* additional_size)
const;
182 fuchsia::accessibility::semantics::Role GetNodeRole(
186 std::unordered_set<int32_t> GetDescendants(int32_t node_id)
const;
193 void PruneUnreachableNodes(FuchsiaAtomicUpdate* atomic_update);
199 void UpdateScreenRects();
205 void UpdateScreenRects(int32_t node_id,
206 SkM44 parent_transform,
207 std::unordered_set<int32_t>* visited_nodes);
213 std::optional<int32_t> GetHitNode(int32_t node_id,
float x,
float y);
223 std::optional<flutter::SemanticsAction> GetFlutterSemanticsAction(
224 fuchsia::accessibility::semantics::Action fuchsia_action,
229 void Apply(FuchsiaAtomicUpdate* atomic_update);
233 OnSemanticsModeChangedCallback
callback)
override;
237 void FillInspectTree(int32_t flutter_node_id,
238 int32_t current_level,
239 inspect::Node inspect_node,
240 inspect::Inspector* inspector)
const;
246 float last_seen_view_pixel_ratio_ = 1.f;
248 fidl::Binding<fuchsia::accessibility::semantics::SemanticListener> binding_;
249 fuchsia::accessibility::semantics::SemanticsManagerPtr
250 fuchsia_semantics_manager_;
251 fuchsia::accessibility::semantics::SemanticTreePtr tree_ptr_;
255 std::unordered_map<int32_t, SemanticsNode> nodes_;
256 bool semantics_enabled_;
259 std::shared_ptr<std::queue<FuchsiaAtomicUpdate>> atomic_updates_;
262 inspect::Node inspect_node_;
268 inspect::LazyNode inspect_node_tree_dump_;