NEWS

新闻

了解优麒麟最新资讯,关注社区和产品动态。

NEWS

Learn about the latest news.

UKUI 桌面环境之窗口管理器

2020-09-08 15:59:34

对于窗口管理器,可能大家第一反应会很生疏,它与图形桌面环境的其他组件如文件管理器、任务栏等相比,没有那么显眼,而是依托着应用程序的窗口进行体现。虽然不起眼,但是却不能忽视了窗口管理器的重要作用,没有了它,大部分应用程序窗口将无法改变位置、大小,也无法进行拖动,窗口的布局以及窗口之间的堆叠关系也无法控制。

UKUI桌面环境之窗口管理器

图1 无窗口管理器的桌面 

接下来,就让小编带领大家进一步了解窗口管理器吧! 

UKUI桌面环境之窗口管理器

图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。

UKUI桌面环境之窗口管理器

 图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窗口切换功能,更加贴近用户的使用习惯,在弹窗中平铺每个窗口,并同时显示窗口内容,图标和标题,更有利于区分和准确选择要切换的窗口,如下图所示: 

UKUI桌面环境之窗口管理器

图4 窗口切换

UI方面,延续了gtk的主题风格,对于框架Frame进行了一些修整,使其与整个桌面环境更加搭配,并且增加了监听函数,监听到用户切换主题时,对每个窗口框架进行重绘,实现标题栏及边框跟随主题变换。在18.10中,我们新增了一套黑色主题作为默认主题,以更加简洁的界面来显示窗口,通过窗口边框颜色和阴影效果来区分激活与非激活窗口,如下图所示: 

UKUI桌面环境之窗口管理器

图5 黑色主题中窗口管理器体现 

另外我们保留了蓝色主题,并且进行了微调,使其更贴近我们的设计理念。

UKUI桌面环境之窗口管理器 

图6 蓝色主题下窗口管理器体现

常用快捷键

上文说到窗口管理器一般还管理着一些与窗口相关的快捷键,下面列举了优麒麟上常用的窗口相关快捷键,相信通过这些快捷键,我们能更加方便的对于窗口进行操作:

Ctrl+Alt+D 显示桌面

Ctrl+Alt+方向键(左右) 切换工作区

Alt+Tab 正序切换窗口

Alt+Shift+Tab 倒序切换窗口

Alt+F4 关闭窗口

Alt+F9 最小化窗口

Alt+F10 最大化窗口 

窗口管理器是个复杂的组件,是上层应用窗口与X之间的一座重要桥梁,因此其涉及到诸多方面,从硬件到软件,从2D到3D,从古老的X11到新兴的Wayland,甚至还包含与各类桌面组件的交互。总的来说,优麒麟窗口管理器秉持简洁,轻便的理念,并且紧跟了前沿的技术变更,在增强了性能的同时,也保证了良好的兼容性,欢迎各位用户试用以及提出你们宝贵的意见!