編者按:如果你用過Ubuntu 一類的 Linux 操作系統,那么你大概率是接觸過 GNOME 這個桌面環境的。這篇文章出自 GNOME 團隊的博客,他們一直在重新思考桌面窗口管理器的交互邏輯,并且試圖提升它的整體可用性。這個問題其實 Windows 和 macOS 的團隊同樣在思考,各自都有一些探索性的設計,但是 GNOME 的這個,更有意思,也更加值得學習和思考。以下是正文:
窗口管理是最令我著迷的一個設計問題,掐指算來,窗口隨著圖形化界面誕生,至今已經 50 年了,可是如今依然沒有徹底完善的管理方案。我們從一開始,就依賴將窗口作為承載內容、處理多任務的隱喻和方式。在這個隱喻當中,每個應用程序都可以生成一個乃至于多個矩形的窗口,窗口之間可以互相交疊,移動,并且可以調整大小。
互相重疊的窗口很快會變得混亂
如果你的桌面上只有幾個小窗口,傳統的桌面窗口系統通常可以很好地工作,但是隨著窗口數量和大小的增加,問題就會出現。當新窗口出現的時候,互相之間就會遮擋,有的窗口會被完全遮蓋住。當你最大化某個窗口的時候,所有的窗口都會被隱藏。
幾十年來,各種不同的操作系統使用不同的工具和流程,來處理這個問題,工作區、任務欄、切換器,都是這樣來的。然而,從 70 年代開始,一直到現在,基本沒有根本上的改變,而問題也從未消失。
雖然我們當中絕大多數人,已經習慣了這套體系,也能夠忍耐這套系統的各種情況,但是這并不意味著它沒有問題。尤其當你看電腦新手的時候,比如小孩和老人,你會更加明顯地感知到這些問題。移動窗口,調整窗口的尺寸,這兩個操作最為明顯,因為它需要用戶進行精細的操作。但是這種功能是整個窗口管理系統自帶的,用戶必須要掌握的,也經常被人戲稱為「Shit work」。
大多數時候,你其實并不關心窗口的大小和位置,僅僅只是想查看當前任務所涉及到的窗口而已。而在多數時候,你會將窗口最大化。少的時候,這種最大化的窗口有三四個,多的時候有十幾個,即使這比較少見。混亂是默認存在的,而用戶需要接納它們,還得整理它們。
傳統的窗口管理機制當中,會使用平鋪展示來解決窗口重疊的問題。雖然這種設計在某種情況下效果不錯,但是考慮到實際的需求,它也就幫用戶整體預覽一下有哪些程序有哪些窗口僅此而已,在可用性上,遠遠不夠。
原因之一,是窗口管理器的平鋪視圖之下,會根據屏幕空間大小將所有的窗口等比例的縮放預覽,但是絕大多數的程序其實都有各自所設定的窗口比例。最典型的就是即時通訊類的程序,它們通常窗口都比較瘦長。當然,有的桌面窗口管理系統會使用一些特殊的窗口平鋪機制,比如在 Linux 下著名的桌面管理器 Gnome 下,會使用名為 Forge 的屏幕窗口模式,窗口會統一縮的很窄:
當然,這也很容易聯想到錘子 TNT 系統下的搜索引擎多開的「發牌手」功能:
窗口管理的平鋪模式的另一個問題,是會將新的窗口隨意放置一個位置。這主要是因為系統不了解用戶使用程序打開窗口的上下文環境,這導致用戶只能在事后手動調整窗口大小,而這正是我們想要要盡量避免的問題。
而 iPadOS 上的窗口管理機制則非常有趣,它的使用場景更加受限,而正是這種受限讓它可以更加具有目的性,這種方式只允許并排平鋪2個窗口,并不能很好的擴展到更大的屏幕上。
長期以來,Gnome 設計團隊一直都非常關注窗口管理這個話題,我記得是在 2017 年第一次 GUADEC 上就和 Jakub 討論過這個問題,此后進行過無數次的討論,溝通想法,構想概念。在這些概念設計和想法當中,比較具有里程碑意義的是 2019 年的一次設計和 2020 年 GNOME40 的設計,此后,在 2022 年柏林的 Mini GUADEC 和 2023 年 Brno hackfest 上,我們基于之前的概念更進一步調整。
在 HDR hackfest 期間,提出了磁貼式窗口管理的概念。從左到右分別是Robert Mader、Marco Trevisan、Georges Stavracase、Jakub Steiner 和 Allan Day(遠程)、Florian Müllner、Jonas Dre?ler。
我個人有個習慣,每年會花費幾周的時間來研究這個問題。比如在 2020 第一次疫情隔離期間,我花費了相當多的時間來構想一個磁貼版本的 GNOME Shell。
基本上,從 GNOME 3 的早期版本開始,GNOME 就有了基本的平鋪視圖,雖然很好,但是它有明顯的局限性:
- 它完全是手動的
- 僅支持2個個窗口的并列展示,并且無法擴展到更加復雜的布局
- 在堆棧視圖中,2窗口平鋪視圖并不會同時呈現,其他窗口隨時會影響使用
- 工作區的創建也是手動的,并未集成到工作流當中
多年來,我們也一直想創建出更強更易用的平鋪視圖,但是由于技術限制,牽涉到的工作量很大,并且缺乏明確的設計方向,因此一直沒有取得太大的進展。現在,我們終于找到相對明確的設計方向了,這著實是令人振奮!
關于這個功能的設計,我們討論關鍵點是,如果向 GNOME 添加一種新的窗口管理方式,它需要足夠好用才能成為默認的窗口管理機制。我不想添加一個額外的工具,但是又無法解決絕大多數用戶的窗口管理的問題。
因此,我們提出的想法大概是這樣的:
- 自動執行用戶可能想要的操作,并且允許用戶根據需求進行調整
- 將工作區作為工作流程可以集成的一個部分
- 為應用程序添加更加豐富的元數據,以更好地實現集成的需求
按照我們當前的概念設計,它有3種潛在的布局狀態:
- 馬賽克布局,一種新的窗口管理模式,結合了平鋪布局和傳統浮動堆疊布局的優點
- 邊緣平鋪布局,即窗口會水平方向平鋪展示
- 堆疊浮動布局,就是咱們現在最常用的經典窗口管理方式
馬賽克布局被設置為默認交互。當你打開一個窗口,它會按照這個 APP 最實用的比例和尺寸,在屏幕中心打開,瀏覽器這種 APP 通常可能會最大化展示,而天氣類的應用,通常大概 700x500 px 的尺寸也就夠用了。
當你打開更多窗口的時候,現有的窗口會自動移動到一旁,為新的窗口騰出空間。如果新打開的窗口空間不夠用,比如它需要最大化呈現,那么會它會移動到自己的獨立的工作區。如果所有的窗口布局接近鋪滿屏幕,那么所有窗口會自動擴展平鋪,占滿屏幕。
當然,用戶可以手動讓窗口平鋪。如果有足夠的空間,其他的窗口能夠保留馬賽克布局,但是如果沒有足夠的空間用于馬賽克布局,那么系統會提示你另外新開一個桌面窗口。
用戶可以讓一個桌面不止并排放置 2 個窗口,任何平鋪的區域或者剩余的區域,都可以拖進另外一個窗口,來進行分割,并且在允許的情況下,平鋪狀態下的小窗口的尺寸是可以調整的。
當然,總會有一些情況需要將窗口放在屏幕的特定位置,新的系統也會允許窗口出現在馬賽克模式和平鋪窗口層之上的經典浮動模式,然而,我們認為這種浮動窗口相對情況較少,它們類似我們如今的「始終處于最上層」的界面行為。
當然,這套體系還有更多的規則和細節,但是希望上面的內容可以讓你對于我們接下來的設計有一個基本的了解。
如你所見,為了避開傳統平鋪窗口管理器的陷阱,我們需要有更多來自窗口的元數據。目前體系下,窗口可以設置固定大小,但是為了構建更出色的體驗,我們需要更多的信息和數據。
有的窗口永遠都不應該在 4K 顯示器上最大化顯示。
目前缺少一個重要的信息,是窗口所需的最大尺寸的信息,超過這個尺寸,窗口內的內容將不再好看。沒有這些信息,也恰恰是傳統桌面的窗口管理器平鋪模式下的問題之一,尤其是在大屏幕上呈現的時候。這個最大尺寸并不是硬性要求,而更像是一個推薦尺寸,依然可以手動調整大小,但是,系統可以借此來計算最佳的窗口布局,比如,當這個窗口被拖到屏幕一側平鋪開的時候,平鋪的寬度會參考這個最大尺寸的參考數據。
此外,程序窗口的最佳尺寸數據,對于新的馬賽克模式也是非常有幫助的。理想情況下,這些屬性都可以根據窗口的內容動態設置。
當然,想要將整個生態遷移到新的窗口管理模式,并不是一件容易的事情,但是由于 API 的簡單性和通用性存在,我認為這種情況成功的概率還是很大的。
在今年 4 月的 Brno hackfest 上,我們和 GNOME Shell 的開發者就很多技術細節進行了初步的討論,我們初步統一按照前文的計劃來推進整個桌面窗口管理器的研發,當然,還有大量的工作要做。
在設計方面,最大的不確定性,依然是馬賽克模式本身,這種新穎的窗口管理方式并沒有太多現有的技術支持,這令人興奮,同時也有點冒險。
復制本文鏈接 文章為作者獨立觀點不代表優設網立場,未經允許不得轉載。
發評論!每天贏獎品
點擊 登錄 后,在評論區留言,系統會隨機派送獎品
2012年成立至今,是國內備受歡迎的設計師平臺,提供獎品贊助 聯系我們
標志設計標準教程
已累計誕生 729 位幸運星
發表評論 為下方 5 條評論點贊,解鎖好運彩蛋
↓ 下方為您推薦了一些精彩有趣的文章熱評 ↓