fuchsia.ui.composition

添加次数:7

协议

分配器

fuchsia.ui.composition/allocator.fidl 中定义

RegisterBufferCollection

BufferCollection 是由 Sysmem 创建并由多个参与者共享的一组 VMO,其中一个是 Flatland Renderer。某些内容(如图片)将 BufferCollection 用作其后备内存。

如需了解每个参数,请参阅 RegisterBufferCollectionArgs

请求

名称类型
args RegisterBufferCollectionArgs

响应

名称类型
payload Allocator_RegisterBufferCollection_Result

ChildViewWatcher

fuchsia.ui.composition/flatland.fidl 中定义

提供关于特定子 View 的信息的协议,该子 View 附加到父客户端所拥有的视口;与此协议的连接会在 CreateViewport 中稳定。由于 Flatland 实例可能包含任意数量的视口,其中每个视口不一定都附加到转换,因此客户端可以保持与相同数量的 ChildViewWatcher 实例的连接。

只要相应的子 View 存在,每个 ChildViewWatcher 实例就将保持连接状态;如果子项的 ViewCreationToken 被丢弃而没有使用它创建 View,则连接也会关闭。

GetStatus

接收 View 状态的挂起 get。这会向父级提供信息,例如子级是否成功通过此 View 呈现内容。

只有在 ChildViewStatus 与之前返回的 ChildViewStatus 不同时,才会触发此挂起 get 方法。这可能会立即发生,即使视口的创建者在调用 CreateViewport() 后尚未调用 Present() 也是如此。这样一来,父级就能够在父级修改自己的本地场景图以纳入子内容之前,知道子级的内容已可供显示。

在之前的调用仍处于待处理状态时,调用 GetStatus 是无效的。否则会导致此频道和分发 ChildViewWatcher 的 Flatland 频道关闭。

请求

<EMPTY>

响应

名称类型
status ChildViewStatus

GetViewRef

挂起获取子视图的 ViewRef。这仅会在 View 引用与之前返回的 View 引用不同时触发。注意:目前,View 引用在首次收到后不会发生更改,但当 API 发生更改以允许重新关联视图时,此操作会更改。

除非 View 树中包含 View 树,否则不会返回 ViewRef,换言之,当存在一系列祖先转换链一直返回到场景图的根(即显示屏)时。

在之前的调用仍处于待处理状态时,调用 GetViewRef 是无效的。否则会导致此频道和分发 ChildViewWatcher 的 Flatland 频道关闭。

如果视图是使用 CreateView 创建的,则 GetViewRef 调用会挂起;但如果视图是使用 CreateView2 创建的,则返回该视图。这是因为 CreateView 不会为该视图创建 ViewRef。

请求

<EMPTY>

响应

名称类型
view_ref fuchsia.ui.views/ViewRef

平地

fuchsia.ui.composition/flatland.fidl 中定义

每个 Flatland 实例都包含一个图表,该图形包含一组对象以及这些对象之间的关系。客户端可以指定这些对象的子集(具体来说,就是从根转换开始的有向无环图),以作为内容呈现到某种输出(通常为显示屏)中。

Flatland 图既是分层图表,又是分布式图表。来自不同 Flatland 实例的图表可以连接在一起,从而针对特定输出编写内容时涉及到多个进程。

此协议中的所有函数均为前馈。它们所表示的操作在调用 Present 之前不会完全执行。

AddChild

将子转换添加到父转换。新的子转换以及附加到它或其子项的所有内容,都将渲染在父项的 Content 以及之前添加的任何子项之上。

请求

名称类型
parent_transform_id TransformId
child_transform_id TransformId

清除

此函数将重置此接口上的所有状态。这包括销毁所有现有的 View 和视口,而不将关联的令牌返回给调用方。

请求

<EMPTY>

CreateFilledRect

创建一个纯色矩形。默认情况下,填充矩形没有定义的颜色或大小。必须先调用 |SetSolidFill| 来指定颜色和大小,然后才能使用填充的矩形进行渲染。否则会导致

请求

名称类型
rect_id ContentId

CreateImage

图像是由 BufferCollection 中的特定 VMO 支持的位图。

要创建映像,需要向分配器注册已分配的 BufferCollection。除非指定 BufferCollection 的所有客户端都设置其限制条件,否则此函数将失败。

Image 必须引用有效的 VMO 索引,并且其 ImageProperties 必须在后备 BufferCollection 指定的约束范围内(即有效范围内的宽度和高度等)。

零不是有效的图片 ID。所有其他值均有效(假设这些值尚未用于其他内容)(如需了解详情,请参阅 ReleaseImage)。

请求

名称类型
image_id ContentId
import_token BufferCollectionImportToken
vmo_index uint32
properties ImageProperties

CreateTransform

创建一个新的转换节点。转换是 Flatland 图的分层部分。它们可以有子项,并且可以引用内容。由 Transform 及其后代表示的子图可以渲染到显示屏。

只要转换是未发布的转换或根转换的子级,转换就会保持活跃状态,即使它们已发布也是如此。

每个转换都可以有一段附加的内容。常见内容类型包括位图、异步图片流以及指向其他 Flatland 实例中托管的视图的视口。

转换具有属性。子转换会继承其父项的组合属性。附加到 Transform 的内容也会受该 Transform 的属性的影响。

渲染 Transform 的子图时,Content 将背对前渲染,从根转换上的 Content 开始,并按照子项的添加顺序以递归方式继续经历其所有子 Transform。如需了解详情,请参阅 AddChild

零不是有效的转换 ID。所有其他值均有效(假设它们尚未使用)(如需了解详情,请参阅 ReleaseTransform)。

请求

名称类型
transform_id TransformId

CreateView

两个 Flatland 实例可以通过父级-子级关系连接。父端点保存在视口中,子端点保存在视图中。创建视口的父级 Flatland 实例可以控制如何将子级的 View 集成到其自己的 View 中。

父子连接的生命周期从通道对象的两个端点开始:ViewportCreationToken 和 ViewCreationToken。带外协议会将 ViewportCreationToken 传递给调用 CreateViewport 的父级,并将 ViewCreationToken 传递给调用 CreateView 的子级。

只有连接到此 Flatland 实例中的根转换的节点才会渲染到父级的视口中。

再次调用 CreateView 将断开根转换与现有父级的视口的连接,并将其附加到新父级的视口。换言之,每个 View 只能有一个父视图。

此函数已加入队列,这意味着在调用 Present 之前,根转换不会附加到父视口。不过,客户端会通过其 ParentViewportWatcher(例如LayoutInfo)。SetRootTransform这样,客户端便可以在调用 Present 之前等待其父项提供的布局信息。

ParentViewportWatcher 上出现的任何非法操作都将导致 ParentViewportWatcher 频道和此 Flatland 频道被关闭。

