LCUI

使用 C、XML 和 CSS 构建简单的跨平台桌面应用

快速上手 下载

当前版本:2.2.0   ·   发布时间:2021-06-01   ·   GitHub 仓库   ·   创建者:lc-soft
Hello, World!
<?xml version="1.0" encoding="UTF-8" ?>
<lcui-app>
  <resource type="text/css">
    #text-hello {
      color: #8cc63f;
      padding: 25px;
      margin: 25px;
      border: 1px solid #000;
      background-color: #fafafa;
    }
    #btn-hello, #input-hello {
      margin: 0 0 0 25px;
    }
  </resource>
  <ui>
    <widget id="text-hello" type="textview">Hello, World!</widget>
    <widget id="input-hello" type="textedit">Hello, World!</widget>
    <widget id="btn-hello" type="button">Submit</widget>
  </ui>
</lcui-app>

概述

LCUI 是一个用 C 编写的图形界面开发库,你可以用 C、XML 和 CSS 创建简单的桌面应用,包括传统的 Win32 桌面应用、Windows 通用应用,目前主要支持 Windows 系统,后续版本将会完善对 Linux 系统的支持。

如果你在熟悉 C 语言的基础上还具备网页开发经验,那么在使用 LCUI 时会更容易上手,因为 LCUI 对 XML、CSS 以及元素布局等的处理方式和浏览器有一些相似的地方,你可以参考左侧的示例代码了解大致效果。

C语言编写

适用于体积较小且主要使用C语言实现的应用程序,以及偏向使用C语言编写简单应用的开发者。

XML + CSS

支持使用 XML 和 CSS 描述界面布局及样式,节省界面开发时间和维护成本。

跨平台

支持 Windows 和 GNU/Linux 系统,可以编写 Windows 桌面应用和通用应用,以及 Linux 桌面应用。

快速上手

最简单方式是使用 lcui-cli 命令行工具创建一个 LCUI 项目,然后试着编译和运行它,看看 LCUI 是怎样运转的,但在使用 lcui-cli 之前你需要在计算机上安装以下工具:

仅仅一个示例应用还不够?可以试试专为 LCUI 打造的 LC Design 组件库。
# 安装 lcui-cli
npm install -g @lcui/cli

# 创建一个名为 myapp 的 LCUI 项目
lcui create myapp

# 进入项目目录
cd myapp

# 运行这个项目
npm run start

样例展示

一些 LCUI 应用程序的效果图

受到地球上的一些人和公司的喜爱

LCUI 解决了许多复杂的问题,得益于 XML 和 CSS 支持,大大的减少了应用程序的界面开发与维护成本,我只需要为界面编写一次代码就能让我的应用在多个平台上呈现一致的界面效果,这使得我能够轻松的为我的应用开发适用于 Windows 通用平台(UWP)的版本,不用再去另外学习 UWP 应用的界面开发技术。目前主要是支持 Windows 平台,期待以后增加其它平台的适配。

参与贡献

开源的意义在于大家都可以以各种形式帮助项目发展

默默点赞

访问 GitHub 上的 LCUI 代码库主页并为 LCUI 贡献一颗星,虽然这样做看上去没多大作用,但或许在以后能够为作者的职业生涯和 LCUI 的发展提供无形的帮助。

反馈问题

测试是最容易参与项目开发活动的一种方式,帮助作者测试现有功能和相关应用程序,以便作者及早发现缺陷并处理它。

关注进展

你可以在 GitHub 上关注 LCUI 项目,每当项目有新的动态都能够及时收到通知,如果你是开发者,或许能够帮助审查新提交的代码、发现潜在的 BUG,或者也可以帮助其他用户解决常见问题。

贡献代码

项目在开发过程中会有很多新的功能需求,每次代码改动都有可能留下新的 BUG,如果你发现某个功能需求或 BUG 是你能够轻松解决的,可以向 LCUI 贡献你的解决方案。

完善文档

现有的 LCUI 相关文档还很少,你可以通过撰写新内容、帮助完善已有内容,或者将现有的文档翻译为新语种以完善 LCUI 的文档。

资金支持

如果你有一些开发需求并愿意支付一定报酬,可以选择在 BeerpayIssueHunt 上为其设置悬赏,这样能够吸引更多的贡献者参与进来,以提高项目的活跃度。

授权与定价

以另一种方式让 LCUI 得到更积极的维护和更新

社区版

免费

适用于普通小项目

