SOUI软件,soul系统

SOUI笔记

 

soui模块是整个项目的核心,除utilities模块外,其它模块都为soui模块服务。

utilities模块提供一些工具类,主要包含pugixml,及一个String类。

soui-sys-resource模块是一个纯资源DLL,提供一些内置控件必须的资源。

demo模块是SOUI界面库的功能演示程序。

translator实现一个从XML文件加载多语言翻译资料的类似QT的语言翻译模块。

render-gdirender-skia分别实现两个基于GDISKIA的渲染模块,它们可以相互替换。GDI的优点是体积小,但是对于apha通道支持能力有限;而skia的优点是速度快,全面支持alpha通道,但是程序体积会有所增加, DLL编译后有1M,压缩后有600K。

resprovider-zip实现了一个从ZIP文件加载程序资源的模块。加上soui中内置的两个资源加载模块,SOUI可以选择从文件中,从EXE资源中及从ZIP文件包中加载程序资源。

script-lua是一个脚本支持模块,目前只实现了几个基本类的导出,要使用更多SOUI类型,还需要增加导出代码。

 

DLL_SOUI:代表将SOUI模块编译生成一个DLL,没有该参数则生成LIB;

USING_MT:代表使用MT方式连接CRT,否则采用MD方式;

CAN_DEBUG:为release版本生成调试符号;

USING_CLR:项目提供“公共语言运行时”支持;

 

使用XML布局整体上可以划分为两种类型:锚点布局和流式布局。

所谓流式布局就是一个控件只描述控件的大小,而不关心位置,它的最终显示位置由布局器计算出来,如Android及DuiLib里实现的VerticalLayout及HorizontalLayout等。

锚点布局和流式布局不同在于,它具体的定义一个控件的4个点的坐标位置,但这些位置通常不是绝对位置,而是一个相对于父窗口不同锚点的位置,当父窗口大小改变时,子窗口也会根据锚点的位置变化自动调整。布局的人使用锚点布局时很清楚一个控件最终会显示在哪,不需要很强的想象能力。

SOUI布局全部采用相对坐标,由pos,offsetpos2type), size, width,height 这几个个窗口属性配合指定。

 

size, width, height属性

size, width, height比较简单,是用来指定窗口的大小的,只有在pos属性指定的值个数不为4时生效。

size是2014年底增加的布局属性,size=”width,height”。

width, height可以有3种值:full,-1,非负整数。

为full时,代表高度或者宽度和父窗口的客户区大小相等。

-1代表根据窗口内容自动计算窗口大小。

非负整数直接指定窗口大小。

在图片控件中,控件是指定的皮肤默认大小。
在文本控件中,还可以指定一个maxWidth属性,控件是文本内容的大小,但宽度不超过maxWidth。

pos属性

pos属性可以指定4个值,也可以指定2个值。指定4个值时,分别代表控件的left,top,right,bottom,指定两个值时代表控件的x,y,具体位置还依赖于另外3个参数。

指定4个值时,pos目前支持7种标志:|,%,[,],{,},@

“|”代表参考父窗口的中心;如|-10代表在父窗口的中心向左/上偏移10象素。

“%”代表在父窗口的百分比,可以是小数,负数。如:%40代表在父窗口的40%位置,%-40则等价于1-40%)。

“[”相对于前一兄弟窗口。用于X时,参考前一兄弟窗口的right,用于Y时参考前一兄弟窗口的bottom

“]”相对于后一兄弟窗口。用于X时,参考后一兄弟的left,用于Y时参考后一兄弟的top

“{”相对于前一兄弟窗口。用于X时,参考前一兄弟窗口的left,用于Y时参考前一兄弟窗口的top

“}”相对于后一兄弟窗口。用于X时,参考后一兄弟的right,用于Y时参考后一兄弟的bottom

