fuchsia.ui.observation.幾何圖形

已新增:9

專家

ViewTreeWatcher

定義於 fuchsia.ui.observation.幾何圖形/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() 呼叫會安靜靜止不動。

生命週期:在結構定義檢視畫面失敗時,伺服器端點會關閉。

觀看

取得特定檢視表檢視表樹狀結構快照的方法。

此呼叫以「等待取得」模式進行,用戶端會要求一組最近的快照,並透過回呼接收這些快照。這個提取式方法可確保用戶端能夠按自己的步調處理事件;事件不會以不受限的方式記錄管道。

處理錯誤。如未設定「Error」,用戶端可能會假設回應會包含在週期內具有完整資訊的更新內容。

流量控制呼叫端一次最多允許在通話中 |觀看| 呼叫;而同時呼叫 |Watch| 則是一種邏輯錯誤。違反規定會導致管道關閉。

用戶端放送速度:伺服器會盡可能以無損的方式將快照分派給呼叫端,但呼叫端必須分配足夠的時間才能跟上新的快照。

要求

<EMPTY>

回應

名稱類型
payload WatchResponse

結構

AlignedExtent

定義於 fuchsia.ui.observation.幾何圖形/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.幾何圖形/watcher.fidl

檢視畫面的幾何圖形資料。

請注意,這些是伺服器端值,而部分圖形 API 在這些值「生效」時,並未保證 UI 用戶端之間的一致性。也就是說,您可能需要直接查詢 UI 用戶端,瞭解其目前使用的值。不過,UI 用戶端應該會在幾個影格內「立即」使用這些值。

欄位類型說明預設
extent AlignedExtent

檢視畫面定界框的最小和最大點 (位於該檢視畫面的座標系統中)。

無預設
pixel_scale PixelScale

從螢幕的實際像素 (螢幕) 到邏輯像素 (檢視畫面的座標系統) 的轉換比率。

無預設
inset fuchsia.math/InsetF

檢視畫面定界框的偏移資料位於該檢視畫面的座標系統中。

無預設

RotatableExtent

定義於 fuchsia.ui.observation.幾何圖形/watcher.fidl

檢視畫面定界框,如另一個檢視畫面的座標系統所述。具體而言,|RotatableExtent| 會說明檢視畫面的定界框的起點、大小和旋轉角度。

注意:如要說明檢視畫面的座標系統中的定界框,請參閱 |AlignedExtent|。

我們會使用「V」參照所描述的檢視畫面,「W」則代表描述 V 的檢視畫面。

請注意,雖然 |angle| 可以是任意值,但一般用途是採用軸對齊。以順時針順序找出 V 的定界框,以 W 為單位,以 |origin|.、hx、ox、o、o、o、o、o、w、o、o、o、o、o、o、o、o、o、o、o、o、o、o、o、o、o、o、為讀、重寫拼功能或重寫功能就是難度一次,那麼使用 o=origin、w=width、h=height、o.y)、(o.x + wo.y)、

欄位類型說明預設
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.幾何圖形/watcher.fidl

特定檢視畫面的資料:ID、位置和子項。

序數欄位類型說明
view_ref_koid zx/Koid

這個檢視畫面的 fuchsia.ui.views.ViewRef 目錄。

layout Layout

此檢視畫面的起點、邏輯大小、像素比例和插邊資料 (位於檢視畫面自己的座標系統中)。

限制。伺服器和用戶端之間的資料一致性取決於特定的圖形 API。部分 API 提供弱式一致性,在某些情況下,伺服器端資料 (這項資料) 和用戶端資料 (在檢視畫面的 UI 用戶端中) 可以有一段時間的落差。

extent_in_context RotatableExtent

此檢視畫面的程度 (在內容檢視畫面的座標系統中)。但「不會」描述子項檢視畫面的邏輯大小。

這說明此檢視畫面在內容檢視畫面中的「實際」位置,不受檢視區塊樹狀結構深度或中繼檢視畫面的特定版面配置狀態影響。

限制。未說明檢視畫面是否「可見」(例如檢視區塊已套用不透明度,或未由其他檢視區塊遮蔽),而且「不會」描述檢視區塊是否「可命中」(例如檢視畫面是否完全放置在每個祖系檢視畫面的定界框中)。

extent_in_parent RotatableExtent

父項檢視畫面座標系統內佔用的空間。但「不會」描述子項檢視畫面的邏輯大小。

children vector<uint32>[300]

子檢視畫面的清單,依圖形 API 已知的順序排列。

這個向量中的每個整數都代表父項在 | 檢視區塊| 或 |incomplete| 向量中的子項位置。

每個子檢視畫面的身分、位置和大小。位置和大小由父項檢視畫面座標系統中子項檢視畫面的範圍描述。

檢視表樹狀結構拓撲可靠,在這裡放置的子項,相當於父項檢視區塊接收「已連接子檢視」信號。

限制。父項檢視畫面的座標系統中描述了子項的檢視邊界,這有低一致性的低強度 (視圖形 API 而定)。也就是說,當父項檢視畫面的大小或指標發生變化時,上層檢視畫面會納入這些資料,因此背景檢視畫面可能會觀測到「跳躍」。在這種情況下,系統會發出新的 ViewTreeSnapshot,以描述相對於情境檢視畫面的位置變更。

ViewTreeSnapshot

定義於 fuchsia.ui.observation.幾何圖形/watcher.fidl

結構定義檢視畫面及其子系檢視畫面的說明 (如果有的話)。

序數欄位類型說明
time zx/Time

拍攝快照的時間。時間基群為單調時間。

views vector<ViewDescriptor>[300]

結構定義檢視畫面 (位於元素 0) 及其子系檢視畫面的完整清單。

如果超過 MAX_VIEW_COUNT,則未設定這個欄位,且 Error 中會回報錯誤。

WatchResponse

定義於 fuchsia.ui.observation.幾何圖形/watcher.fidl

對 fuchsia.ui.observation.幾何圖形.ViewTreeWatcher.Watch 的回應。

序數欄位類型說明
epoch_end zx/Time

傳送回應時。時間基群為單調時間。

updates vector<ViewTreeSnapshot>[200]

特定檢視畫面的最新更新清單。

error Error

只有在偵測到錯誤狀況時才設定。如未設定,用戶端可能會假設更新在週期內具備完整資訊。

節拍

錯誤彈性

類型:uint32

定義位置:fuchsia.ui.observation.幾何圖形/watcher.fidl

名稱說明
1

WatchResponse.updates 中附加 ViewTreeSnapshot 時,設為 true 超過 FIDL 管道的數量上限。系統會捨棄該快照與較舊的快照。

2

WatchResponse.updates 中附加 ViewTreeSnapshot 時,設為 true 值超過 BUFFER_SIZE。系統會捨棄該快照及較舊的快照。

4

如果 ViewTreeSnapshot 中的 views 大小超過 MAX_VIEW_COUNT,請設為 true。我們會在 ViewTreeSnapshot 中使用未設定的 views 欄位代表這個情況。

場景

名稱類型說明
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 管道的大小限制,可納入 ViewTreeSnapshotViewDescriptor 數量設有限制。計算這項限制時,系統會找出當 BUFFER_SIZE 為 1 時,可在 ViewTreeSnapshot 中加入的 ViewDescriptor 數量上限。

注意:修改 ViewDescriptor 時,這個值必須調整。

別名

名稱說明
PixelScale array[2]

從螢幕的實體像素 (顯示器) 與檢視畫面座標系統邏輯像素 (座標系統) 之間的比率。

  • 值的排列順序為 (x, y)。