1.3.0 (2019-10-07)
- C++ "operator" 关键字冲突 (5a5ba8c)
- css: 设置字体样式解析器的 style_handler 后未起作用 (6869683)
- display: X11Surface_SetCaptionW() 内存泄漏 (484c3d7)
- font: 当 font_size > 18 时字体位图获取失败 (d6315c5)
- gui: 部件的默认边框颜色应为透明 (transparent) (5164955)
- gui: 当部件 pointer-events 为 none 时的事件目标选择问题 (0f26c8b)
- gui: TextEdit 占位符未起作用 (d827767)
- gui: mousemove 事件应在 mouseout 事件前触发 (5020b91)
- gui: 部件属性值应始终有效 (4b0a2ed)
- ime: 输入法候选词窗口定位问题 (#36, #175) (1107f91)
- renderer: 部件内容区渲染不正确 (f8b0f8b)
- util: Object_Operate() 中的对象类型判断不正确 (a326e8c)
- util: ParseUrl() 解析结果不正确 (3f9450c)
- 添加 LCUI_GetVersion() (de40c7c)
- 添加圆角边框渲染,改进盒阴影渲染 (#174) (f36d071)
- 添加 include/LCUI.h 文件 (#173) (113af6a)
- builder: 标签名称可以是一个已存在的部件类型名称 (4f6a01c)
- css: 将 CSSFontStyle_* 系列函数改为公共函数 (568c915)
- graph: 添加 LCUI_OverPixel() (d8075d9)
- gui: 添加 canvas 部件 (e246843)
- gui: 添加 Widget_CollectReferences() (811585b)
- gui: 添加 Widget_Each() (2d7d1ee)
- logger: 支持设置日志等级 (173b92f)
- scrollbar: 从容器捕获 touch 和 mousewheel 事件 (f2f9162)
1.2.0-beta (2019-06-17)
- gui: 为部件原型设置默认方法 (e68e8e5)
- gui: 添加 TextEdit_BindProperty() (c9d8ded)
- gui: 添加 Widget_BindProperty() (0d3fb68)
- gui: 添加 Widget_SetStyleString() (5163363)
- gui: 添加 Widget_SetText() (02714bf)
- textedit: 添加 TextEdit_GetProperty() (512706e)
- util: 添加对象包装和操作集 (241c652)
- util: 添加 Object_ToString() (13465c7)
1.1.0-beta (2019-03-09)
- builder: 在追加部件前应该将其初始化 (f12e00b)
- gui: focus 事件和 "focusable" 属性解析问题 (d9a39a5)
- gui: 当 pointer-events 为 none 时应该忽略鼠标事件 (fc54a64)
- gui: TextEdit 应该在失去焦点后重置光标的位置 (8de4e71)
- gui: TextEdit_SetTextW() 未清空之前的内容 (51eef68)
- gui: Button 的高度与 TextEdit 不一致 (5a918da)
- gui: 设置部件外边距时会导致宽度计算错误 (#167) (d14023e)
- thread: LCUIThread_Join() 未等待线程退出 (4ddb833)
- util: 解码后的字符串长度不应将结束符计算在内 (93f3d77)
- worker: 运行任务时不应阻塞任务队列 (2b41f54)
- gui: 添加支持自定义部件更新规则 (bdd1d1c)
- gui: 添加支持限制最大的子部件渲染数量 (ec5e0d6)
- gui: 添加
only_on_visible
规则,用于允许仅在部件可见时更新它 (93049c4) - gui: 添加
cache_children_style
规则,用于缓存子部件样式 (50cc6b2) - gui: 添加
first_update_visible_children
规则,用于优先更新可见的子部件 (4cd6fdc) - gui: 添加部件边框样式相关操作接口 (e8d52df)
- gui: 添加 Widget_GetClosest() (e740138)
- gui: 添加 Widget_SetHashList() (f466dee)
- gui: 自动为事件名生成 id (fee31b0)
- gui: Widget_SetAttribute() 将会调用 proto->setattr() (19992d1)
- textview: 添加 TextView_SetColor() (3a7b53f)
- util: 为 LCUIRect_ValidateArea() 添加返回值 (2fa6cf3)
- util: 添加 strhash() (ebf843f)
- util: 添加 strpool (c843df1)
- util: 添加 strreplace() (409395d)
- util: 在 Windows 上默认使用 OutputDebugString() 输出日志 (79ec21b)
- css: 更改样式表存储结构以减少内存占用 (9cc2957)
- css: 减少重复的 DictType 内存分配 (01fd3f6)
- gui: 改进部件销毁性能 (87aff87)
- gui: 改进 Widget_Empty() 性能 (1654963)
- gui: 减少部件的样式表的内存占用 (3790fbd)
- gui: 移除 TextView 部件中的互斥锁 (6340d60)
- gui: 使用 strlist 保存 classes 和 status (f611936)
- gui: 更新部件列表的排序方法 (e9dbcea)
- gui: 改用 LCUI_STYPE_INT 代替 LCUI_STYPE_VALUE (23090eb)
- renderer: 改进渲染目标的选择方法 (1df08b6)
1.0.0-beta.4 (2018-11-19)
- dirent: LCUI_ReadDirW() UNINITIALIZED READ (dd610ad)
- display: 调整窗口尺寸时会暂停渲染 (#164) (8ad667a)
- display: 一帧内有过多的重复的脏矩形 (b5d9040)
- font: 在加载完字体文件后设置默认字体会失败 (9b4c005)
- font: 在模块被重新初始化后,字体编号未重置 (d75b4ca)
- gui: 当部件的显示角色改变后应该更新布局 (96c1cef)
- gui: 当模块被销毁时应该清空废弃的部件 (1ad6be1)
- gui: 块级元素的默认宽度应该为 100% (adcb9e7)
- gui: 在销毁部件前应该解除结点 (3249490)
- gui: unlink 事件被重复触发 (89faa5d)
- gui: 部件背景图未渲染 (e76f3f9)
- gui: Widget_AutoSize() 不应该改变静态的宽度或高度 (8bee9c2)
- ime: 无法正确识别非 qwerty 键盘布局的按键输入 (#147) (4b1f050)
- layout: "left: auto" 被计算为 "left: 0" (f4990da)
- platform: linux 帧缓存驱动未被销毁 (#157) (87f79f0)
- renderer: 当部件整体透明时,子级部件未正确渲染 (#160) (d13b554)
- renderer: 有透明效果的部件,渲染不正确 (6668165)
- textlayer: 中文文本断行错误 (1e5a262)
- textlayer: isalpha() 断言失败 (cd39a46)
- textview: 在改变 "content" 属性后没有效果 (d1ab50d)
- textview: 设置文本后未更新自身尺寸 (31e0582)
- util: LCUI_DirEntry::name 的值不正确 (367febe)
- worker: 工作线程内存访问越界 (5a7e2c0)
- 当不支持 jpeg 和 png 时连接器会报错 (2bbabe1)
- PACKAGE_VERSION 未定义 (70660de)
- 当系统中存在窗口管理系统时应该隐藏鼠标指针 (acf9454)
- LCUI_GetAppId() 返回值不正确 (46ec607)
- 在 FreeBSD 上编译时,"linux/input.h" 文件不存在 (7d95f3f)
- 在 FreeBSD 上编译时,ENODATA 未定义 (2cd0b27)
- 未解析的外部符号 _Graph_IsValid (1328a2d)
- builder:
<resource>
支持加载 xml 文件 (d5e162c) - display: 自动禁用窗口最大化按钮 (#164) (82fad1b)
- event: 添加 ctrl_key 和 shift_key 成员至 LCUI_KeyboardEvent (6f5f17c)
- gui: 添加 Widget_SetOpacity() (e6ad163)
- gui: 添加 Widget_SetVisibility() (145d9ee)
- gui: 添加 Widget_SetVisible() 和 Widget_SetHidden() (2f581b8)
- gui: LCUIWidget_ClearTrash() 返回值为实际销毁的部件数量 (6262f20)
- linux: 为 x11 系统添加鼠标滚轮事件处理 (#54) (1061592)
- linux: 使用 fontconfig 定位字体文件路径 (2932246)
- textview: 在加载新的字体文件后刷新所有 textview 部件 (3fcfa99)
- util: 添加 OpenUri() (ec20c99)
- 添加 LCUI_MAX_FRAMES_PER_SEC 宏定义 (6fa2995)
- 添加 LCUI_MAX_FRAME_MSEC 宏定义 (7abc901)
- font: 因字体缓存位置计算错误而导致的 DeleteFont() 段错误 (5465c6b)
- timer: 定时器线程在被创建后可能会立刻退出 (0b01f88)
- util: 在 Unix 系统下编译会报错:'struct dirent' has no member named 'd_reclen' (#141) (0416c42)
- platform: 添加 linux 平台的帧缓存(FrameBuffer)驱动 (6015838)
- platform: 添加 linux 平台的键盘驱动 (ad3348e)
- platform: 添加 linux 平台的鼠标驱动 (0ff7b70)
- 一些内存泄露问题 (#135) (9995b23)
- gui: 部件大小计算错误 (095f4b8)
- renderer: 部件内容区域计算错误 (#122,#123) (0f81863)
- renderer: 部件内容溢出 (#144) (2a923a6)
- thread: 线程在退出后未释放之前申请的内存资源 (402bc03)
- widget: 滚动条未取消事件冒泡 (#145) (7dd60ac)
- widget: Scrollbar_BindBox() 在滚动条初始化后未能正常工作 (196f47c)
- widget: Widget_GetOffset() 返回的结果未包含内间距 (0a893f4)
- widget-event: 部件触控事件中的触点坐标未根据全局缩放比例进行转换 (a40eda2)
- worker: 工作线程获取新任务前未进入阻塞状态 (#134) (8dae96f)
- css: 添加支持解析 "border-left: 0;" (30de5b8)
- timer: 添加更具语义的 LCUITimer_SetTimeout() 和 LCUITimer_SetInterval() (f032f6f)
- widget-event: 添加 "link" 事件, 重命名 "remove" 事件为 "unlink" (8c1d105)
- widget: 重命名滚动条的属性名称和 CSS 选择符 (d397914)
- font: 添加支持按字重(font-weight)和风格(font-style)选择字体
- textlayer: 添加
[bgcolor]
标签支持,用于设置文本背景色 (#110) - textlayer: 添加
[i]
标签支持,用于设置文本为斜体 (#115) - textlayer: 添加
[b]
标签支持,用于设置文本为粗体 (#112) - textlayer: 使用 FreeType 字体引擎默认的方式获取空格宽度
- widget: 为 textview 添加内容修剪支持,启用后会去除文本首尾空白符 (#97)
- widget: 添加锚点(anchor)组件 (#105)
- widget: 为 textview 添加 word-break 属性支持,用于设置单词断行方式 (#71)
- widget: 添加
WTT_RESIZE_WITH_SURFACE
任务类型,用于将表面(surface)大小与部件同步 (#104) - widget: 添加 Widget_UnbindEventByHandlerId() 函数,用于根据事件处理器标识号取消事件绑定
- css: 添加 font-face 规则解析器,可用于在 css 代码中定义字体信息 (#95)
- css: 为 url() 的解析器添加支持处理相对路径 (#98)
- css: 添加针对 justify-content 的属性解析器 (#117)
- css: 为 border 的属性解析器添加支持解析 "border: 0"
- css: 为 line-height 的属性解析器添加支持解析 "line-height: 1"
- layout: 添加简单的 flex 显示方式和 justify-content 属性支持 (#117)
- bulder: 为
<widget>
添加短名称<w>
(#103) - core: 添加 LCUIWorker 用于处理异步任务 (#106)
- textlayer: 文本没有垂直居中对齐 (#100)
- widget: textview 的高度计算错误 (#111)
- css: 样式表选取问题,同名选择器会共用同一优先级 (#113)
- graphic: Graph_FillRectARGB() 段错误 (#110)
- linux: 设置 "--enable-video-ouput=no" 选项后会导致链接器报错
- renderer: 部件位置为非整数时,在渲染时边框会时有时无 (#108)
- layout: 改进部件尺寸计算
- layout: 改进块(block)和内联块(inline-block)元素的布局处理
- font: 改进字体数据的存储和操作方式
- mainloop: 设置每帧运行任务队列中的所有任务
- mainloop: 设置每帧至少更新一次部件树
你可以查看此拉取请求来了解详细的代码变更记录。
- 调整代码结构
- 改进 TextView 部件
- 改进 TextEdit 部件的光标定位与文本渲染
- 改进部件的盒形阴影(box-shadow)绘制
- 添加适用于 UWP 应用的驱动支持,示例应用代码在这里。
- 改进对高分屏的支持
- 添加 dp、sp 度量单位,功能与 Android 中的同名单位相似
- 添加缩放支持,可根据屏幕像素密度设置合适的缩放比例
- 完善自动化构建和测试
- 添加单元测试
- 添加代码覆盖率测试
- 引入 valgrind 内存检查工具
- 解决所有内存泄露和内存访问越界问题
- 解决部件布局功能中存在的一些问题
- 解决 jpeg 图像读取器有时会读取失败的问题
- 其它已知 BUG 修复
你可以查看此拉取请求来了解详细的代码变更记录。
- 改进 bmp、jpeg、png 图片的读取接口
- 添加滚动条(Scrollbar)部件
- 改进按钮(Button)部件
- 改进文本显示(TextView)部件
- 改进文本编辑(TextEdit)部件
- 改进部件的类型、事件、布局及样式处理
- 改进图形界面的性能
- 添加触控支持
- 添加 CSS 和 XML 支持
- 移除 Linux 的帧缓冲(FrameBuffer)支持
- 添加对 Linux 的 XWindow 的支持
- 添加对 Windows 通用应用平台(UWP)的简单支持
- 改进对 Windows 的支持
- 添加部分文档
- 修复部分已知BUG
- 限制每秒图形更新帧数最大为100,减少CPU占用。
- 调整事件处理模块,添加事件连接的解除功能,部分函数接口做了修改。
- 更新定时器功能模块,修复已知的BUG。
- 更新TextBox和Label部件,优化文本绘制速度,修复部分已知BUG。
- 添加文本的自动换行功能,但仅适用于静态文本显示,若在已启用自动换行功能的TextBox部件中进行文本编辑,可能会出现问题。
- 解决多线程进行文本渲染时导致的文本位图异常、程序崩溃等的问题,现已将文本渲染任务转由主线程单独执行。
- 修复GUI部件的堆叠顺序处理功能中的已知BUG。
- 解决在每次处理GUI部件消息时未完全处理掉全部消息的问题。
本次更新主要针对作者应用LCUI开发的2D格斗游戏,LCUI中的部分已知BUG并未解决,作者计划会在后续版本中修复这些BUG。由于该游戏主要在windows平台上进行开发和测试,因此,虽然部分功能模块对windows平台支持良好,但并不保证也能正常支持GNU/Linux平台。
- 改进对windows平台的支持,优化了图形输出,改善了对键盘和鼠标的输入支持。
- 可设置视频输出模式,仅在windows平台下有效。
- 解决部分模块的线程安全问题。
- 优化部件图形资源的内存占用。
- 改进部件的消息处理。
- 完善部件的堆叠顺序处理。
- 调整部件的点击事件和拖动事件的处理。
- 部件支持通过设置z-index值来调整堆叠顺序。
- 修改window部件和button部件的风格。
- 添加输入法框架和默认的输入法,目前只支持输入英文字母、数字、符号。
- 对于内置点阵位图的字体文件(例如:宋体),现已能够正常显示字体的点阵位图。
- 解决其它的细节问题。
- 修改大部分模块的函数命名风格。
- 解决多窗口显示顺序异常的问题。
- 完善GUI部件处理模块。
- 添加事件循环,完善GUI部件的事件机制。
- 完善线程管理模块,封装了linux和win32中常用的线程管理及互斥锁相关的函数。
- 添加win32下的图形输出模块,由于水平有限,目前只能在窗口客户区内输出图形,有待完善。
- 添加字体管理模块,完善字体位图处理模块,优化字体位图的载入速度,减少内存开销。
- 新增GraphLayer模块,用于管理每个部件的图层,LCUI输出的图像主要由该模块处理生成。
- TextBox部件添加占位符功能。
- 添加MessageBox。
- 解决其它的细节问题。
目前已初步实现在windows系统上运行,可直接使用Visual Studio 2012编译此项目,但存在一些问题,有待完善。
- LCUI类改为LCUIApp类,部分部件的C++类继承自LCUIWidget类,取消之前的类嵌套。
- 重新规划项目源代码,为以后的跨平台、适应不同环境而做准备。
- 新增文本框和滚动条部件,文本框还只具备基本功能,有待继续完善。
- 新增TextLayer模块,用于处理文字位图的绘制。
- 修改label部件代码,label部件和文本框部件的文本位图的绘制都由TextLayer模块实现。
- 修改window部件的默认风格。
- 添加定时器,ActvieBox部件的动画每帧图像的定时更新,改用定时器实现。
- 部件能够获得焦点,可关联FocusIn和FocusOut事件,以在部件获得/失去焦点时作出响应。
- 修改按键输入事件机制,当用键盘输入内容时,按键事件默认发送至已获得焦点的部件。
- 重新规划部件的属性,修改部件的更新处理功能。
- 部件添加padding属性,可调整部件的内边距。
- 部件添加STATIC定位类型,该定位类型的部件将根据显示顺序,自动排列。
- 部件添加dock属性,可设置部件的停靠类型。
- 部件尺寸支持百分比表示,当容器尺寸改变后,该部件的尺寸会随着改变。
- 部分功能模块添加C++类,可使用C++的方式调用,具体请参考helloworld2.cpp的内容。
- 添加ActiveBox部件,用它可实现简单的多帧图像的连贯切换显示。
- 完善了屏幕图形的刷新方法。
- 纠正在嵌套多层窗口时,拖动子窗口消失的问题,原因是子窗口位置计算错误。
- 优化了图形的Alpha混合处理,效率有所提升。
- 解决图像处理的一些问题。
- 图像支持“引用”功能,可引用一个图像中的指定区域的图形数据,无需从图像中裁剪。
- 解决了在PictureBox部件尺寸不大于0时所出现的一些问题。
- 在PictureBox部件未设定图像的情况下,对其设置尺寸模式时不会再出现段错误。
- 完善多部件嵌套时的图形显示处理。
- 完善部件移动时的区域刷新处理。
- 字体文件位置、FrameBuffer设备、等支持用环境变量设置。
- 解决线程阻塞等待自己解锁读写锁的问题,该问题在LCUI退出时出现。
- 纠正了嵌套多个部件所产生的图形显示上的问题。
- 更改了图形显示处理方式,理论上图形刷新速度会有所提升。
- 部分函数以及数据结构做了修改。
- 新增RadioButton部件和CheckBox部件。
- 事件机制做了修改,添加 鼠标移动/点击事件 和 部件拖动事件 的关联功能。
- 图形数据添加了读写锁功能,以保护数据,避免多个线程对其同时进行读/写。
- 头文件做了修改,使用LCUI库的函数时,可能需要包含相应的头文件。
- 图形输出功能做了修改,支持在非24和32位色的显示器上显示图形。
- 合并了部分源码文件中的源代码。
- configure.ac以及README文件做了修改。