fuchsia.ui.observation.geometry

添加数量:9

协议

ViewTreeWatcher

fuchsia.ui.observation.geometry/watcher.fidl 中定义

一种获取特定视图(“上下文视图”及其子视图(如果有)的视图树快照)的方法。返回的数据是观察期间的一系列快照,从客户端之前 Watch() 调用的 epoch_end(即 zx.Time 0)开始,到当前 epoch_end 结束。时基为 ZX_CLOCK_MONOTONIC。

客户端通常从测试内获取 ViewTreeWatcher 功能,在测试环境之外通常不可能获得。如需了解详情,请参阅 fuchsia.ui.observation.test.Registryfuchsia.ui.test.scene.Controller

使用说明。借助此协议,客户端可以监视其有权使用的视图树的更改。例如,如果客户端拥有视图 A,则 A 充当 A 的子树(即“根视图”)的上下文视图,其中 A 是视图 B 的父视图,而视图 B 是视图 C 的父视图。然后,客户端可以观察 A、B 和 C 这三个位置的关键生命周期事件,例如新连接的视图、视图位置和大小的变化等。这样,客户端就可以以可靠且符合人体工程学的方式控制对视图树更改的操作。例如,客户端可以等待后代视图 C 建立连接,然后再请求将焦点转移到 C。

配置:上下文视图在此协议之外确定。

频率:客户端可以每帧接收一个或多个快照。客户端不应“对快照进行计数”,因为每帧的快照计数可能是不确定的。相反,客户端应查找快照状态的特定条件。

颁发:如果上下文视图与屏幕断开连接,系统不会代表上下文视图发出任何帧,Watch() 调用将静默地运行。

生命周期:服务器端点在上下文视图终止时关闭。

观看

一种获取特定视图的视图树快照的方法。

此调用表示为“挂起 get”模式:客户端请求一组最近的快照,并通过回调接收这些快照。这种基于拉取的方法可确保客户端按自己的节奏使用事件;事件不会无限的方式堵塞通道。

错误处理。如果未设置 Error,则客户端可能会假定响应包含在其周期内包含完整信息的更新。

流控制。调用方一次最多只能有一个进行中的 |Watch| 调用;并发调用 |Watch| 是一个逻辑错误。不合规会导致频道关闭。

客户节奏。服务器将尽可能无损、尽最大努力将快照发送给调用方,但调用方必须分配足够的时间来跟上新的快照。

请求

<EMPTY>

响应

名称类型
payload WatchResponse

结构

AlignedExtent

fuchsia.ui.observation.geometry/watcher.fidl 中定义

视图的边界框,以视图自己的坐标系描述。具体而言,|AlignedExtent| 用于描述视图边界框的最小和最大点,该边界框是矩形且与轴对齐。

注意:如需在另一个视图的坐标系中描述某个视图的边界框,请参阅 |RotatableExtent|。

原点为最小值。大小为:(abs(max.x - min.x), abs(max.y - min.y))。

字段类型说明默认
min fuchsia.math/PointF

视图边界框的最小位置。

无默认值
max fuchsia.math/PointF

视图边界框的最大位置。

无默认值

布局

fuchsia.ui.observation.geometry/watcher.fidl 中定义

视图的几何图形数据。

请注意,这些值是服务器端值,并且某些图形 API 在这些值“生效”前后无法保证与界面客户端之间的一致性保证。也就是说,可能需要直接查询界面客户端,以了解其当前使用的值。不过,界面客户端应在几帧内“立即”使用这些值。

字段类型说明默认
extent AlignedExtent

视图边界框的最小和最大点(在该视图的坐标系中)。

无默认值
pixel_scale PixelScale

从物理像素(屏幕)到逻辑像素(视图坐标系)的转换比率。

无默认值
inset fuchsia.math/InsetF

视图边界框的偏移量数据(在该视图的坐标系中)。

无默认值

RotatableExtent

fuchsia.ui.observation.geometry/watcher.fidl 中定义

视图边界框,用另一个视图的坐标系描述。具体而言,|RotatableExtent| 描述了视图边界框的原点、大小和关于原点的旋转角度。

注意:如需在视图自身坐标系中描述视图的边界框,请参阅 |AlignedExtent|。

我们使用“V”表示正在描述的视图,使用“W”表示正在描述 V 的视图。

