Blender源码分析之屏幕和区域对象结构

Posted caimouse

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Blender源码分析之屏幕和区域对象结构相关的知识,希望对你有一定的参考价值。

在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 Scene *scene DNA_DEPRECATED;



  /** General flags. */

  short flag;

  /** Winid from WM, starts with 1. */

  short winid;

  /** User-setting for which editors get redrawn during anim playback. 

以上是关于Blender源码分析之屏幕和区域对象结构的主要内容,如果未能解决你的问题,请参考以下文章

Blender源码分析之创建区域对象UI_block_begin函数

Blender源码分析之创建区域对象

Blender源码分析之上下文的索引结构

Blender源码分析之上下文的索引结构

(12)Blender源码分析之加载图片的uiDefButImage过程

(12)Blender源码分析之加载图片的uiDefButImage过程