SDL中文论坛
标题:
树形控件(tree_view)
[打印本页]
作者:
ancientcc
时间:
2017-6-6 20:48
标题:
树形控件(tree_view)
本帖最后由 ancientcc 于 2017-6-10 22:14 编辑
为什么tree_view_node的基类用twidget,而不是toggle_panel?
如果tree_view_node直接从toggle_panel派生,每个结点可以省掉一个twidget。一旦从toggle_panel,那如何确定渲染矩形尺寸?这无非有两种办法。1)只是顶上的grid高度。twindow::draw在调用twidget::draw_background/children前,要预设置裁剪矩形,而这个裁剪矩形要来自控件的渲染矩形,可由于node矩形只是顶上grid,要画底下的children超过裁剪矩形,无法显示。2)设置为顶上的grid再加底下的children。那这时如何画grid的状态,像focused、selectd?如果要加一个专门控件,那内存相比从twidget派生就没优势了。而且在理解也不如从twidget更直观。
calculate_gc_insert_cache_vsize
void ttree_view_node::calculate_gc_insert_cache_vsize(const bool only_children, const bool must_include_children);
复制代码
calculate_gc_insert_cache_vsize用于收集该结点下那些展开的结点信息,它是个递归函数。要收集哪些信息?1)个数计入gc_insert_cache_vsize_,2)结点指针放入gc_insert_cache_。参数only_children指示是否只收集孩子。第二次执行时,由于上一次已计入过此node资料,该参数一定true。参数must_include_children指示是否一定要包含children,一旦是true时,将忽略该结点的is_folded标志,强行把children加入计数。第二次执行时,该参数一定是false。什么时候是true?折叠了一结点,此时这结点的is_folded是ture,但children其实是显示中的。
为什么要特别关心展开的结点?展开的结点是正显示中的,这些结点会影响gc_lookup_表。
欢迎光临 SDL中文论坛 (http://www.libsdl.cn/bbs/)
Powered by Discuz! X3.3