在Blender的设计里,UI是采用单一系统窗口的设计,比如在Windows系统里,只需要创建一个窗口,然后所有的绘制和子窗口都是自己在这个窗口里实现,并且不再使用系统的UI功能,全部是自己通过OpenGL实现。所以在Blender每一个系统窗口采用一个屏幕对象结构--bScreen数据结构来描述,然后在屏幕里再分割子窗口--screen area。因此我们先要来学习bScreen数据结构,才能明白UI是怎么样实现屏幕级别的层次。
typedef struct bScreen {
ID id;
/* TODO: Should become ScrAreaMap now.
* NOTE: KEEP ORDER IN SYNC WITH #ScrAreaMap! (see AREAMAP_FROM_SCREEN macro above). */
/** Screens have vertices/edges to define areas. */
ListBase vertbase;
ListBase edgebase;
ListBase areabase;
/* End variables that must be in sync with #ScrAreaMap. */
/** Screen level regions (menus), runtime only. */
ListBase regionbase;
struct