生命周期备注。ParentViewportWatcher 频道的生命周期由对等 ViewportCreationToken 约束。当 ViewportCreationToken 终止时,此 ParentViewportWatcher 渠道就会销毁。

使用 CreateView 创建的 View 的视图和子图将不会在 ViewTree 中表示,因此无法参与任何依赖于 ViewTree 的互动,例如触摸、鼠标或焦点。Flatland 协议无法让使用 CreateView 创建的 View 的子图中的 View 知道它们已从 ViewTree 中排除。

请求

名称类型
token fuchsia.ui.views/ViewCreationToken
parent_viewport_watcher server_end<ParentViewportWatcher>

CreateView2

CreateView 相同,不过它允许关联 View 身份 (ViewRef) 和视图绑定协议。

请求

名称类型
token fuchsia.ui.views/ViewCreationToken
view_identity fuchsia.ui.views/ViewIdentityOnCreation
protocols ViewBoundProtocols
parent_viewport_watcher server_end<ParentViewportWatcher>

CreateViewport

视口和视图对共同表示两个 Flatland 实例之间的连接。视口在父项中创建,而视图在子项中创建。父级可以控制如何将子级的 View 集成到自己的 View 中。

对 ChildViewWatcher 的任何非法操作都将导致 ChildViewWatcher 频道和此 Flatland 频道关闭。

必须为 ViewportProperties 设置 logical_size。这是将决定子项布局的初始尺寸。logical_size 也用作默认内容大小,但对 logical_size 的后续更改不会影响内容大小。

ViewportProperties 可能未设置边衬区字段。在这种情况下,系统将使用默认值 (0, 0, 0, 0)。

逻辑尺寸必须包含正的 X 和 Y 分量。

零不是有效的 ContentId。所有其他值均有效,前提是这些值尚未用于其他内容(如需了解详情,请参阅 ReleaseViewport)。

生命周期备注。ChildViewWatcher 频道的生命周期由对等 ViewCreationToken 约束。当 ViewCreationToken 终止时,此 ChildViewWatcher 渠道会被销毁。

请求

名称类型
viewport_id ContentId
token fuchsia.ui.views/ViewportCreationToken
properties ViewportProperties
child_view_watcher server_end<ChildViewWatcher>

OnError

如果 Present 后出现错误,则会触发 OnError 事件,其中包含相关信息。

FlatlandErrors 将关闭与客户端的连接。

  • 响应 error 执行一些无效操作后客户端可能会收到的错误。

响应

名称类型
error FlatlandError

OnFramePresented

每当同时呈现一组(一个或多个)Present 时,该事件就会被触发,因此不再处于正在播放状态。

此事件表示在“Present”生效之前加入队列的命令在场景图中生效,并且全局可见。

客户端无需针对基本帧调度为此事件实现处理程序,除非它们明确希望获得关于上一帧呈现的反馈。所有未来帧信息都在 OnNextFrameBegin 事件中提供。

