對於窗口管理器,可能你們第一反應會很生疏,它與圖形桌面環境的其餘組件如文件管理器、任務欄等相比,沒有那麼顯眼,而是依託着應用程序的窗口進行體現。雖然不起眼,可是卻不能忽視了窗口管理器的重要做用,沒有了它,大部分應用程序窗口將沒法改變位置、大小,也沒法進行拖動,窗口的佈局以及窗口之間的堆疊關係也沒法控制。shell
圖1 無窗口管理器的桌面 後端
接下來,就讓小編帶領你們進一步瞭解窗口管理器吧! 服務器
圖2 總體圖框架
窗口管理器做用函數
窗口管理器核心功能是移動窗口,改變窗口大小,圖標化(最小化)窗口和改變窗口層疊順序,通俗說就是對窗口進行管理。佈局
通常來講窗口管理器會對應用程序窗口加上標題欄,用以進行窗口的拖拽操做,其中還有最小化,最大化,關閉按鈕,方便用戶快捷的操做窗口。性能
窗口管理器還會對窗口邊框進行處理,設計邊框顏色和陰影效果來區分激活與非激活窗口。優化
同時大部分窗口管理器還提供了一些快捷鍵綁定,來實現窗口切換,工做區切換,顯示桌面等功能。動畫
窗口管理器分類插件
根據窗口管理器繪製和更新窗口的方式,窗口管理器能夠分爲如下四類:
A:平鋪式(Tiling window manager): 以不重疊的方式將窗口一個挨一個組織的窗口管理器則稱爲平鋪式窗口管理器,每一個窗口會被自動調整大小來鋪滿整個屏幕。表明有larswm,Awesome, i3等,若是想要全部窗口都在可視範圍內,不想用快捷鍵進行窗口切換來選擇窗口的話,平鋪式無疑是很好的選擇。
B:堆疊式窗口管理器(Stacking window manager): 經過特定的順序繪製窗口,而且各個窗口能夠相互重疊的窗口管理器稱爲堆疊式窗口管理器,表明有4Dwm,FVWM,Openbox等。
C:動態窗口管理器(Dynamic window manager): 結合上述兩種窗口管理器,能夠動態切換窗口放置方式,表明有dwm,xmonad等。
D:複合窗口管理器(Compositing window manager): 複合窗口管理器提供了離屏緩衝區,應用程序窗口不是直接畫到屏幕上,而是先在顯示內存中的一個離屏緩衝區,而後由複合器進行合成顯示到屏幕之上,目前主流的窗口管理器大部分都是該類型,表明有DWM(Windows), Quartz Compositor(macOS), Mutter(GNOME3), KWin(KDE)等。
ukwm
從優麒麟16.04長線支持版開始,咱們從GNOME3中fork了mutter,並針對咱們版本的使用環境與一些問題和反饋,進行了定製,造成了如今的ukwm。
圖3 結構介紹
ukwm的主要結構如圖所示,爲了加強3D性能,引入了clutter和cogl兩個庫。clutter是GNOME一個基於GObject支持3D硬件加速的圖形開發套件,經過使用OpenGL或者OpenGL ES來進行渲染,而且提供了動畫接口,可以以此實現一些所需的動畫效果;cogl則是一個很小的能夠使用顯卡硬件加速的開源圖形庫。經過這兩個庫,實現了基於OpenGL 的3D硬件加速支持,從而加強了系統3D顯示性能。
backend是一個後端,主要是針對硬件設備如顯示器,鼠標,鍵盤等進行處理。鑑於新一代圖形顯示服務Wayland技術日益成熟,ukwm除了支持傳統的X顯示服務X11外,也支持了Wayland,所以經過GObject類抽象出統一接口,將與顯示服務器相關的部分抽離出來,在x11模塊中實現Xorg相關代碼,在Native中實現Wayland相關代碼,使得代碼精簡複用性大大提升。
core是ukwm核心部分,是窗口管理器的主要功能的實現,包含了各類初始化動做,屏幕處理,鍵盤綁定,輸入事件處理,對窗口動做(如大小,打開關閉等)、窗口放置、窗口層級,窗口邊界約束,工做區處理等模塊。這裏,咱們解決了某些自帶標題欄的彈窗沒法最小化問題,對窗口邊界約束進行了定製優化,以更好地兼容UKUI桌面環境。
在compositor中,主要負責對於窗口重定向和複合顯示功能,而且對窗口內容,窗口重繪,陰影效果等進行處理。除此以外,compositor中還有很重要的一個plugin插件模塊,這使其成爲了一個插件式的窗口管理器,可擴展性大大加強,GNOME3的gnome-shell就是經過插件與mutter高度糅合在一塊兒,咱們經過插件,重寫了alt+tab窗口切換功能,更加貼近用戶的使用習慣,在彈窗中平鋪每一個窗口,並同時顯示窗口內容,圖標和標題,更有利於區分和準確選擇要切換的窗口,以下圖所示:
圖4 窗口切換
UI方面,延續了gtk的主題風格,對於框架Frame進行了一些修整,使其與整個桌面環境更加搭配,而且增長了監聽函數,監聽到用戶切換主題時,對每一個窗口框架進行重繪,實現標題欄及邊框跟隨主題變換。在18.10中,咱們新增了一套黑色主題做爲默認主題,以更加簡潔的界面來顯示窗口,經過窗口邊框顏色和陰影效果來區分激活與非激活窗口,以下圖所示:
圖5 黑色主題中窗口管理器體現
另外咱們保留了藍色主題,而且進行了微調,使其更貼近咱們的設計理念。
圖6 藍色主題下窗口管理器體現
經常使用快捷鍵
上文說到窗口管理器通常還管理着一些與窗口相關的快捷鍵,下面列舉了優麒麟上經常使用的窗口相關快捷鍵,相信經過這些快捷鍵,咱們能更加方便的對於窗口進行操做:
Ctrl+Alt+D 顯示桌面
Ctrl+Alt+方向鍵(左右) 切換工做區
Alt+Tab 正序切換窗口
Alt+Shift+Tab 倒序切換窗口
Alt+F4 關閉窗口
Alt+F9 最小化窗口
Alt+F10 最大化窗口
窗口管理器是個複雜的組件,是上層應用窗口與X之間的一座重要橋樑,所以其涉及到諸多方面,從硬件到軟件,從2D到3D,從古老的X11到新興的Wayland,甚至還包含與各種桌面組件的交互。總的來講,優麒麟窗口管理器秉持簡潔,輕便的理念,而且緊跟了前沿的技術變動,在加強了性能的同時,也保證了良好的兼容性,歡迎各位用戶試用以及提出大家寶貴的意見!