查看许可协议

  • 社区支持
  • 允许在闭源软件中使用
  • 提供官方技术支持
  • 提升已反馈的 BUG 的可见度和优先级
  • 提供 BUG 修复或临时解决方案
  • 在文档和网站中展示你的信息

商业版

   2,560 /人/月

适用于需要可靠技术支持的项目

购 买

  • 社区支持
  • 允许在闭源软件中使用
  • 提供官方技术支持
  • 提升已反馈的 BUG 的可见度和优先级
  • 提供 BUG 修复或临时解决方案*
  • 在文档和网站中展示你的信息

* 在合理努力的情况下,并不是每个 BUG 都可以作为技术支持中的一部分来解决

贡献者激励计划

本计划旨在为 LCUI 中的一些待办任务提供初始赏金来吸引志同道合的开发者成为贡献者以加快 LCUI 的更新速度

LCUI 3.x 版本更新计划
2
布局引擎
参考 yoga 等布局引擎的设计,结合 LCUI 现有的布局需求,重构 LCUI 的布局引擎,使其变得更简单易用。
项目 困难
5000
文本排版引擎
重新设计文本层(TextLayer)模块,基于新的布局引擎实现文本排版,使其更简单易用高效。
项目 中等
500
其它待办任务
8
支持编译为 WebAssembly 在浏览器中运行
参考 Qt、ImGui 等同类项目的 WebAssembly 支持方案,为 LCUI 添加相关的构建配置和支持模块,使得 LCUI 应用程序能够编译为 WebAssembly 在浏览器中运行。
问题 中等
2000
改进组件增量更新机制
为了应对数十万量级的组件更新,保证界面的流畅度,现有的做法是统计组件的更新耗时然后为每帧更新的组件总量设置一个合适的限制,这种做法并不是最优的,可参考 React 的 Fiber reconciler 的架构,重新设计 LCUI 的组件增量更新机制。
问题 中等
2000
Android 平台适配
为 LCUI 添加适用于 Android 的驱动代码和编译构建脚本。
问题 中等
4000
SDL 后端
参考现有 libplatform 的接口功能和设计,基于 SDL 实现一系列与它相同的接口,使 LCUI 应用程序能够将 SDL 作为后端来为图形界面的各项能力提供支持。
问题 中等
2000
为 LCUI CLI 添加 XML 编译器
LCUI 的 xml 文件解析功能是由 libxml 库提供支持的,为了缩减 LCUI 的库文件体积、提升用户界面的加载速度,我们可以在编译阶段将 xml 文件预先转换为 C 代码来使用。
问题 简单
500
为 LCUI CLI 添加 CSS 编译器
集成 SASS 预处理器,支持对多个 scss 或 css 文件进行处理、合并和编译,其中的编译只是简单的将处理后的结果转换成 C 中的字符串代码,无需生成 LCUI_StyleSheet 对象的构造代码。
问题 简单
500
添加表格布局支持
基于新的布局引擎添加表格布局支持,每列单元格等宽,每行单元格等高。
问题 简单
1000
重写 Trad 编译器
采用 TypeScript 编写,参考 babel、llvm 等同类项目来设计 Trad 编译器的架构。
项目 困难
5000

常见问题

在看到这激励计划时你可能会有疑问:有能力解决这些问题的开发者哪会浪费时间去搞这个?把时间用在睡觉、健身、学习、娱乐、陪家人、赚加班费等事情上不香吗?的确,有很多有意义有价值的事情需要我们去做,而对于有兴趣参与开源项目并分享自己技术的人而言,参与激励计划也是一件有意义的事情。
  • 因刷腻了算法题而想找点有技术含量、有挑战性且现实项目中存在的问题来解决的算法爱好者
  • 想通过参与项目来锻炼编程能力顺便赚点零花钱的学生。积累的项目经历对他们完成课设或毕设也有帮助。
  • 想参与或开发一个有亮点、有技术含量的项目来提升自己的开源影响力和就业竞争力的初中级开发者。如果你觉得只会熟练背诵面试题然后在简历和面试中吹牛还不足以体现出个人优势,那么“参与或开发开源项目”算是比较好的加分项。
  • 想将自己积累的技术通过开源项目与他人分享的资深开发者
  • 想参与开源项目并与他人进行技术交流的编程爱好者

