跳转至

组件

简介

在 minitui 中,我们把图形界面分割成若干具有一定独立性的组件——这些组件具有特定(但可能改变)的大小和位置,独立地对用户的各种输入及事件作出响应,并能够管理自己的显示内容。

tui_widget

定义源码
struct tui_widget {
  tui_rect area;
  bool updated;
  bool instaniated;
  tui_widget *parent;
  int retcode;
  int livecnt;
  bool deleted;
  std::vector<tui_widget *> children;

  static void delete_widget(tui_widget *widget, bool hard_delete);

  tui_widget(tui_rect area, tui_widget *parent=NULL);
  tui_point position_interpreter(tui_point point) const;
  tui_point position_mapper(tui_point local_point) const;
  void create_widget(tui_widget *widget);
  void add_widget(tui_widget *widget);
  void remove_widget(tui_widget *widget);

  void set_updated() {updated = true;};
  void reset_updated() {updated = false;};
  bool get_updated() const {return updated;}

  virtual tui_event *on_event(tui_event *event);
  virtual void draw(tui_point point) const;
  virtual tui_event *on_child_exit(tui_widget *child);
  virtual ~tui_widget();
};

数据成员

area: tui_rect

组件所占据的区域。

updated: bool

组件自上次绘制以来,其内容是否被更新过。即组件是否需要被重新绘制。

instaniated: bool

组件是否在 UI 模块中被注册,即组件的显示是否被 UI 模块管理。

parent: tui_widget *

组件的父组件指针。

注意:只允许根组件的父亲为空,即非根组件必须有父组件。

retcode: int

组件退出时的返回值。

livecnt: int

组件指针的引用计数。

引入这一设计是因为组件在被删除时可能仍然被一些计时器对象所持有,因此需要等待这些计时器通过 deleted 成员知晓组件被删除后自行释放而不触发回调函数。

deleted: bool

组件是否被删除。

除了用于通知持有该组件的计时器自行释放之外,还可以用于检测组件是否被重复删除。

children: std::vector<tui_widget *>

组件的子组件列表。

构造函数

tui_widget(tui_rect area=global_rect, const char name=NULL, tui_widget parent=NULL);
源代码
tui_widget::tui_widget(
  tui_rect area,
  const char *name,     // not recommend to use
  tui_widget *parent    // not recommend to use
) 
: area(area)
, updated(false)
, instaniated(false)
, reset_block(false)
, parent(parent) 
, unproxy(NULL)
, frame(NULL)
, retcode(0)
, livecnt(1)
, deleted(false) {
  if (!name) {
    strcpy(this->name, "DEFAULT_WIDGET");
  }
  else {
    strcpy(this->name, name);
  }
  children.clear(); 
}

静态方法

static void delete_widget(tui_widget *widget, bool hard_delete);

成员方法