SDL中文论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 4020|回复: 0
打印 上一主题 下一主题

[gui2] 树形控件(tree_view)

[复制链接]

187

主题

346

帖子

2450

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2450
跳转到指定楼层
楼主
发表于 2017-6-6 20:48:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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
  1. 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_表。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|丽谷软件|libsdl.cn

GMT+8, 2024-5-20 03:04 , Processed in 0.043151 second(s), 19 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表