跳转至

UI

简介

需要注意的是,本模块的功能仅是管理用户界面的显示或者说绘制,也许 display 或者 drawing 会是一个更为合适的命名 ,但因为历史原因我也懒得改了

在 minitui 中,用户界面全是在终端窗口上呈现,而后者实际上就是一片可被光标绘制的矩形画布。(我们用 ANSI 转义序列的标准输出流控制光标的移动和绘制等行为,此处不表。)

在终端上,光标绘制的单位是一个 cell(可以称为「格子」)。由此,可以将这片画布视为一个由格子构成的矩阵,其中每个格子都由其位置,或者说坐标来索引。

那么,为了在画布上绘制所需要的界面内容,一个简单的方案是用一矩阵数组记录下每个格子所需要绘制的内容,然后令光标遍历所有格子,并在每一格子控制光标绘制指定内容。

那么,如何得到所需的界面内容呢?

在 minitui 中,我们已经将整个界面分割成了若干独立的组件,需要显示的界面内容实际上就是各个组件内容的综合。我们已经有了组件模块,其提供接口来获取其窗口任一相对位置上的格子内容(具体实现中,是 on_draw()

更进一步地,所需实现的实际上是获取每一格子所需绘制的内容,

本模块的功能实际上就是在绘制循环过程中,在光标处于特定位置时,将光标的控制权交给此位置上位于顶层的组件,并告诉它此时光标相对于其左上角的位置。

ui.h/ui.cpp