平地放大

放大是一項無障礙功能,可讓用戶端針對視障人士提供高級算繪內容。例如,圍繞使用者遊標周圍的小區域,會顯示在螢幕上其他位置的較大比例,而該區域會隨著遊標移動而移動。針對全螢幕放大功能,如名稱所示,放大的區域也會在整個螢幕上顯示。

設計

平地在其 API 中並沒有「放大」的明確概念。而要利用 Flatland 場景圖的彈性,轉換節點可以調整子樹狀結構,且節點擁有多個父項節點,可以藉此放大。

部分放大

Flatland 會以深度優先的方式掃遍場景圖,以產生要傳送至轉譯器的最終資料清單。具有兩個父項的節點將會掃遍兩次,因此會在最終資料清單中顯示兩次,而每個執行個體都會根據該執行個體週遊的父項,繼承不同的全域資料組合。由於算繪資料是重複的,因此請務必瞭解效能。此外,全螢幕可算繪元件後方的內容也會遭到裁切,這有助於解決這項效能問題。

因此,客戶可以設定多父項的場景圖,其中一個父項包含了比例係數,可以放大從 Flatland 產生的所有執行個體,沿著其特定的子階層延伸。這個放大節點可以動態修改,以符合用戶端的需求。舉例來說,如果放大的區域需要遵循遊標,則可根據遊標位置更新放大節點的翻譯元件,藉此產生螢幕上移動放大的區域效果。

全螢幕放大功能

在全螢幕放大時,我們可以藉由一個父項節點放大到所需的放大等級。針對特定檢視畫面提供給用戶端的版面配置資訊,不會受到父項放大節點套用的縮放比例係數影響。

放大流程範例

虛擬程式碼

以下程式碼範例示範如何設定部分放大場景。

// Create transform IDs.
const TransformId kIdRoot = {1};
const TransformId kIdParent1 = {2};
const TransformId kIdParent2 = {3};
const TransformId kIdChild = {4};

// Create the transforms.
flatland->CreateTransform(kIdRoot);
flatland->CreateTransform(kIdParent1);
flatland->CreateTransform(kIdParent2);
flatland->CreateTransform(kIdChild);

// Scale up the magnification parent node.
flatland->SetScale(kIdParent2, {20, 20});

// Setup the diamond parent hierarchy.
flatland->SetRootTransform(kIdRoot);
flatland->AddChild(kIdRoot, kIdParent1);
flatland->AddChild(kIdRoot, kIdParent2);
flatland->AddChild(kIdParent1, kIdChild);
flatland->AddChild(kIdParent2, kIdChild);

// Present flatland.
flatland->Present(/*args*/);