X11 中Region的概念

Posted by CoderLeonidas on April 26, 2020

X11 中Region的概念

region.c文件中的函数实现了X11示例服务器中广泛使用的Region抽象。一个Region包括:

  • 一组不相交(不重叠)的矩形
  • 一个“扩展(extent)”矩形,它是包含所有不重叠矩形的最小单个矩形。

Region实现为矩形的“ y-x-banded”数组。 此数组强加两个顺序。 首先,首先按顶部y坐标(y1),然后按左侧x坐标(x1)对所有矩形进行排序。

此外,矩形被分组成“bands”。band中的每个矩形都有相同的上y坐标(y1)和下y坐标(y2)。因此,一个band内的所有矩形只在其左侧和右侧(x1和x2)有所不同。band在矩形数组中是隐式的:没有单独的band开始指针列表(start pointers)。

y-x band的表示不会最小化矩形。 特别是,如果矩形垂直跨过一个band(该矩形在该band跨过的y1到y2区域中具有扫描线),则该矩形可以分解为两个或更多个较小的矩形,一个堆叠在另一个之上。

对矩形的一个附加约束是,它们必须覆盖尽可能多的水平Region:一个频带内的两个矩形不允许接触。

只要有可能,band将合并在一起,以覆盖更大的垂直距离(从而减少矩形的数量)。只有当一条band的底部与另一条的顶部相接触,并且在相同的地方有矩形(当然,宽度相同)时,两条band才能合并。

参考

region.c文件