开源中国 2018 年度最后一场技术盛会邀你来约~错过就要等明年啦!点此立即预约

liu / LCUICMIT

Watch 49 Star 95
加入码云
与超过 300 万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
面向 C 的图形界面开发库,可借助 XML 和 CSS 构建简单的跨平台桌面应用 展开 收起

http://lcui.lc-soft.io

取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README.zh-cn.md

LCUI

面向 C 的图形界面开发库,可借助 XML 和 CSS 构建简单的跨平台桌面应用

Build Status Coverage Status License Github Release Github All Releases Repo size Code size

目录

介绍

LCUI 是一种自由和开放源代码的图形界面开发库,主要使用 C 语言编写,支持使用 CSS 和 XML 描述界面结构和样式,可用于构建简单的桌面应用程序。

主要特性

  • C 语言编写: 适用于体积较小且主要使用 C 语言实现的应用程序,以及偏向使用 C 语言编写简单应用的开发者。
  • 跨平台: 支持 Windows 和 GNU/Linux 系统,可开发简单的 Windows 桌面应用和通用应用,以及 Linux 桌面应用。
  • XML 解析: 支持使用 XML 标记语言描述界面的结构,更少的代码量,更直观的表达方式,易于开发和维护。
  • CSS 解析: 支持使用 CSS 代码描述界面元素的位置、大小、背景、字体、边框等样式,与应用程序的逻辑分离,易于使用和修改。
  • 类 HTML 布局: 与浏览器处理的网页布局类似,但目前只支持块级(block)、内联块级(inline-block)和简单的弹性(flex)布局,如果你有网页开发经验的话会比较容易上手。
  • 界面缩放: 支持通过设置全局缩放比例来让界面适应不同像素密度的屏幕,也支持使用基于屏幕密度的 sp 和 dp 单位表示界面元素的位置和大小。
  • 文本绘制: 支持为文本设置全局字体、行高、水平对齐方式,支持对局部文本块单独设置颜色、背景色、加粗、斜体。
  • 字体管理: 支持加载多个字体文件,支持自定义界面中的标题、正文、引用、强调等类型的文本所使用的字体字族和风格。
  • 图片处理: 提供图片读取接口,支持读取 jpg、png 和 bmp 格式的图片。支持逐行读取,可在读取图片的过程反馈读取进度。
  • 触控: 支持多点触控,但目前只支持 Windows 系统。

缺少的特性

LCUI 是一个个人项目,其主要用途是方便作者能够开发简单的图形界面应用,简单也就意味着功能很少,比如:

  • 没有硬件加速,图形渲染效率低下。
  • 不支持选中和复制界面中的文本。
  • 不支持实用 CTRL+C 复制内容,不支持使用 CTRL+V 粘贴内容到输入框。
  • 不支持使用输入法输入非英文字符,例如:中文,日文,等。
  • 当前版本并不支持渲染圆角边框。
  • 布局系统简单,不支持网格、表格等布局。

如果你有上述问题的相关解决经验,可以通过提交问题(Issue)或拉取请求(Pull Request)来向作者提供技术支持。

效果图

Hello, World!

LCUI.css

LCFinder

许可

LCUI 采用的开源许可证是 MIT

文档

目前还没有 API 参考文档,你可以参考头文件、源代码、示例程序以及作者开发过的相关程序来了解基本用法。

构建

依赖项

如果你想构建全特性的 LCUI,建议安装以下依赖库:

如果你的系统是 Ubuntu,可运行以下命令来安装依赖:

apt-get install libpng-dev libjpeg-dev libxml2-dev libfreetype6-dev libx11-dev

引导

你需要运行 ./configure (在源码根目录中) 以引导项目的构建。

在最简单的情况下,你可以运行:

git clone https://github.com/lc-soft/LCUI.git
cd LCUI
./configure

如果未找到 ./configure,请运行 ./autogen.sh 脚本生成它。

./configure 执行完后,运行以下命令编译源代码并安装 LCUI 的函数库和头文件:

make
make install

如果需要自定义编译器、编译参数、安装位置等配置,请阅读 INSTALL 文件了解详情。

测试和示例程序都存放在 test 目录中,如果需要运行他们请运行以下命令:

cd test
make

运行 helloworld 示例:

./helloworld

在 Windows 中构建

LCUI 主要是在 Windows 系统环境下开发的,目前只提供 Visual Studio 的解决方案文件(.sln),你可以使用 Visual Studio 打开 /build/windows/LCUI.sln 文件,然后编译生成 LCUI。如果你用的是其它 IDE,请尝试按该 IDE 的方式创建项目并将源文件添加至项目内,然后编译。

上述的依赖库中除 Windows 系统用不到的 libx11 库外,都可以在 Windows 系统环境下编译生成,具体的编译方法你可以在教程中找到。如果你觉得编译这些依赖库很麻烦,可以使用 vcpkg 来安装它们,只需在命令行里输入如下命令:

./vcpkg install freetype libxml2 libjpeg-turbo libpng

发行版的附件列表中一般也会有一个包含所有依赖库的压缩包可供使用。

社区

相信很多人已经习惯于看到那些活跃的开源项目,也习惯于向开源社区索取着各种资源,这些项目有着完善的文档、丰富的示例、活跃的社区还有成群的贡献者一起参与项目,即使自己什么都不用做,他们也能积极的发展下去。然而 LCUI 只是个个人项目,并未拥有这些资源,LCUI 的大多数功能都是按作者的需求而开发的,因此,如果你有什么需求,请先阅读以下内容。

  • 遇到问题时请尽量花时间自己独立解决,实在无法解决的话,请再花些时间准备好详细的问题描述,然后按照下面给出的方法提交问题。
  • 普通的使用问题,请在开源中国社区(问答板块)SegmentFaultStackoverflow 上提交问题并 @ 作者,这样作者在帮助你解决问题后至少能赚点积分/声望值,还能让搜索引擎多收录一条 LCUI 相关的内容,帮助其他遇到类似问题的人。
  • BUG、新功能建议、代码改进建议等核心开发相关的问题请提交至 GitHub 的 Issues 页面中。建议你使用英语撰写内容,因为 LCUI 不仅仅面向国内程序员。
  • 如果你想提交自己的代码改进方案,请先向作者确认这个方案是否符合要求,确认之后再开始编写代码,务必遵循现有代码风格。在代码完成后,请提交拉取请求(Pull Request),让作者决定是否拉取你的分支里的代码并合并至主分支,必要的话请补充单元测试。
  • 文档相关问题、需求及改进建议,请提交至 LCUI-Guide 项目里。

贡献

LCUI 还有很多需要完善的地方,相信有经验的人很容易就能发现,例如:

  • 图形渲染效率低下,不支持硬件加速。
  • 部分头文件设计不合理,依赖太强。
  • 部分模块代码耦合度高。
  • 标识符命名不够规范。
  • 目录规划不够合理。
  • 不支持输入法。
  • 文档太少。
  • 示例太少。
  • 组件太少。

由于 LCUI 是一个与作者职业无关的项目,在此项目上投入过多时间对于作者的意义并不大,因此受限于时间成本问题,像图形渲染优化、输入法支持、文档撰写、琐碎小功能等这类耗时长、收益低的工作,现阶段都不会安排在主线分支上。除去这里简单说明的一些待改进的地方外,在 LCUI 的源代码中也会有一些被 FIXME 注释标记的待改进的代码,通常这些注释还会说明为什么改进它,以及怎么改进它,如果你感兴趣,可以留意源代码中的 FIXME 注释内容,或者直接搜索 FIXME 注释。

本项目是以技术交流为主要目的而开放源代码的,如果你有相关问题解决经验,可以向此项目提供支持,与其他人分享你的经验,但在参与贡献之前,请先阅读这篇贡献指南

项目点评 ( 13 )

你可以在登录后,发表评论

搜索帮助

12_float_left_people 12_float_left_close