@”标志用来指定窗口的大小,只能出现在pos属性的第3,4个值中,用来标识窗口的宽度。当后面的值为负时,代表自动计算窗口的宽度或者高度(2015.3.3新增加解释)。

注:“|“, “[” ,”]”, “{“, “}” 中指定的值都可以为正或者负,正时向右或者下偏移,负则向左或者上偏移。

     当没有上述标志时,负号代表参考父窗口的右边或者下边缩进绝对值位置。如:pos=”0,0,-0,-0″代表占满父窗口。而pos=”10,10,-10,-10″则代表在父窗口的基础上向内全部缩进10点。

@:指定窗口的size。只能用于x2,y2,用于x2时,指定窗口的width,用于y2时指定窗口的height。注:只能为正值,负号会自动忽略。

其中“{”和“}”是SOUI在DUIENGINE的基础上新增加的布局标志(SOUI是在DUIENGINE的基础上全面重构而来)。

注意!!!由于系统运行向前及向后引用,理论上有可能出来循环引用,导致界面布局失败,因此在使用”[“,”{“,“}” 和”]”这几个标志时需要特别注意。

当pos只指定了x1,y1时,通常需要和offset或者pos2type),size或者width,height)配合使用。

offset及pos2type属性

offset属性包含两个值,用来代表窗口在通过其它布局属性完成后的偏移量:如offset=”-1,-1″,该offset表明窗口向左方及上方各平衡一个窗口大小的单位。

Uires.idx:定义资源索引;

可以定义UIDEF,ICON,CURSOR,LAYOUT,IMGX,GIF,rtf,script,translator这些资源类型

init.xml:定义全局UI的属性。

在UIDEF下,可以定义font,string,skins,style,objattr五个子节点。

 

布局文件中定义的skin及style只在当前窗口的生命周期期间有效,类似于C++函数中的局部变量,窗口关闭后这些对象会自动析构。我称之为局部skin及局部style。

窗口中控件的布局信息定义在root节点中。

src定义如何去引用在另一个XML文件中定义的布局XML

 

Skin中节点类型

imglist是一个图片序列对象,可以包含一组小图片。imgframe是一个提供九宫格显示的绘图对象,SSkinImgFrame派生自SSkinImgList,因此imgframe也拥有imglist的全部属性。button绘图对象是绘制按钮时使用的,它使用渐变实现绘制按钮的4种状态。

 

gradation渐变绘图对象scrollbar滚动条皮肤,虽然它派生自imglist,实际上imglist中实现的属性在scrollbar中没有意义。

 

在style节点中,定义UI布局中SOUI窗口对象的属性集合,它们是SWindow对象的属性,所有SWindow对象都可以通过class属性来引用style节点中定义的属性集合。

7、控件的默认属性。

SOUI可以为每一类UI控件通过objattr来提供一种默认属性集合,以减少在XML布局中的重复定义。

Include节点:

include只有一个属性:src,src定义如何去引用在另一个XML文件中定义的布局XML

SOUI系统中实现了3种资源加载方式,分别是从文件加载,从EXE的资源加载及从ZIP压缩包加载

<!–tab中必须包含有name,pos,tabSkin,iconSkin四个属性,若没有pos属性,不会显示图片到界面上;                                        还有的属性:font表示字体,adding表示字体的大小;                                                                                                              tabAlign表示tab的位置,left或者top;tabHeight表示tab的高度;                                                                                                    show=”1″表示显示,0表示不显示,默认为1;                                                                                                                                  text-y=”50″表示字体的y坐标;                                                                                                                                                      colorText表示文本的颜色;                                                                                                                                                                icon-x表示icon向右15个坐标单位;                                                                                                                                        focusable表示窗口是否接受焦点,0表示不接受,1表示接受,默认为1接受;                                                                                tabInterSize表示tab标签的间距;若是top,则tabPos表示tab据左边的间距,若是left,则表示tab据上边的间距;

curSel表示默认选中的索引–>

 

 

 

 

 

 

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注