TODO(https://fxbug.dev/42141795):从此事件中移除 num_presents_allowed

响应

名称类型
frame_presented_info fuchsia.scenic.scheduling/FramePresentedInfo

OnNextFrameBegin

当客户端应该预期资源争用最少时会触发此事件。客户端可以根据此事件的时间开始渲染工作,并根据返回的信息为调度决策提供依据。

重要的是,只有在客户端有一个或多个现有赠金(包括此事件中返回的内容)时,才会触发 OnNextFrameBegin。因此,此事件每次触发时都可以安全地显示一次。

  • 响应 values 客户端生成下一帧所需的信息表。如需了解详情,请参阅 OnNextFrameBeginValues

响应

名称类型
values OnNextFrameBeginValues

演示

完成所有前馈操作。

如果执行操作产生错误(例如,CreateTransform(0) 时,会发出 OnError 事件。产生错误的操作将被忽略,并且通道会被关闭。

如果执行成功完成,OnNextFrameBegin 将发出 NO_ERROR 以及其他有效字段。

只有当客户端具有非零数量的当前赠金(由服务器跟踪)时,才能调用 Present。服务器可能会在触发 OnNextFrameBegin 事件后递增赠金数量,该事件会在客户端收到额外的当前赠金时通知客户端。每次 Present 调用都会使用一份当前功劳,并将服务器计数减 1。如果客户端在没有当前赠金的情况下调用 Present,服务器将返回 NO_PRESENTS_REMAINING 错误。

客户端应假设在接收任何 OnNextFrameBegin 事件之前,它们已有一次功劳。

每个 Present 调用都会生成一个 OnNextFrameBegin 事件和一个 OnFramePresented 事件(通常按此顺序)。

Present 刷新的命令显示出来时,会触发 OnFramePresented 事件。此事件包含与包含属于该帧的内容的所有 Present 相关的信息。

如需详细了解传入的参数及其角色,请参阅上面的 fuchsia.ui.composition/PresentArgs 文档。

请求

名称类型
args PresentArgs

ReleaseFilledRect

当不再需要渲染时,自动对矩形进行垃圾回收。|rect_id| 必须已通过调用 |CreateFilledRect| 进行实例化。一旦释放,该 ID 会立即超出范围,可以再次使用。

请求

名称类型
rect_id ContentId

ReleaseImage

一旦发布的图片不再需要渲染,系统就会对其进行垃圾回收。对于图片,这意味着图片不再附加到任何转换,并且引用该图片的所有待处理渲染都已完成。

使用 SetContent(transform_id, 0) 清理对已发布图片的引用。

释放后,该 ID 会立即超出未来函数调用的范围,并可在创建新图片时重复使用。

使用已释放的 ID 调用函数是错误的(除非已重复使用该 ID 来构建新图片)。

请求

名称类型
image_id ContentId

ReleaseTransform

对于渲染不再需要已释放的转换,系统会对其进行垃圾回收。对于转换,这意味着不存在从任何未发布的转换到新发布的转换的路径。

释放后,该 ID 会立即超出未来函数调用的范围,并可在创建新转换时重复使用。

使用已释放的 ID 调用函数是错误的(除非已重复使用该 ID 来构建新转换)。

请求

名称类型
transform_id TransformId

ReleaseView

请求

<EMPTY>

ReleaseViewport

从场景中释放视口,即使视口仍连接到转换也是如此。与其他资源不同,视口是系统下一次 Present 期间由系统进行的垃圾回收,因为已移除的视口保证不提供任何可渲染内容。

使用 SetContent(transform_id, 0) 清理对已发布视口的引用。

尽管有返回值类型,但此函数仍像 CreateView 一样前馈,并且需要调用 Present 才能执行。ViewportCreationToken 将在所呈现的操作执行完毕后返回。

请求

名称类型
viewport_id ContentId

响应

名称类型
token fuchsia.ui.views/ViewportCreationToken

RemoveChild

从父转换中移除子转换。

请求

名称类型
parent_transform_id TransformId
child_transform_id TransformId

SetClipBoundary

设置边界(以转换的局部坐标空间表示),用于限制附加到此转换的内容可渲染的区域。如果内容的区域超出裁剪边界,则不会渲染边界之外的区域。这些边界也对此转换节点的所有子节点有效,其中包括嵌套的 Flatland 实例及其节点层次结构。如果子转换尝试设置的裁剪边界大于其父项的裁剪边界,则它将被裁剪到父转换的裁剪边界。默认状态为未裁剪转换,这意味着转换在其渲染区域不会放置任何边界。片段宽度/高度必须为正数。负值会导致错误。 向 |rect| 参数传入空白框可移除裁剪边界。

请求

名称类型
transform_id TransformId
rect fuchsia.math/Rect?

SetContent

为某个转换设置一段内容后,只要该 Transform 在根 Transform 中处于可见状态,该 Content 便可在渲染树中可见。Content 将在附加到 Transform 后代的任何内容之前(因此是“后面”)渲染。

由于每个 Transform 最多只能包含一段 Content,因此对已包含 Content 的转换调用此函数会替换该 Content。

一个内容可以在多个转换上设置。

使用内容 ID 0 调用此函数将移除当前在转换中的所有内容。

请求

名称类型
transform_id TransformId
content_id ContentId

SetDebugName

设置当前客户端的调试名称,Flatland 可以使用它作为前缀输出,以帮助客户端区分它们是什么。name 可以是任意字符串,但当前进程名称(请参阅 fsl::GetCurrentProcessName())是一个很好的默认值。

请求

名称类型
name string[64]

SetHitRegions

设置转换的交互区域。默认情况下,内容不是互动的;必须设置点击区域,以便用户在 View 中与内容互动。由于命中区域在 Flatland 协议中进行了描述,因此 Flatland 实例可以同步内容和命中区域。

每个命中区域都放置在所属转换的坐标空间中,并且不一定与不同类型的命中测试交互,具体取决于其 HitTestInteraction 类型。当存在与命中测试交织的多个命中区域时,下面给出的优先级规则将决定哪个命中区域与命中测试进行了互动。只有以传递方式连接到根转换的转换才能使其命中区域与命中测试进行交互。

调用此函数将替换之前为此转换设置的所有值。要将转换重置为“无命中测试”:请使用 SetHitRegions 发送一个空矢量。

请注意,根转换会获取由 Flatland 安装的默认命中区域。如需了解详情,请参阅 SetRootTransform 文档。

优先规则在转换中,如果多个命中区域发生重叠,则点击测试会检查每个相交的命中区域是否存在可能的互动。因此,对于常规点击测试 R 和无障碍功能点击测试 A,其中 R 和 A 在同一 Transform 上与两个命中区域 D(DEFAULT)和 S (SEMANTICALLY_INVISIBLE) 相交,(1) R 与 D 和 S 交互,(2) A 仅与 D 交互。通常,单个转换中重叠的命中区域可能会导致混淆行为。

在 View 中,对于给定的点击测试,最靠前的 Transform 的命中区域优先于后面的命中区域。这遵循转换的预期反向“渲染顺序”(如 CreateTransform 中所述),用户希望与可见或最靠前的内容进行交互。

在 Flatland 实例中,对于给定的命中测试,最靠前的 Transform 的命中区域优先于后面的实例。这遵循了视图的预期反向“渲染顺序”,即用户希望与可见或最靠前的视图进行互动。例如,如果子 View 拥有在父 View 上呈现的内容,则用户希望与子 View 的内容进行互动。

请求

名称类型
transform_id TransformId
regions vector<HitRegion>[64]

SetImageBlendingFunction

确定在渲染由 |image_id| 指定的内容时要使用的混合函数。|image_id| 必须是通过调用 |CreateImage| 或 |CreateFilledRect| 与转换关联的有效 ContentId。如需详细了解可用的不同混合函数,请参阅 BlendMode 枚举。如果未调用此函数,则默认混合模式为 BlendMode::SRC。

请求

名称类型
image_id ContentId
blend_mode BlendMode

SetImageDestinationSize

Image 的内容大小是该图片所占的父视图逻辑坐标空间中矩形的大小。该操作与附加的转换的全局转换相结合,可确定内容在屏幕上渲染的位置的大小和位置。

如果未调用此方法,则默认图片目标大小为通过 CreateImage 设置的 ImageProperties 设置的宽度和高度。如果对附加的转换或其父级使用 SetScale,则会受到扩缩的影响,目标大小将受到扩缩的影响。

请求

名称类型
image_id ContentId
size fuchsia.math/SizeU

SetImageFlip

设置要应用于平面图像的图像翻转。此调用必须在 |CreateImage| 调用成功之后执行。如果提供的 |image_id| 无效,频道将因 FlatlandError::BAD_OPERATION 而被关闭。此翻转将在父转换方向之前应用于图片。如果未调用此函数,则默认翻转值为 ImageFlip::NONE。

添加数量:10

请求

名称类型
image_id ContentId
flip ImageFlip

SetImageOpacity

设置要应用于平面图像的线性空间中的不透明度。不透明度值必须在 [0.0, 1.0] 范围内。

请求

名称类型
image_id ContentId
val float32

SetImageSampleRegion

此函数用于确定 Flatland 在渲染时将使用的图片区域(在纹素空间中)。要采样的图片由 image_id 引用,示例区域由 rect 指定,该矩形本身由原点 (x,y) 以及以非规范化坐标表示的宽度和高度。对非图片内容调用此函数或者对图片纹素空间之外的区域进行采样是非法的。换句话说,rect 指定的区域不得超出 (0, image_width) 和 (0, image_height) 范围。如果 (rect.x + rect.width > image_width) 或 (rect.y + rect.height > image_height),或有任一值为负值,都会导致错误。

如果未调用此方法,默认示例区域为原点为 (0, 0) 且宽度和高度在 CreateImage 中的 ImageProperties 设置的矩形。

请求

名称类型
image_id ContentId
rect fuchsia.math/RectF

SetInfiniteHitRegion

SetHitRegions 相同,但与 transform_id 关联的命中区域覆盖无限区域。命中区域对于转换的平移、缩放和方向保持不变。

无限命中区域在范围上仍会受到视图的裁剪边界的限制,就像有限命中区域一样。

调用此函数将替换之前为此转换设置的所有值。要将转换重置为“无命中测试”:请使用 SetHitRegions 发送一个空矢量。

添加数量:10

请求

名称类型
transform_id TransformId
hit_test HitTestInteraction

SetOpacity

设置线性空间中要应用于转换及其后代(包括其他转换和内容)的不透明度。不透明度值必须在 [0.0, 1.0] 的范围内,其中 0.0 表示完全透明,1.0 表示完全不透明。尝试使用超出该范围的值调用此函数将导致错误。将转换的不透明度值乘以其父转换的不透明度值。此效果与组不透明度不同。使用组不透明度时,首先将子节点一起渲染,然后应用父节点的不透明度作为后效应。在此例中,不透明度分别应用于每个子视图。这可能会导致效果大不相同。

请求

名称类型
transform_id TransformId
value float32

SetOrientation

设置转换的方向。几何属性应用的顺序在 SetTranslation 文档中说明了。在 Flatland 中,+X 轴向右,+Y 轴向下。不存在 Z 轴的概念。CCW 根据用户的 POV 进行定义,就好像屏幕上显示了一个拟态时钟。

请求

名称类型
transform_id TransformId
orientation Orientation

SetRootTransform

设置图的根转换。

根转换定义的子图及其子图将在已连接父级的视口中渲染为 View(请参阅 CreateView)。此图中根转换的所有父级都将被忽略。

Root 转换以及 Root 转换的所有子项在被释放后将保持活跃状态(如需了解详情,请参阅 ReleaseTransform)。

根只有一个。由于 0 不是有效的转换 ID(请参阅 CreateTransform),因此调用 SetRootTransform(0) 会清除当前根,从而销毁之前释放且未被新根引用的所有对象。

请注意,每个 View 都有一个与其逻辑大小相等的裁剪边界。裁剪边界之外的任何内容都不会进行渲染。因此,根转换具有 (0, 0) 到 (logical_size.width, logical_size.height) 的坐标空间,其中 (0, 0) 是左上角。

设置根转换会在根转换上安装全屏命中区域。如果客户端不希望用户能够与根转换的内容互动,则可以移除此命中区域。如需详细了解命中区域,请参阅 SetHitRegions 文档。

默认命中区域规则

默认命中区域遵循以下规则:

  • 调用 SetRootTransform(T) 后,T 会收到覆盖整个视图的最大命中区域。
  • 如果在 T 上调用 SetHitRegions(在 SetRootTransform(T) 之前或之后),则没有默认命中区域处于活跃状态,系统会使用客户端指定的命中区域。
  • 如果某个转换不再是根转换,即SetRootTransform(U) 后,原始转换不再具有其默认命中区域。
  • 客户端可以通过使用适当的向量调用 SetHitRegions 来移除或修改根转换的命中区域,方法与重置任何其他转换的命中区域一样。

请求

名称类型
transform_id TransformId

SetScale

设置转换的缩放比例。上面介绍了几何属性应用的顺序。VecF |scale| 中的 (x,y) 值分别指 x 轴(宽度)和 y 轴(高度)中的缩放比例。缩放值必须是常规的 32 位浮点值:https://en.wikipedia.org/wiki/Normal_number_%28computing%29

请求

名称类型
transform_id TransformId
scale fuchsia.math/VecF

SetSolidFill

定义填充矩形的颜色和大小。|rect_id| 必须引用通过调用 CreateFilledRect 创建的内容。颜色不是预乘的。颜色值必须在 [0,1] 范围内(含 [0, 1] 和常规 32 位浮点值):https://en.wikipedia.org/wiki/Normal_number_%28computing%29。不符合这些规范的值将导致通道关闭。矩形的左上角将在其转换的坐标空间内处于 (0, 0) 位置。因此,其右下角为 (size.width,size.height)。

请求

名称类型
rect_id ContentId
color ColorRgba
size fuchsia.math/SizeU

SetTranslation

所有 Transform 对象都支持所有属性。

几何图形属性按以下顺序应用:

  1. 缩放(相对于父转换的坐标空间)
  2. 方向(相对于父转换的坐标空间)
  3. 平移(相对于父转换的坐标空间,不受应用于当前转换的缩放影响)。
  4. 裁剪(相对于当前转换的坐标空间)

上述每个属性的影响都是累积的。这意味着,将根据上至根转换的几何属性链计算转换在视图空间中的位置及其裁剪边界。

例如,在以下嵌套层次结构中:[Root-Transform -> Transform1 -> Transform2 -> CurrentTransform] 如果 Transform1 由 [2,0] 转换,而 Transform2 由 [0,1] 平移,则 CurrentTransform 的视图空间位置将为 [2,1]。

设置转换的转换。上面介绍了几何属性应用的顺序。

请求

名称类型
transform_id TransformId
translation fuchsia.math/Vec

SetViewportProperties

转换通常足以改变内容呈现方式。不过,视口具有一些不属于转换层次结构的特殊属性。您可以使用此函数设置这些属性。

请求

名称类型
viewport_id ContentId
properties ViewportProperties

FlatlandDisplay

fuchsia.ui.composition/flatland.fidl 中定义

此 API 连接到单例“主显示屏”,并允许在下方附加 Flatland 内容树。一次只能有一个 FlatlandDisplay 客户端连接。

SetContent

请求

名称类型
token fuchsia.ui.views/ViewportCreationToken
child_view_watcher server_end<ChildViewWatcher>

SetDevicePixelRatio

设置应该用于附加到此屏幕的 Flatland 内容树的屏幕物理像素与设备无关像素的比率。如需了解详情,请参阅 LayoutInfo.device_pixel_ratio

默认值为 (1.0, 1.0)。有效值为 1.0 及以上。

添加次数:9

请求

名称类型
device_pixel_ratio fuchsia.math/VecF

ParentViewportWatcher

fuchsia.ui.composition/flatland.fidl 中定义

一种协议,提供有关附加到 Flatland 实例的唯一视图的父级视口的信息。虽然 Flatland 实例最多可以有一个视图,但在将实例的视图替换为其他视图(例如通过 CreateView)时,可以在短暂过渡期间使用多个 ParentViewportWatcher。在此期间,系统可能会复制某些更新,并将其发送到每个 ParentViewportWatcher 连接。

只要相应的父级视口存在,ParentViewportWatcher 就会保持连接状态;如果父级的 ViewportCreationToken 被丢弃而没有使用它创建视口,则连接也会关闭。

GetLayout

用于接收布局信息的挂起获取。客户端可能会在 ParentViewportWatcher 操作出现之前收到布局信息。这样,子项便可以在首次调用 Present 之前布局其内容。在两个 ParentViewportWatcher 频道同时存在的过渡情况下,两个协议实例将接收不同的布局信息。

仅当 LayoutInfo 与之前返回的 LayoutInfo 不同时,才会触发此挂起 get 操作。请注意,由于 LayoutInfo 是一个表,因此可能只有部分字段发生了更改。

在之前的调用仍处于待处理状态时,调用 GetLayout 是无效的。否则会导致此频道和分发 ParentViewportWatcher 的 Flatland 频道关闭。

请求

<EMPTY>

响应

名称类型
info LayoutInfo

GetStatus

用于接收父级视口状态的挂起获取。这可以为子项提供全局连接信息。

只有在 ParentViewportStatus 与之前返回的 ParentViewportStatus 不同时,才会触发此挂起 get 方法。

在之前的调用仍处于待处理状态时,调用 GetStatus 是无效的。否则会导致此频道和分发 ParentViewportWatcher 的 Flatland 频道关闭。

请求

<EMPTY>

响应

名称类型
status ParentViewportStatus

ScreenCapture

fuchsia.ui.composition/screen_capture.fidl 中定义

此协议提供了一个供客户端使用的低级 ScreenCapture API。 ScreenCapture 客户端应熟悉 fuchsia.sysmem/BufferCollectionfuchsia.ui.composition/Allocator 协议,因为这些协议是创建 ScreenCapture 使用的 BufferCollection 和图片所必需的。

配置

客户端应首先使用分配器协议来注册 BufferCollection。除非 BufferCollection 的所有客户端均已设置其约束条件,否则此函数将失败并显示 BAD_OPERATION。

之后,客户端应使用此方法创建和配置最终渲染的图片。集合中从 0 到 (buffer_count-1) 的所有缓冲区都可用于屏幕截取。

客户端负责确定屏幕的旋转角度,并应用正确的旋转。例如,如果显示屏顺时针安装 90 度(“查看显示屏时“顶部”位于右侧),则客户端应指定 270 度旋转来考虑这一点。

同样,客户端也负责指定足够大的缓冲区,以容纳旋转的图片。如果缓冲区过小,系统会尽最大努力渲染图像。

最后,客户端使用 GetNextFrame 请求服务器将当前屏幕渲染到共享缓冲区。

如果客户端希望更改任何配置设置,可以使用新的 BufferCollectionImportToken 再次调用 Configure。在这种情况下,系统会释放上一次调用 Configure 后产生的所有缓冲区。

请求

名称类型
payload ScreenCaptureConfig

响应

名称类型
payload ScreenCapture_Configure_Result

GetNextFrame

成功调用 Configure 后,客户端可以调用 GetNextFrame。系统会使用最新的帧填充缓冲区。

客户端应等待其传递的 zx::event 以完成屏幕截图。我们无法保证在此函数返回时屏幕截图就已完成。

请求的图像将位于客户端在 VMO 中位于缓冲区 ID 指定的索引处设置的 BufferCollection 中。

使用 ScreenCapture 提供数据流时,客户端调用 GetNextFrame 的速率将决定帧速率。

错误:BAD_OPERATION(如果未调用配置);如果必需参数不存在,则为 MISSING_ARGS;如果 BufferCollection 中的所有缓冲区都在使用中,则为 BUFFER_FULL。在这种情况下,必须先调用 ReleaseFrame,使缓冲区可用,然后才能成功调用此函数。

请求

名称类型
payload GetNextFrameArgs

响应

名称类型
payload ScreenCapture_GetNextFrame_Result

ReleaseFrame

客户端不再需要图片后,可以对缓冲区的 VMO 索引调用 ReleaseFrame,以便服务器将来可以重新使用该图片。

请求

名称类型
buffer_id uint32

响应

名称类型
payload ScreenCapture_ReleaseFrame_Result

屏幕截图

fuchsia.ui.composition/screenshot.fidl 中定义

收集显示屏的当前图形内容。

添加数量:12

步行

收集指定缓冲区 format 中屏幕的当前图形内容(采用 sRGB 颜色空间)。请注意,sRGB 颜色空间是非线性的,这意味着,如果单元测试使用非完全饱和的颜色执行像素相等性检查,则应转换为线性颜色空间。

如需了解详情,请参阅 https://fuchsia.dev/fuchsia-src/concepts/ui/scenic/color_spaces。

立即截取屏幕截图,其中填充了来自最近 VSYNC 的显示屏内容。

如果客户端在第一个 Take 调用返回之前第二次调用 Take,则服务器将以 ZX_ERR_SHOULD_WAIT 简介的方式关闭“屏幕截图”连接。

如果由于内部错误导致捕获失败,服务器将关闭包含 ZX_ERR_INTERNAL epitaph 的 Screenshot 连接。

请求

名称类型
payload ScreenshotTakeRequest

响应

名称类型
payload ScreenshotTakeResponse

TakeFile

收集指定缓冲区 format 中屏幕的当前图形内容(采用 sRGB 颜色空间)。请注意,sRGB 颜色空间是非线性的,这意味着,如果单元测试使用非完全饱和的颜色执行像素相等性检查,则应转换为线性颜色空间。

TODO(https://fxbug.dev/42065844):发布时链接到 fuchsia.dev 文档。

立即截取屏幕截图,其中填充了来自最近 VSYNC 的显示屏内容。

如果客户端在第一个 TakeFile 调用返回之前再次调用 TakeFile,服务器将以 ZX_ERR_SHOULD_WAIT 形式关闭屏幕截图连接。

如果由于内部错误导致捕获失败,服务器将关闭包含 ZX_ERR_INTERNAL epitaph 的 Screenshot 连接。

如果客户端位于主机上且不支持 VMO,则应使用此调用,就像 ffx 工具的情况一样。

请求

名称类型
payload ScreenshotTakeFileRequest

响应

名称类型
payload ScreenshotTakeFileResponse

结构

Allocator_RegisterBufferCollection_Response

fuchsia.ui.composition/allocator.fidl 中定义

<EMPTY>

BufferCollectionExportToken 资源

fuchsia.ui.composition/allocator.fidl 中定义

事件对的类型化封装容器,表示缓冲区集合的注册表端点。

字段类型说明默认
value handle<eventpair> 无默认取景方式

BufferCollectionImportToken 资源

fuchsia.ui.composition/allocator.fidl 中定义

事件对的类型化封装容器,表示缓冲区集合的图片导入端点。

字段类型说明默认
value handle<eventpair> 无默认取景方式

ColorRgba

fuchsia.ui.composition/flatland.fidl 中定义

表示具有 Alpha 通道的颜色。 值均为非固定值(即有效范围为 [0,1]),并且采用线性颜色空间。它们既未经过伽玛校正,也未经过预乘。

字段类型说明默认
red float32 无默认取景方式
green float32 无默认取景方式
blue float32 无默认取景方式
alpha float32 无默认取景方式

ContentId

fuchsia.ui.composition/flatland.fidl 中定义

用户定义的特定内容标识符。如需了解详情,请参阅内容创建函数(例如 CreateViewportCreateImage)。

字段类型说明默认
value uint64 无默认取景方式

HitRegion

fuchsia.ui.composition/flatland.fidl 中定义

视图的交互区域,位于特定转换的坐标空间中。

字段类型说明默认
region fuchsia.math/RectF

此命中区域的位置和大小(在拥有此命中区域的 Transform 的坐标空间中)。

无默认取景方式
hit_test HitTestInteraction

为此命中区域指定的互动行为。 要指定“完全无互动”,请从所属转换中移除此命中区域。

无默认取景方式

ScreenCapture_Configure_Response

fuchsia.ui.composition/screen_capture.fidl 中定义

<EMPTY>

ScreenCapture_ReleaseFrame_Response

fuchsia.ui.composition/screen_capture.fidl 中定义

<EMPTY>

TransformId

fuchsia.ui.composition/flatland.fidl 中定义

用户为特定转换定义的标识符。如需了解详情,请参阅 CreateTransformReleaseTransform

字段类型说明默认
value uint64 无默认取景方式

枚举

BlendMode 严格

类型:uint32

fuchsia.ui.composition/flatland.fidl 中定义

在确定如何在其他图像上合成图像时,可从中选择的一组可能的混合函数。

名称说明
1

表示源像素替换目标像素。换言之,无论设置何种 alpha 值,源像素都被视为不透明。

2

源像素在目标像素上绘制。显示的最终像素颜色的计算公式如下:C_src + (1.0 - alpha_src) * C_dst。

ChildViewStatus 严格

类型:uint32

fuchsia.ui.composition/flatland.fidl 中定义

名称说明
1

底层 Flatland 实例已连接其名为 Present 的 View,Present 调用的获取栅栏均已连接完毕,这表示它有一些内容已准备好显示,并且没有附加子场景,等待子场景实际在全局使用中显示。

FlatlandError 严格

类型:uint32

fuchsia.ui.composition/flatland.fidl 中定义

OnError 中返回的一组错误代码。除 NO_ERROR 以外的所有内容都会导致 Flatland 通道关闭。

名称说明
1

表示函数调用所使用的参数无效。

2

表示 additional_present_credits 字段未得到正确处理,且客户端排队的 Present 数超出允许的上限。

3

表示客户端覆盖了返回的协议中的挂起 get。

HitTestInteraction 灵活

类型:uint8

fuchsia.ui.composition/flatland.fidl 中定义

点击区域预计会实现的点击测试互动类型。

名称说明
0

自然的默认行为是,命中区域会与常规点击测试和无障碍点击测试进行交互。

1

某些用例要求命中区域与常规点击测试进行交互,但不与无障碍功能命中测试交互。这里的“semantics”是指无障碍功能的语义树数据,用于描述 View 中的界面元素。

ImageFlip 严格

类型:uint32

fuchsia.ui.composition/flatland.fidl 中定义

在确定应如何显示图片纹理时,可供选择的一组可能的图片翻转函数。

添加数量:10

名称说明
0
1

让 V 成为反射的纵轴,位置为 width/2。然后,每个像素的 x 坐标在 V 上反射。y 坐标保持不变。例如:|1234| |4321| |abcd| 将变为 |dcba|

2

将 H 设为反射的横轴,位置为高度/2。然后,每个像素的 y 坐标在 H 上反射。x 坐标保持不变。例如: |1234| |abcd| |abcd| 将变为 |1234|

屏幕方向:严格

类型:uint32

fuchsia.ui.composition/flatland.fidl 中定义

在 Flatland 中,+X 轴向右,+Y 轴向下。没有 Z 轴的概念。由于缺少 Z 轴,因此不存在与旋转相关的“用手”(右手或左手)的数学概念。因此,我们定义逆时针旋转的方式与在屏幕上显示拟态时钟的方式相同,即该时钟的手从观察者的视角沿着 CCW 运动。

名称说明
1
2
3
4

ParentViewportStatus 严格

类型:uint32

fuchsia.ui.composition/flatland.fidl 中定义

当 ParentViewportWatcher 主动连接到输出显示屏(直接或通过父级视口链连接)或未连接到输出显示屏时,系统会通知 ParentViewportWatcher。在将设备连接到显示屏之前,某些信息(例如像素比例)可能无法使用。

名称说明
1
2

RegisterBufferCollectionError 严格

类型:uint32

fuchsia.ui.composition/allocator.fidl 中定义

由 Allocator::RegisterBufferCollection() 返回的一组错误代码。

名称说明
1

RegisterBufferCollectionUsage 严格

类型:uint32

fuchsia.ui.composition/allocator.fidl 中定义

已注册的缓冲区收集的可能用途。

名称说明
0

“DEFAULT”表示指定的缓冲区集合将用于创建 Flatland 和 gfx 图像。

如需了解详情,请参阅 fuchsia.ui.composition/Flatland.CreateImage

1

SCREENSHOT 表示指定的缓冲区集合将用于截取屏幕截图。

轮替严格

类型:uint32

fuchsia.ui.composition/screen_capture.fidl 中定义

要应用于图片的旋转效果。

如果给定屏幕根据其 display_info 配置文件旋转了 270 度,然后应用等距和反向旋转 CW_270_DEGREES,则应取消屏幕旋转,从而获得正确呈现的屏幕截图。

客户端应根据其最终要使用的最终尺寸(即旋转后)来分配图片。这些值与 display_info 配置文件中的 widthheight 值相同。

名称说明
0
1
2
3

ScreenCaptureError 灵活

类型:uint32

fuchsia.ui.composition/screen_capture.fidl 中定义

ScreenCapture 协议中可能出现的错误。

名称说明
1

表参数中缺少一个或多个必需的参数。

2

一个或多个参数无效。

3

调用方法时发生常规错误。

4

当 BufferCollection 中的所有 VMO 都已渲染到其中时,如果调用 GetNextFrame,就会返回的错误。必须先调用 ReleaseFrame,然后才能成功调用 GetNextFrame。

屏幕截图格式灵活

类型:uint8

fuchsia.ui.composition/screenshot.fidl 中定义

可请求的不同格式的屏幕截图。

添加数量:12

名称说明
0

默认格式,请求使用 32 位 BGRA 像素紧密打包的像素数据。

1

请求压缩为 PNG 格式的紧密打包的像素数据。

添加了:HEAD

FrameInfo 资源

fuchsia.ui.composition/screen_capture.fidl 中定义

关于由 GetNextFrame 渲染的帧的元数据。

序数字段类型说明
buffer_id uint32

已渲染所请求帧的 VMO 的索引。必选。

GetNextFrameArgs 资源

fuchsia.ui.composition/screen_capture.fidl 中定义

传入 GetNextFrame 调用的参数。所有字段均为必填字段。

序数字段类型说明
event handle<event>

当请求的帧呈现完毕时,将发出信号的事件。必选。

ImageProperties

fuchsia.ui.composition/flatland.fidl 中定义

客户端定义的图片的属性。这些属性决定了映像如何使用后备 BufferCollection。如需了解详情,请参阅 CreateImage

序数字段类型说明
size fuchsia.math/SizeU

图片的大小(以像素为单位)。

LayoutInfo

fuchsia.ui.composition/flatland.fidl 中定义

GetLayout 的返回类型。下表包含客户端决定如何在 Flatland 实例中布局内容所需的大部分信息。这些数据可能会在显示创建 View 的命令之前提供给客户端,以便客户端可以在第一次调用 Present 之前正确布置内容。

序数字段类型说明
logical_size fuchsia.math/SizeU

View 的布局尺寸(以逻辑像素为单位),由父视图对 SetViewportProperties 的调用定义。

逻辑大小还可用作视图的裁剪边界。裁剪边界以外的任何内容都不会进行渲染。因此,View 的根转换具有 (0, 0) 到 (logical_size.width, logical_size.height) 的坐标空间。

当此值发生更改时,客户端应重新布局其内容。

device_pixel_ratio fuchsia.math/VecF

显示屏的物理像素与设备无关像素的比率。View 的每个逻辑像素在屏幕上按一个或多个物理像素显示,具体取决于此比例。当此值发生变化时,客户端不一定要重新布局其内容,而是通过重新分配其图片缓冲区来适应,以避免采样伪影。HiDPI 感知型客户端应分配大小为 (logical_size*device_pixel_ratio) 的缓冲区。

添加次数:9
inset fuchsia.math/Inset

边缘与 View 的可见矩形之间的偏移量。客户端可以假定边衬区和视图边缘之间的边界区域被遮挡,并且应调整内容布局以避开此区域。该边衬区通过视图的逻辑坐标系来描述。HiDPI 感知型客户端应按 device_pixel_ratio 将其缩放。

添加次数:9

OnNextFrameBeginValues

fuchsia.ui.composition/flatland.fidl 中定义

客户端生成下一帧所需的字段,在 OnNextFrameBegin 中返回。每个字段都必须设置,且包含有效信息。

序数字段类型说明
additional_present_credits uint32

允许客户端额外调用 Present 的次数。这是当前赠金预算中的增量,而不是当前赠金的绝对数量。

future_presentation_infos FuturePresentationInfos

有关客户可能旨在实现精确调度行为的未来呈现和锁存时间的信息。

PresentArgs 资源

fuchsia.ui.composition/flatland.fidl 中定义

传入 Present 中的参数。所有参数都是可选的;如果省略了某个参数,Flatland 将使用下面指定的合理的默认值。

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

requested_presentation_time 指定客户端希望加入队列的操作生效的时间(以纳秒为单位,在 CLOCK_MONOTONIC 时基中表示在屏幕上的像素点亮)。

requested_presentation_time 的默认值为 0。

使用当前或过去时间(例如 0)的 requested_presentation_time 可让已加入队列的操作在要准备的下一帧期间尽快生效。

如果将来使用 requested_presentation_time,则排队的操作会在指定时间后尽可能地或尽可能在规定时间后生效,但不会更早生效。

每个渲染帧都有一个目标呈现时间。这时 Flatland 的目标是向用户显示帧。在渲染帧之前,Flatland 会应用与对 Present 的所有可压缩调用相关联的所有已加入队列的操作(其 requested_presentation_time 不早于帧的目标呈现时间)。

acquire_fences vector<event>[16]

Flatland 会等待 Flatland 实例的所有 acquire_fences 准备就绪,然后再执行显示的命令。如果未发送 acquire_fences 信号,系统会屏蔽当前的 Present 以及后续 intent,即使其 acquire_fences 收到了信号也是如此。

默认的 acquire_fences 值为空矢量。

release_fences vector<event>[16]

如果可以安全地重复使用当前 Present 时不再出现在本地场景图中的资源,Flatland 会向所有 release_fences 发出信号。最近,当本地场景图(此 Present 处的检查点)已集成到全局场景图中且全局场景已显示在屏幕上时,会发生这种情况。

(在某些情况下,围栏可能会提前收到信号,但客户端无需担心这一点:只有在可以安全重复使用关联资源时,围栏才会收到信号)。

这些栅栏旨在管理 sysmem 缓冲区等共享内存资源的重复使用。例如,最好不要让客户端渲染到当前显示在屏幕上的图像中,因为这可能会导致图像伪影,例如画面撕裂。

客户端负责维护每个栅栏与资源之间的映射,当其收到信号时,这些资源将变为可重用。一种常见的策略是跟踪由上一个 Present 使用但当前 Present 不再使用的资源。例如,如果当前 Present 从场景中移除某张图片,客户端将在此处插入栅栏。当栅栏稍后收到信号时,客户端就知道可以安全地渲染到图像中,并在随后的 Present 中将其插入本地场景图。

如果发生错误,Flatland 可能会在不发出这些围栏的情况下关闭通道。客户端可以立即释放共享缓冲区,但不应立即修改此类缓冲区,因为它们可能仍会显示在屏幕上。目前没有关于何时可以安全地重复使用共享缓冲区的良好信号可供客户端使用。

默认的 release_fences 值为空矢量。

unsquashable bool

如果 unsquashable 为 true,则保证在至少一个 vsync 间隔内显示唯一性更新。

如果 unsquashable 为 false,则可以将更新与后面的更新结合使用。

如果不存在,则 unsquashable 为 false。

server_wait_fences vector<event>[16]

未使用。最初的目的是重命名 acquire_fences,但从未连接过。

已废弃:HEAD
server_signal_fences vector<event>[16]

未使用。最初的目的是重命名 release_fences,但从未连接过。

已废弃:HEAD

RegisterBufferCollectionArgs 资源

fuchsia.ui.composition/allocator.fidl 中定义

RegisterBufferCollection 的参数表。请注意,以下某些字段是必填字段。

序数字段类型说明
export_token BufferCollectionExportToken

客户端可以发送 export_token 向分配器注册缓冲区集合,以便稍后在 fuchsia.ui.composition/Flatland 实例或其他景观 API(例如 Screenshot)中使用。

例如,通过传递包含 BufferCollectionExportToken 匹配对等方的 BufferCollectionImportToken,它们可以通过 fuchsia.ui.composition/Flatland.CreateImage 创建图片资源。

客户端应等待响应,然后再使用 import_token

此字段是必填字段。

buffer_collection_token fuchsia.sysmem/BufferCollectionToken

Flatland 通过对 buffer_collection_token 引用的 BufferCollection 设置限制来参与缓冲区的分配。在客户端使用 BufferCollection 创建内容之前,它不会阻塞正在分配的缓冲区。

只要客户端持有有效的 BufferCollectionImportToken,通过 export_token 注册的缓冲区集合就可用并保持活跃状态。当所有 BufferCollectionImportToken 均关闭且所有关联的 Image 资源均被释放时,系统将对它们进行垃圾回收。

此字段是必填字段。

usage RegisterBufferCollectionUsage

客户端可以注册用于各种用途的缓冲区集合,每种用途都有自己独特的限制条件。

此字段是选填字段。如果省略 usage,系统会将其视为具有 DEFAULT 选项。

弃用

API 版本 9 中废弃了此参数,但增加了 |usages|。

如果同时设置了 usagesusage 字段,则 usages 优先,并忽略 usage

已废弃:9
usages RegisterBufferCollectionUsages

客户端可以注册一个缓冲区集合以用于各种用途,并且能够组合使用多个用途(如果需要多个用途)。

此字段是选填字段。如果省略 usages,系统会将其视为只有 DEFAULT 选项。

添加次数:9

ScreenCaptureConfig 资源

fuchsia.ui.composition/screen_capture.fidl 中定义

传入 Configure 调用的参数。请注意,并非所有字段都是必填字段。

序数字段类型说明
import_token BufferCollectionImportToken

引用向分配器注册的 BufferCollection 的导入令牌。必选。

size fuchsia.math/SizeU

图片的大小(以像素为单位)。必选。

buffer_count uint32

BufferCollection 中的缓冲区数量。必选。

rotation Rotation

要应用于图像流的旋转。可选;如果没有,则不应用任何旋转。

ScreenshotTakeFileRequest 资源

fuchsia.ui.composition/screenshot.fidl 中定义

序数字段类型说明
format ScreenshotFormat

请求的屏幕截图的格式。

ScreenshotTakeFileResponse 资源

fuchsia.ui.composition/screenshot.fidl 中定义

序数字段类型说明
file fuchsia.io/File

|fuchsia.io.File| 渠道,用于读取生成的屏幕截图文件数据。 信道的服务器端会存储在设备上,直到检测到 ZX_CHANNEL_PEER_CLOSED。

基本用法:在客户端收到文件通道的客户端后,为避免内存堆积,应在再次调用 TakeFile 之前完成数据读取。读取完成后,客户端应在 |fuchsia.io.File| 通道上调用 Close,这将释放在服务器端分配的内存。

size fuchsia.math/SizeU

屏幕截图的大小(以像素为单位)。

ScreenshotTakeRequest 资源

fuchsia.ui.composition/screenshot.fidl 中定义

序数字段类型说明
format ScreenshotFormat

请求的屏幕截图的格式。

ScreenshotTakeResponse 资源

fuchsia.ui.composition/screenshot.fidl 中定义

序数字段类型说明
vmo handle<vmo>

包含屏幕截图数据的 CPU 可映射只读 VMO。服务器拥有 VMO,并可以对下一个 Take 进行重用。映射后,VMO 一定会可供访问。 在某些分配中,VMO::read() 可能不可用(即在模拟器上)。

基本用法:客户端收到 VMO 句柄后,为确保数据稳定性,应在再次调用 Take 之前完成对 VMO 的读取。完成读取后,客户端应丢弃 VMO 句柄。

高级用法:如需修改数据,或在下次调用 Take 之后仍保留这些数据,客户端应将数据复制到专用 VMO。

size fuchsia.math/SizeU

屏幕截图的大小(以像素为单位)。

ViewBoundProtocols 资源

fuchsia.ui.composition/flatland.fidl 中定义

绑定到 Flatland ViewCreationToken 的协议端点。这些协议针对 ViewCreationToken 在 Flatland 会话中创建的 View 运行。

序数字段类型说明
view_ref_focused server_end<fuchsia.ui.views/ViewRefFocused>

了解 View 何时获得焦点。

服务器端绑定的 ViewRef。view_ref_focused 客户端不会明确指定 ViewRef;相反,服务器实现会使用创建 View 时使用的 ViewRef 报告此 View 的焦点移动情况。

view_focuser server_end<fuchsia.ui.views/Focuser>

启用视图以请求将焦点转移到子(目标)视图。

服务器端绑定的 ViewRef。view_focuser 客户端不会明确指定“requestor”ViewRef,而只指定“目标”ViewRef。相反,服务器实现会将创建 View 时使用的 ViewRef 用作“请求者”ViewRef。

touch_source server_end<fuchsia.ui.pointer/TouchSource>

接收与 View 相关联的触摸事件。

mouse_source server_end<fuchsia.ui.pointer/MouseSource>

接收与 View 相关联的鼠标事件。

ViewportProperties

fuchsia.ui.composition/flatland.fidl 中定义

由父项定义的视口的属性。此数据连同一组附加转换将用于计算视口视图的 LayoutInfo。必须为 ViewportProperties 至少设置一次 logical_size。这是将驱动子项布局的初始尺寸。

序数字段类型说明
logical_size fuchsia.math/SizeU

视口大小(以逻辑像素为单位)。它直接映射到 LayoutInfo 中的 logical_size 字段。有效的逻辑大小必须包含正的 X 和 Y 分量。

inset fuchsia.math/Inset

边缘与视口的可见矩形之间的偏移量。这直接映射到 LayoutInfo 中的 inset 字段。有效边衬区的所有组成部分都必须大于或等于 0。

添加次数:9

联合

Allocator_RegisterBufferCollection_Result 严格

fuchsia.ui.composition/allocator.fidl 中定义

序数变体类型说明
response Allocator_RegisterBufferCollection_Response
err RegisterBufferCollectionError

ScreenCapture_Configure_Result 严格

fuchsia.ui.composition/screen_capture.fidl 中定义

序数变体类型说明
response ScreenCapture_Configure_Response
err ScreenCaptureError

ScreenCapture_GetNextFrame_Result 严格资源

fuchsia.ui.composition/screen_capture.fidl 中定义

序数变体类型说明
response FrameInfo
err ScreenCaptureError

ScreenCapture_ReleaseFrame_Result 严格

fuchsia.ui.composition/screen_capture.fidl 中定义

序数变体类型说明
response ScreenCapture_ReleaseFrame_Response
err ScreenCaptureError

BITS

RegisterBufferCollectionUsages 灵活

类型:uint16

fuchsia.ui.composition/allocator.fidl 中定义

已注册的缓冲区集合的可能用途。可以是多个选项的组合。

添加次数:9

名称说明
1

指定的缓冲区集合可用于创建 Flatland 和 GFX 图像。

如需了解详情,请参阅 fuchsia.ui.composition/Flatland.CreateImage

2

指定的缓冲区集合可用于截屏。

常量

名称类型说明
MAX_ACQUIRE_RELEASE_FENCE_COUNT 16 int32
MAX_HIT_REGION_COUNT 64 int32

最多 64 个命中区域足以满足这些 API 的预期用途。

MAX_PRESENT_ARGS_FENCE_COUNT 16 int32

别名

名称说明
FuturePresentationInfos vector[8]

用户定义的未来呈现信息标识符。当前使用的这些 API 最多未来 8 次呈现计数就足够了。