流程如下:

  1. 挑选任务:在上方的任务列表或文档中的待办事项列表中挑选你感兴趣的任务。
  2. 确认任务有效:在 LCUI 的 GitHub 代码库主页里搜索相关的 issue 和 Pull Request,检查该任务是否被他人认领。
  3. 发起需求讨论:在 LCUI 的 GitHub Discussions新建讨论帖,表明你想认领的任务和想要了解的内容,通过与我们交流让需求更明确。
  4. 确定正式的开发任务:在需求讨论明确后,我们会整理全部需求然后作为新的 issue 提交。
  5. 制定开发计划:对开发内容进行拆分、估时和排期,让我们能够知道每个时间段的开发进度。
  6. 开始开发:在 LCUI 的 GitHub 代码库主页 Fork 一份副本到你的名下,然后克隆代码库到本地,在新的分支中展开你的工作。
  7. 提交验收请求:工作完成后在 GitHub 上向 LCUI 提交拉取请求(Pull Request),等待我们审查。
  8. 解决验收问题:审查期间我们可能会提交一些审查意见,你需要针对这些意见做相应的改动。
  9. 验收完毕:审查完后我们会接受你的拉取请求,从你的分支拉取你所做的改动并合入主干分支。
  10. 接收赏金:你将会通过悬赏平台或转账的形式收到赏金。
这意味着贡献者可以将用于完成该悬赏任务的代码作为他的个人开源项目来维护,在以解决 LCUI 新版本中的功能需求为前提下,我们可以支持他们打造一个靠谱的开源项目,以此实现双赢。

主要理由如下:

  • 给其他开发者一个打造或推广开源项目的机会。
  • 寻找合适的解决方案。因悬赏任务而开发的项目,会优先考虑我们的需求并给出合适的解决方案,能让我们快速上手并将之应用到 LCUI 中。
  • 促进技术交流和合作。都是国人开发的开源项目,交流和合作比较方便一些,而且由于项目的依赖关系,还有机会为对方的项目反馈问题和建议以及贡献代码。
  • 合理利用现有资源,节约成本。在用其他开源项目前,我们需要花大量时间找文档学习,然后再花时间和经历来解决自己遇到的问题,如果用的项目是国人开发的且他有空给你提供技术支持,那就简单多了。
  • 让更多的人参与进来。开源的意义在于大家都可以参与推动项目的发展,而让大家参与的前提是他们知道这个项目是什么、打算做什么以及他们能提供哪些帮助,如果所有工作都让我们自己独自承当的话,那这个项目就会一直停留在自娱自乐的水平。

相信你会习惯性的将悬赏任务当成正式工作然后按照自己当前的薪资来评估它的成本,但受限于经济条件,我们提供的赏金非常有限,现阶段你只能将它当成是刷题网站上的一些带有小额现金奖励的高难算法题。不过也有很多解决办法,例如:

  • 利用你的影响力、人脉或写作能力来推广此项目,知道的人多了自然就会有人愿意给感兴趣的悬赏任务增加赏金。
  • 使用合法手段让作者实现财富自由,这样就能大幅提升赏金数额。

开源之夏

开源之夏是由“开源软件供应链点亮计划”发起并长期支持的一项暑期开源活动,旨在鼓励在校学生积极参与开源软件的开发维护,促进优秀开源软件社区的蓬勃发展,培养和发掘更多优秀的开发者。

报名申请项目
summer-ospp

项目列表

WebAssembly (wasm) 是一种新的编码方式,可以在现代的网络浏览器中运行。让 LCUI 支持编译为 wasm 的目的主要有两个:一个是降低 LCUI 的体验成本,只需用浏览器打开网页即可快速体验 LCUI 示例程序的运行效果。另一个是便于以后添加 JavaScript 和 TypeScript 语言绑定。

难度:进阶

导师:刘超

产出要求:

  • 研究 WebAssembly 相关资料以及 Qt、ImGui 等同类项目的 wasm 支持方案,完成技术文档。
  • 为 LCUI 添加相关的构建配置,使之能够成功编译为 wasm。
  • 添加 wasm 相关支持代码,使得 LCUI 的示例程序能够在浏览器中响应用户鼠标、键盘的输入并输出图形界面。

技术要求:

  • 熟悉 C 或 C++ 编程语言
  • 了解 JavaScript 语言
  • 了解 CMake、XMake 等任意构建工具的基本用法
  • 了解 Git 的基本用法

参考资料:

导师联系方式

Liu
刘超
LCUI 项目核心开发者、Web 前端开发工程师、业余 C 编程爱好者

邮箱:lc-soft@live.cn

GitHub:https://github.com/lc-soft

Gitee:https://gitee.com/lc-soft

备注:你也可以在 LCUI 代码库的 Issues 页面中沟通