herbstluftwm-平铺算法解析

上一篇已经系统地介绍过herbstluftwm这款窗口管理器:http://blog.csdn.net/yy19900806/article/details/42236853

作为一个平铺式的窗口管理器,不同于堆叠式的窗口管理器,想要使用好它,必须要对其平铺算法了熟于心,方能随心所欲地享受平铺式wm带来的高效和畅快,接下来,我将对herbstluftwm的平铺算法做一定解析:

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

原理剖析:

从原理上说,herbstluftwm所采用的平铺算法的模型是二叉树,采用其叶子节点作为窗口的容器,用一个抽象的二叉树铺满整个屏幕。
虽然herbstluftwm支持很多操作,如:

  • 水平分割工作区(将当前的frame分为左subframe和右subframe)
  • 垂直分割工作区(将当前的frame分为上subframe和下subframe)
  • 最大化显示当前frame
  • 边角化显示当前frame
但是后两者并不会改变当前的二叉树模型,只是临时调整一下显示的方式而已,所以本文着重讨论前两个操作——即水平分割工作区和垂直分割工作区。

首先明确一下二叉树的几个基本性质:

  • 每个节点最多只有一个兄弟节点。但是herbstluftwm采用的子节点分裂的策略,所以就不存在度为1的节点,只存在度为0的节点(叶子节点)和度为2的节点(父节点)
  • 所以在herbstluftwm二叉树模型中,任何节点一定有一个兄弟节点(该兄弟节点有可能为叶子节点,也有可能为父节点)。


举个栗子:

下面我用一个简单的例子来做一个实例:

当一个屏幕中只有一个frame的时候,显然,该二叉树模型中只有一个根节点,如下所示:
root
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
现在执行一次垂直分割,即两个新的subframe分别处在上下的位置,二叉树模型如下所示:
    root                                           +————————+
    /   \                                             |             F               |
ver1    ver2    窗口的形状为:      +————————+      焦点在F处
                                                      |                              |
                                                     +————————+
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
现在再执行一次水平分割,即两个新的subframe分别在左右的位置,二叉树模型如下所示:
            root                                        +————————+————————+
            /      \                                       |              F              |                              |
        ver1   ver2    窗口的形状为:    +————————+————————+      焦点在F处
                    /    \                                 |                                                             |
              hor1   hor2                           +————————+————————+

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


你可能感兴趣的:(herbstluftwm)