请注意,虽然 |angle| 可以任意设置,但典型用法是与轴对齐。可按顺时针顺序确定 V 的边界框 (, . . . . . , . . o , . . o , . . o , . o , . o , . o , . o , . o , . o , . o , . o , . o , . o , . o , . o , . o , . o , .

字段类型说明默认
origin fuchsia.math/PointF

V 边界框的起点(采用 W 坐标系)。

无默认值
width float32

V 的边界框的宽度(沿 V 的 x 轴增加的方向),在 W 的坐标系中。

无默认值
height float32

V 的边界框的高度(沿 V 的 y 轴增加的方向),在 W 的坐标系中。

无默认值
angle_degrees float32

围绕原点顺时针旋转的角度(以度为单位)。

无默认值

表格

ViewDescriptor

fuchsia.ui.observation.geometry/watcher.fidl 中定义

特定视图的数据:标识符、位置和子级。

序数字段类型说明
view_ref_koid zx/Koid

此视图的 fuchsia.ui.views.ViewRef koid。

layout Layout

该视图的原点、逻辑大小、像素比例和边衬区数据(采用视图自身坐标系)。

限制。服务器和客户端之间的数据一致性取决于特定的图形 API。一些 API 提供弱一致性,在这种情况下,服务器端数据(此类数据)和客户端数据(在视图的界面客户端中)可以在一段时间内不同的。

extent_in_context RotatableExtent

该视图在上下文视图坐标系中的范围。它不描述子视图的逻辑大小。

此属性描述此视图在上下文视图中的“标准答案”位置,而不考虑视图树深度或中间视图的特定布局状态。

限制。它不说明视图是否“可见”(例如,视图是应用了不透明度,还是未被其他视图遮挡),也无法说明视图是否“可命中”(例如,视图是否完全放置在每个祖先视图的边界框内)。

extent_in_parent RotatableExtent

父视图坐标系中占用的空间。它不描述子视图的逻辑大小。

children vector<uint32>[300]

子视图的列表,按照图形 API 已知的顺序排列。

此矢量中的每个整数都是指父级在 |views| 或 |incomplete| 矢量中的位置。

每个子视图的身份、位置和尺寸。位置和大小由子视图在父视图坐标系中的范围描述。

视图树拓扑是可靠的。放置在此处的子视图相当于父视图收到了“子视图已连接”信号。

限制。子级视图边界通过父视图的坐标系进行描述,这会受到弱一致性(具体取决于图形 API)。也就是说,当父视图的大小或指标发生变化时,上下文视图可能会观察到“跳跃”,因为父视图会纳入这些数据。在这种情况下,系统会发出新的 ViewTreeSnapshot 来说明相对于上下文视图的位置变化。

ViewTreeSnapshot

fuchsia.ui.observation.geometry/watcher.fidl 中定义

上下文视图及其后代视图(如果有)的说明。

序数字段类型说明
time zx/Time

快照的截取时间。时基是单调时间。

views vector<ViewDescriptor>[300]

上下文视图(位于元素 0 处)及其后代视图的完整列表。

如果超出 MAX_VIEW_COUNT,则不会设置此字段,并且 Error 中会报告错误。

WatchResponse

fuchsia.ui.observation.geometry/watcher.fidl 中定义

fuchsia.ui.observation.geometry.ViewTreeWatcher.Watch 的响应。

序数字段类型说明
epoch_end zx/Time

发送响应的时间。时基是单调时间。

updates vector<ViewTreeSnapshot>[200]

特定视图的最近更新列表。

error Error

仅在检测到错误情况时设置。如果未设置,客户端可能会假定更新在其周期内具有完整信息。

BITS

柔性错误

类型:uint32

fuchsia.ui.observation.启动几何/watcher.fidl 中定义

名称说明
1

如果在 WatchResponse.updates 中附加 ViewTreeSnapshot 会超出 FIDL 通道的限制,请将此属性设为 true。该快照以及较早的快照都会被丢弃。

2

如果在 WatchResponse.updates 中附加 ViewTreeSnapshot 会超过 BUFFER_SIZE,则设为 true。该快照以及较早的快照都会被丢弃。

4

ViewTreeSnapshot 中的 views 大小超过 MAX_VIEW_COUNT 时,设置为 true。我们使用未设置的 views 字段在 ViewTreeSnapshot 中表示这种情况。

常量

名称类型说明
BUFFER_SIZE 200 uint32

客户端可以在 Watch 调用的响应中收到的 ViewTreeSnapshot 数量上限。当 Watch 调用的响应大小超过 FIDL 通道的限制时,ViewTreeSnapshot 的数量可以小于 BUFFER_SIZE

由于 FIDL 通道的大小限制,因此 Watch 调用的响应中可包含的 ViewTreeSnapshot 数量存在限制。通过确定当 MAX_VIEW_COUNT 为 1 时,Watch 调用的响应中可以包含的 ViewTreeSnapshot 数量上限计算得出。

注意:修改 ViewTreeSnapshotViewDescriptor 时必须调整此值。

MAX_VIEW_COUNT 300 uint32

客户端可以在 ViewTreeSnapshot 中的 ViewDescriptor 数量上限。

由于 FIDL 通道的大小限制,ViewTreeSnapshot 中可包含的 ViewDescriptor 的数量是有限制的。此限制的计算方法是找出当 BUFFER_SIZE 为 1 时,ViewTreeSnapshot 中可包含的 ViewDescriptor 数上限。

注意:修改 ViewDescriptor 时必须调整此值。

别名

名称说明
PixelScale array[2]

(屏幕的)物理像素与(视图的坐标系)的逻辑像素的比率。

  • 这些值将按 (x, y) 顺序排列。