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