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