/LGC窗口管理/组合窗口管理器
来源:互联网 发布:阿里云幕布的申请 编辑:程序博客网 时间:2024/05/21 01:56
简介
组合窗口管理器(compositing window manager)是计算机图形用户界面的一个组件,它负责绘制窗口和边界,同时也控制它们相互之间的交互和显示时的层次关系。组合窗口管理器和其他窗口管理器的不同在于不是所有程序都输出输出到同一个屏幕上,而是每个程序先各自输出到一个 buffer 中,窗口管理器将这些buffer 组合,再输出到屏幕上。这样,每个程序都是一个独立的 2D 或者 3D对象。
组合可以实现高级的视觉效果,比如透明(transparency)、淡入淡出(fading)、缩放(scaling)、复制(duplicating)、弯曲(bending)、扭曲(contorting)、拖曳(shuffling)、重定位应用(redirecting applications)等。3D 的引入可以实现窗口的阴影、距离和深度、窗口缩略图、复杂动画等效果。
目前,最流行的组合窗口管理器有微软 Windows 的 Desktop Window Manager,Mac OS X 的 Quartz Compositor,Linux 的 Compiz, Metacity 和 Kwin。
历史
2001年3月24日,第一个使用组合窗口管理器的操作系统 Mac OS X 10.0 发布,它提供了 Quartz 组件,组合功能完全由软件实现,不支持硬件加速。
2002年8月13日,Mac OS X 10.2 和 Quartz Extreme 发布,组合功能移到显卡中由硬件完成。
在 X Window 系统中,要实现组合窗口管理器需要对 X Window 做一些重新设计。Metacity 2.8.4 是第一个 X Window 系统的组合窗口管理器,于 2004 年 8 月发布,后来被 GNOME 采用。第一个众所周知的 X Window 组合窗口管理器是Xfwm,它是 Xfce 桌面环境的一部分,于 2005 年发布。后来 KDE 的 KWin 也提供了对组合功能的支持。2005年1月26日 Compiz 发布,为 Linux 平台提供了全硬件加速的 3D 组合功能。
在 2003 年的 WinHEC 会议上,微软 Windows Longhorn 的组合窗口管理器Desktop Window Manager 第一次被提出。然而由于 Windows Vista 发布的推迟,Windows 一直没有组合功能,直到 Vista 在 2007 年 1 月发布。
基本的 2D 组合
窗口是天生的 2D 平面对象,因此,窗口管理器主要在 2D 下工作。当把窗口管理器从 2D 扩展到 3D 或者创建 3D 效果时就会遇到问题。
比如,在 metacity 中,窗口单独绘制,然后加到桌面中,因此即使是窗口的隐藏部分也会被绘制。2D 组合窗口管理器的输出没有深度,阴影等效果非常不真实。
组合窗口管理器通常依赖于 X Server 的 "Composite" 扩展,组合窗口管理器通过这个扩展使用硬件加速。
尽管不是十分明显,但与传统的 stacking 窗口管理器相比,2D 组合窗口管理器为窗口系统带来了一些更真实的效果,如窗口透明等。
3D 组合窗口管理器
近来,几个带 3D 加速的组合窗口管理器成为主流,如 Compiz, CompizFusion, Desktop Window Manager。Mac OS X 自 10.0 版本以来一直使用组合窗口管理器 Quartz Compositor。
OpenGL 或者 DirectX 在一些组合窗口管理器中使用,以将一些绘制工作移交给显卡完成。第一个使用这个技术的是 Mac OS X 10.2,在 Linux 平台上是Luminocity 。到了 2008 年,使用 OpenGL 的组合窗口管理器包括Compiz,Beryl 和 Quartz Compositor。Desktop Window Manager 使用了DirectX 9。
Linux
对于 Linux/Unix 平台,完全 3D 的硬件加速组合功能依赖于 X11 的几个体系结构改变。这些改变允许图形环境的一部分直接在显卡上运行。最初,许多基于OpenGL 的 X11 实现被开发出来,如 Xgl,它使用 OpenGL 提供为窗口管理器提供全 3D 环境。后来,AIGLX 取代了 AIGLX,它支持窗口管理器通过 DRI 在标准的 X server 上做 3D 硬件加速的组合。当前,NVIDIA、Intel 和 ATI 都支持 AIGLX。
Linux 平台上,Compiz 名气最大,它提供了很多令人印象深刻的 2D 和 3D 效果。
Microsoft Windows
2006年11月发布的 Windows Vista 通过 Desktop Window Manager 为微软的 Windows 平台引入了 3D 组合能力。
在三个最流行的主流桌面从操作系统中 (微软Windows,Mac OS X,Linux),微软的 Windows 是最后一个引入组合窗口管理器的。尽管在 WinHEC 2003 上,Longhorn 的组合器曾经被提出,但 Windows Vista 的延期发布使原来的计划推迟了若干年。
可用性考虑
组合窗口管理器不但具有绚丽的可视效果、更快的速度,而且在计算机可用性上也有它的作用。窗口系统的本质是通过提供一些窗口部件来改善计算机的可用性。通过使用组合和 3D ,窗口部件的质量可以被提高,从而计算机的可用行得到改善。
放大镜
屏幕放大镜可以让用户快速方法屏幕的某一个区域,这可以使文字更加清晰,从而可以从远处观看或者便于视力不好的用户观看。Compiz 的 fish eye 和桌面放大效果就提供了这个功能。这些效果可以非常容易的使用键盘和鼠标进行调整。
除了让视力不好的用户受益,放大镜放大区域也能使得普通用户更容易将注意力集中在屏幕的一个区域中,而且大号的文本可减小眼睛的压力。
窗口切换
用户通常同时打开多个应用,由于窗口的名字无法全部显示,所以用户不可不记住应用程序在任务栏的位置。当很多窗口同时被打开时,这个问题就更加严重。
Compiz, Windows Vista, Mac OS 现在都提供了很多改善使用户更容易在运行的程序中进行选择,比如切换应用时,应用程序的窗口预览功能可以帮助用户迅速找到需要的程序。
Mac OS X 系统会把所有的窗口缩小依此排列在屏幕上,使得用户可以全部看到它们,迅速做出选择。
另外,Linux 和 Windows Vista 都提供了 Flip switcher,它使用户使用鼠标和键盘在多个应用窗口中翻页遍历,从而迅速找到想要的窗口。
widgets 层
Linux 和 Mac OS 都提供了 widget 层,Widget 层使经常使用的功能和应用快速启动和访问。在 Mac OS 上,经常使用的时钟、记事本和计算器可以一键启动。
在 Compiz 中,widget 层最初是空的,用户可以将自己经常使用的程序放到widget 层上来。
Windows Vista 也通过 Widows sidebar 提供了类似功能。
变换和其它特效
在现实世界中,桌面的纸张不会突然消失,抽屉不会一下子就抽出。对很多用户来讲,窗口的快速移动和突然消失出现会让他们很疑惑。
一些效果在用户体验方面是非常有效的。比如,窗口不是突然出现或者消失,而是淡入淡出;在最小化时渐渐的缩小到任务栏;菜单渐渐的滑出菜单栏等等。
这些效果除了可以提高普通人的用户体验,也可以为视力不好的人或者老人改善计算机的可操作性。
现有的组合窗口管理器
- Compiz
- xcompmgr
- Microsoft Windows 的 Desktop Window Manager 和 Windows Aero user interface
- KDE 的 KWin (从 4.0 版本开始)
- GNOME 的 Metacity (从 2.14 版本开始)
- Xfce 的 Xfwm (从 4.2 版本开始)
使用组合窗口管理器的操作系统
- AmigaOS 4.1
- Linux - under XOrg/AIGLX or Xgl
- OpenSolaris
- Mac OS X 10.0 及其后续版本
- MorphOS 2.0 机器后续版本
- Windows Vista, Windows Server 2008 (可选组件)
SeeAlso
- Compositing window manager
- /LGC窗口管理/组合窗口管理器
- /LGC窗口管理/窗口管理器的分类
- /LGC窗口管理/什么是窗口管理器
- /LGC窗口管理/DirectFB窗口管理器(unique)研究笔记
- /LGC窗口管理
- /LGC窗口管理/RenderingProject/CMArchitecture
- /LGC窗口管理/MiniGUI 体系结构
- /LGC窗口管理/支持3D动效的窗口管理器——Mutter
- /LGC窗口管理/Windows Manager Overview
- /LGC窗口管理/Working with 16-bit RGB
- 窗口管理器
- 窗口管理器
- /LGC窗口管理/常见颜色深度的 bitmap 之间的相互转换
- X窗口管理器大全
- 初识FVWM-窗口管理器
- 安装FLUXBOX窗口管理器
- 窗口管理器的要求
- Ubuntu设置窗口管理器
- C# 调用 Google Earth Com API开发(四)
- 见与不见
- 用ETL工具kettle实现的一个需求
- /LGC窗口管理/RenderingProject/CMArchitecture
- 坏消息又一
- /LGC窗口管理/组合窗口管理器
- WPF Binding
- activeReport_开发
- think about how to make the function close to really world
- spring中scope设置的疑问(解决)
- Delphi - 关于错误E2154 Type '%s' needs finalization - not allowed in variant record
- 粗糙集用于数据约简和提取决策规则C/C++(1)
- Snake算法
- ZOJ 2539 Energy Minimization