1. BOLT引擎正式提供union版本
union版本在文件形式上,合并XLGraphic.dll/XLLuaRuntime.dll/ XLFSIO.dll/XLTS.DLL/XLGraphicPlus.dll/libpng13.dll/zlib1.dll/libexpat.dll以及c、c++和atl的运行库到XLUE.DLL里面,但是功能和正常版本保持一致,union版本的详细说明,请参考在线文档:
http://xldoc.xl7.xunlei.com/0000000018/00000000180001000047.html
2. 全新的字体&文本架构
新版引擎采用了字体引擎层(freetype+gdi)、字模层、字体位图层,文本排版引擎(包括智能分词器等),文本渲染引擎的五层架构,在性能考虑上有多级缓存、垃圾回收策略的设计,新的架构下逻辑更加清晰、优雅,扩展功能更加方便,freetype和gdi两个字体引擎也很大程度上做到了一致,并且文本排版效果也基本相同,这也就意味着在freetype和gdi两种模式下可以无缝切换,不用再担心排版的各种问题了
3. 全新字体反走样技术,更清晰的渲染效果
新版引擎的使用了独特的基于subpixel的颜色抖动技术,可以非常好的模拟windows下的ClearType效果,字体渲染效果清晰度大大提升,并且不再受系统是否开启ClearType效果制约,所有系统下都有一致的渲染效果,可以给各产品带来更加优秀的产品体验!
4. 文本渲染性能大幅度提升
基于全新的架构+多重缓存+高效文本渲染器,无论是freetype还是gdi性能都有大幅度的提升,其中GDI的渲染性能有接近一千倍的提升,freetype在默认模式(LCD)下也有数十倍的提升。
5. 更优秀的内存性能
新版字体引擎引入了多级缓存机制,在保证字体渲染性能的情况下,内存占用也减少,尤其是freetype,现已经去掉了freetype自带的缓存机制,使用我们内部的缓存机制。并且在此基础引入了垃圾回收策略,内存占用方面有更大的可控制性
6. 文本格式增加XLTEXT_DT_VISIBLEWIDTH属性,可以获取整行的最小可显示宽度
该属性主要用以图形库的XL_GetSingleLineTextExtend接口,如果不指定该属format,那么获取的文本宽度是可用以排版的宽度;如果指定了,那么获取的是可显示的宽度,这种情况下包括了LCD模式下的超距抖动色区域和斜体字的悬垂区域的大小,确保获取的宽度可以显示所有文本内容而不被剪裁。 TextObject默认会使用该属性
7. 图形库依赖的freetype库更新
freetype库更新到使用官方的最新稳定版本:2411版,详细改动可参考freetype官方网站: http://freetype.org
8. 完善引擎里的光标策略
光标策略做了较大修正,和之前版本的光标策略基本兼容,具体内容参考以下在线文档:
http://xldoc.xl7.xunlei.com/0000000018/00000000180001000051.html
9. 增加核心功能:增加OnControlMouseWheel事件
该事件是为了方便控件开发而增设的,可以更好的在大粒度上操控鼠标滚轮事件,从而避免频繁调用RouteToFather或者消息重定向函数。事件签名式和OnMouseWheel一致,触发原理和OnControlFocusChange,OnControlMouseEnter一致,当一个对象收到mousewheel事件后,会向上寻找所有属于control的父对象,依次触发该事件
10. 核心功能扩展:layoutobj的OnFocusChange事件增加焦点来源字段
扩展后的事件签名式如下:
ret,handled,callnext OnFocusChange(self, bool getFocus, layoutobj oppositeObj, string focusReason)
其中reason指定了导致这次焦点切换的原因,可以取值如下:
l system 引擎内部原因导致,比如用户点击,窗口获取焦点等
l user 用户显式调用SetFocus导致
l tab 引擎的导航系统导致
11. 增加核心功能:元对象增加OnAlphaChange基础事件
alpha属性是所有元对象的基础属性,考虑到在开发中很多情况下需要监视该属性的改变,本版本增加了该事件,事件原型为
result handled, callnext OnAlphaChange(self, int newAlpha, int oldAlpha)
所有元对象和xml自定义控件均支持该事件
12. 核心功能扩展:AlphaChangeAnimation增加recursive相关属性和方法,支持递归改变子对象的alpha值
根据一些产品的实际使用和反馈,AlphaChangeAnimation很多时候不止需要改变绑定obj本身的alpha,而且还需要递归的改变所有子对象的alpha,所以本版本起,增加recursive属性和相应的方法,方便对一组对象做统一动画。
属性配置如下: <recursive>1</recursive>
方法如下: void SetRecursive(bool rescursive)
默认值是fasle
13. 完善元对象事件解析:一个事件在指定redirect情况下,可以不用指定func和file
现在一个事件可以直接redirect,而不用附带file和func了,形如
<eventlist>
<event name="OnRButtonDown" redirect="tree:b2:x3"/>
</eventlist>
14. WindowlessFlashObject绘制增加支持mask
现在MaskObject对WindowlessFlashObject也生效了,在界面上使用flash素材的自由度更大
15. Animation增加GetNeedLevel的方法
该方法和SetNeedLevel为对称方法,原型如下
int GetNeedLevel()
16. 完善Animation的动画定义level,可以取值-1
取值-1标志着该动画不受全局动画执行级别的影响
17. 规范XLUE主模块对XlGraphicPlus.dll和XLTS.dll 的加载
修正后的加载策略为:只从XLUE.dll同目录加载,不再尝试从其它目录加载
18. hostwnd增加OnBeginDrag和OnEndDrag事件
这两个事件是在hostwnd作为drag源,并开始/结束一个drag操作时候触发,可以用来做一些准备和收尾工作
事件原型为:
result,handled,callnext OnBeginDrag(self)
result,handled,callnext OnEndDrag(self)
19. XLUEOPC.dll去除对XLGraphic和XLFSIO两模块的依赖
20. 完善TurnObjectAnimation的GetBindRenderObject接口
现在这个方法可以返回绑定的front和back两个对象了
local frontObj, backObj GetBindRenderObject()
21. XLGraphic字体强制映射到truetype字体
为了避免指定了非truetype/opentype字体,导致图形库无法正常渲染,强制映射此类字体到默认的truetype字体
22. XGP增加XLGP_LoadCursorFromStreamEx接口,支持加载cur和ani类型光标
23. 完善XGP加载光标策略
完善了调用系统接口加载ani类型光标,避免某些情况下加载失败
对于cur类型光标,优先使用内部的parser
24. 完善光标类型资源cursor,支持ani和cur类型
新的策略将依据文件后缀名来判断光标类型,支持.cur和.ani两种类型光标资源
25. 日志版的错误提示MsgBox增加限制,避免日志版连续弹框导致的堆栈溢出
现在限制是最多同时存在20个弹框,或者主线程堆栈大小不超过800kb;如果超出上述限制,那么不再弹框提示
26. 完善LuaRuntime的线程安全监测,增强对decoda的支持
由于decoda会在辅助线程里面,操作主线程的luastate,所以在调试过程中会导致lunruntime出现线程安全监测的弹框;版本起对这种情况作了排除
27. RichEditObject的快捷键支持,排除ctrl和shift或者atl的组合键情况
现在只有ctrl+字母的两者组合才会触发相应操作,而ctrl+shift+字母,ctrl+atl+字母的情况不再触发相应操作
28. EditObject默认开启nohidesel属性
该属性开启后,EditObject的选中内容,在失去焦点后,也会呈现选中状态,和RichEditObject保持一致。
目前EditObject没有提供属性或者方法来控制该属性
29. 修复动画在Stop时候,某些内部对象不会立刻删除的bug
30. 完善LuaEnv的移除GlobalApi、Class、GlobalObj策略
新的策略确保在移除这些全局class\api\obj的时候,同时会清除当前LuaEnv关联的所有luaruntime里面已经注册的对应的元表和方法,从而避免可能导致的崩溃
31. 完善元对象的焦点策略
智能焦点策略增加以下修正: 如果一个元对象对一个或者多个键盘消息进行了重定向,那么该元对象也可以接收焦点
32. 日志版禁用FPO优化,方便调试和崩溃定位
33. 日志版XLGraphic的字体接口增加线程安全检测
需要注意,图形库的字体、文本相关接口,只可在单线程里面使用,切忌多线程操作字体、文本等接口
34. 完善FreeType字体引擎的字体链接策略,修正不可使用默认字体链接的bug
35. 完善FreeType字体引擎,在解析字体名称时候,对空格等字符的兼容性处理
36. 强化引擎可接收hostwnd/hwnd为参数的所有接口,也可接收number类型句柄值
传入的number类型参数会当做hwnd句柄值来解释
37. 修正EditObject的光标策略
基于win32平台的textservice内核的EditObject,修正后的光标策略,不再依赖系统光标,而是使用引擎自身的统一光标策略,避免出现冲突
38. 修正多行排版的末行排版策略
修正后的策略为,如果多行区域高度不足以容纳一行,那么会对这行剪裁后显示,而不是不显示
39. 修复HostWnd的GetWindowBitmap,在对象树绑定原点不在(0,0)时候的出错的bug
40. WindowlessFlashObject的local模式,提供对等的回调函数
WindowlessFlashObject的支持回调的接口,在使用local service模式下,提供同样的回调支持,方便开发者做统一处理
41. 修正HitTest和DragHitTest的命中测试逻辑
新的逻辑尽量避免对较小zorder对象进行回调处理(OnHitTest和OnDragQuery),避免由此可能导致的错误
42. 完善XLUEIPC的等待机制
为了适应更广泛的应用环境,现在异步等待不再做线程限制,也就是同一个线程里面可以发起多个异步等待,但同步等待仍然限制为同一个线程最多只有一个等待
43. RichEditObject默认文本引擎改用GDI
44. 修复了RichEditObject选中绘制,在某些情况下可能出错的bug
45. 修复TipsHostWnd在auto模式下,在DelayCancel时,某些情况下可能导致对象树无法删除的bug
该bug会在特定情况下触发,从而导致对象树的泄露,本版本已经修复
46. 修复WindowlessFlashObject在某些情况下设置无效cursor的bug
47. 修正TextObject属性解析
主要修复了wordBreak属性默认不生效的bug
48. 修正文本多行排版的剪裁策略
修正后的策略为: 第一行强制显示,不管是否被剪裁;第二行起,如果指定了省略属性,那么如果一行不能完全显示,那么不予显示;没有指定省略属性,强制显示到最后一行,即使被剪裁
49. 修复远程flash在初始化失败的情况下,没有事件通知的bug
50. 修复WindowlessFlashObject某些异步调用回调函数返回值无效的bug
对于某些返回bool类型的函数的异步调用模式,比如LoadMovie,返回值会恒为false,新版本已经修复
51. 修复XLUEIPC通道在断开连接时候,在某些情况下可能重入的bug
52. 修复GetMultilineTextExtend在多行情况下,宽度可能不正确的bug
53. 修复ts一处字体格式bug
54. 修复图形库文本排版,在居中对齐情况下可能出错的bug
55. 完善hostwnd对toolwindow和appwindow属性支持
56. 日志版去除WindowlessFlashObject一处无效的错误提示(迅雷7反馈)
该错误提示在创建flash服务过程中,对象自身销毁会导致出现
57. 修正文本排版的一处居中对齐的bug
该问题在文本居中对齐,并且显示区域不够需要省略情况下出现,现在修正为最多显示三个”.”,并且确保头部文字不被剪裁
58. 修正RichEditObject背景颜色无效的bug
59. 修正XLUEIPC的SyncCall、SyncCallReply等同步调用接口的返回值
修正后的返回值,可以正确反映下层信道的状态,包括超时等出错情况下,可以返回相应的错误码
60. 修正FreeType的字体创建策略,在字体未安装的情况下,不再最底层逻辑进行替换,避免导致FT_Face重复而可能导致的崩溃
61. 修复元对象GetMaskPos方法,在没有配置mask情况下可能导致的崩溃
62. 修复了FreeType字体引擎,某些情况下size为空,可能导致的崩溃
63. 修复XLUEIPC的stream读写int64可能导致的崩溃
64. 修正一处XLLuaRuntime的XLPrintStack的可能导致的内存泄露
65. 修复动画一处可能的崩溃