SDL中文论坛

标题: studio代码注释 [打印本页]

作者: ancientcc    时间: 2017-3-11 21:19
标题: studio代码注释
本帖最后由 ancientcc 于 2017-3-11 21:30 编辑

tchild、restore_map_from
(, 下载次数: 1885)
  1. struct tchild {
  2.         unit* window;
  3.         std::vector<unit*> rows;
  4.         std::vector<unit*> cols;
  5.         std::vector<unit*> units;
  6. };
复制代码
rows。网格中各行的配置。
cols。网格中各列的配置。
units。网格中各单元的配置。各单元在units中存储是“Z”序。

功能:在大地图画出child指定的网格。
  1. void unit_map::restore_map_from(const unit::tchild& child, const int xstart, const int ystart, bool create)
复制代码

child此次要加载的网格
xstart、ystart此个网格要加载到的、开始的单元坐标
create是否要把从child解析出的单元写入map_、coor_map_。什么时候用true?内容发生变动,像把占位控件变成列表,于是根网格已被从大地图抽出,用它在大地图重画根网格


它会修改child中window的cover_width、cover_height字段。
  1. struct tcell_setting {
  2. struct {
  3.         int cover_width;
  4.         int cover_height;
  5. } window;
  6. };
复制代码
这两个字段指示要在地图画出此个网格须要的矩形尺寸,单位是栅格。图中第一个3x1网格,它当中有格子含有孩子,它的cover_width=4、cover_height=7 。第二个1x3网格,当中没有格子含有孩子,它的cover_width=4、cover_height=2 。

在恢复时,垂直、水平都有个serial_gap,这个值固定是1。cover_width、cover_height不包含最右、最上那个serial_gap。

  1. class unit {
  2.         std::vector<tchild> children_;
  3. };
复制代码
children_是该unit中有子孩子。在图中,一个孩子对应一个网格。tgrid时,children_长度1;listbox时,长度2。


作者: ancientcc    时间: 2017-11-1 20:35
标题: 预览
本帖最后由 ancientcc 于 2017-11-1 21:19 编辑

通过预览,可以看到整窗口布局,但看不到和实际布局一样的控件尺寸。和实际布局最大区别是,对不可扩展控件,它的标称尺寸都是(preview_widget_best_width, preview_widget_best_height)。也就是说,实际布局时标称高度是1像素的图像,在预览图中也是preview_widget_best_height。
布局规则

作者: ancientcc    时间: 2019-10-23 22:04
标题: 导出app时,studio随机非法退出
导出app包过程中,复制完文件后进入编译*.bin,会随机出现非法退出。经验看这非法有以下几个特点。1)这非法出现在Main Thread线程,而不是在编译*.bin的SignalThread。2)似乎总是和t_string有关。下图是一个例子,是在t_string::~t_string中。
[attach]134[/attach]
对应此时的SignalThread状态。
[attach]135[/attach]
分析原因。我初步怀疑是language_counter值发生改变造成的。在进入编译*.bin前,studio会调用teditor_::reload_extendable_cfg(),后者会调用t_string::reset_translations(),从而把language_counter。同于加1后,t_string_base::str()值就要被重新计算了,t_string_base::str()返回的又是“const std::string&”,如果有代码不慎把把这返回值存成指针,那就会发生错误。

以上只是猜测,于是暂时修改方法是在teditor_::reload_extendable_cfg()不调用t_string::reset_translations(),让导出app的整个过程中language_counter不会发生变化。看今后导出app是否还有导常,再判断这想法是不是对的。

——如果真是这原因造成,那调用t_string::reset_translations()时机得特别留意了,一定要等到app中已没有窗口,窗口中变量太多,没法确定language_counter变动是否会给自已造成问题。




欢迎光临 SDL中文论坛 (http://www.libsdl.cn/bbs/) Powered by Discuz! X3.3