SDL中文论坛

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

[gui2] linked_group

[复制链接]

187

主题

346

帖子

2450

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2450
跳转到指定楼层
楼主
发表于 2017-2-14 09:10:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
定义一个分组,把需要等尺寸的控件归入该组,属于该组的控件具有相同尺寸。等尺寸分为三种,1)只是等宽度;2)只是等高度;3)等宽等高。

编写WML时如何使用linked_group
linked_group在窗口级WML中使用。使用它分两步。

1、定义一个新分组
在窗口级WML的[tresolution]块定义一个叫icon_area的分组。
  1. [linked_group]
  2.         id = "icon_area"
  3.         fixed_width = "true"
  4. [/linked_group]
复制代码
这个分组叫icon_area,fixed_width=true使属于该分组控件具有相同宽度。fixed_height使用默认值,默认值是false,也就是属于该分组控件不要求高度一致。

2、把控件归入该组
  1. [column]
  2.         ......
  3.         [stacked_widget]
  4.                 id = ""
  5.                 definition = "default"
  6.                 linked_group = "icon_area"
  7.                 ......
  8.         [/stacked_widget]
  9. [/column]
复制代码
要归入的控件使用:linked_group = 分组名。

什么时候使用分组
垂直列表框内各项要有相同宽度。
多页列表控件内各页有相同宽度。

程序实现
twindow负责处理linked_group,具体归到两个函数:layout_init、layout_linked_widgets。
layout_init(true);
如果设置了等尺寸组的话,把自已加入等尺寸组。任何一个控件都有个linked_groud字段,该字段是一个字符串,设置了它属于哪个等尺寸组,如果空的话不属于任何等尺寸组。
[label]
        linked_group = "icon"
[/label]
以上定了一个文本控件,它属于“icon”这个等尺寸组。

twindow用std::map<std::string, tlinked_size>数据结构来存储等尺寸组,加入过程就是把控件加入这个数据结构。
  1. twindow
  2. {
  3.         ......
  4.         std::map<std::string, tlinked_size> linked_size_;
  5.         ......
  6. };
  7. void twindow::add_linked_widget(const std::string& id, twidget* widget)
  8. {
  9.         std::vector<twidget<twidget*>& widgets = linked_size_[id].widgets;
  10.         if (std::find(widgets.begin(), widgets.end(), widget) == widgets.end()) {
  11.                 widgets.push_back(widget);
  12.         }
  13. }
复制代码


layout_linked_widgets();
  • 计算组的最大尺寸;
  • 把最大尺寸设置为组内控件的布局尺寸(layout_size_)。

layout_size_会作为控件的标称尺寸;
如果出现放大的话,标称尺寸将不是渲染尺寸,因而要保持同样渲染尺寸的话须要设置相同放大系数(gorw_factor)。
等尺寸可能是三种,1)只是等宽度;2)只是等高度;3)等宽等高。layout_linked_widgets设置的layout_size_,等尺寸那方向是最大值,不等的方向则是控件计算出的标称尺寸。
回复

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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