组件¶
简介¶
在 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();
}