放大是一項無障礙功能,可讓用戶端針對內容進行進階轉譯 為視障人士提供相關協助例如,以一個小區域為中心 使用者的遊標會顯示在螢幕上其他位置的較大尺寸, 區域會隨著遊標自身移動而移動此外,還有全螢幕放大功能 如名稱所示,放大的區域會顯示在整個螢幕上。
設計
平地其實沒有「放大」的概念的 API 和 YAML 檔案改為使用放大功能 我們可運用 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*/);