LCUI
用于构建用户界面的 C 库
目录
介绍
中文版说明文档
LCUI 是一个用 C 语言编写的库,用于构建图形用户界面。其目标是探索和实践开发用户界面的新方法,其特点是体积小、易于使用,并提供方便的开发工具,帮助开发人员快速创建具有图形用户界面的桌面应用程序。
LC源自作者名字的首字母。该库最初是为了帮助作者开发小型项目并获得开发经验而设计的。然而,笔者在C/C++专家云集的就业市场上并没有获得竞争优势,因此不得不从事Web前端开发工作。因此,LCUI 现在倾向于集成 Web 前端领域的技术。
主要特点
- 跨平台:支持Windows和Linux。
- 完全定制的组件:组件在多个平台上保持一致的外观和行为。
- 内置CSS引擎:支持使用CSS定义用户界面的样式和布局,让有Web开发经验的人更容易上手。
- 提供现代开发工具:这些工具允许您使用带有 JSX 语法的 TypeScript 语言、React 库和其他 Web 前端技术来编写用户界面。
特点概述
您可以通过下面的截图了解LCUI应用程序的开发经验:
- 类 React 风格的组件开发:使用 TypeScript 编写 UI 配置文件。结合 TypeScript、JSX 语法和 LCUI React 库的优势,您可以简洁地描述接口结构、资源依赖、组件状态、数据绑定和事件绑定。
- 多种样式表编写方法: Tailwind CSS、CSS Modules、Sass、全局 CSS。
- 基于文件系统的路由器:以目录的形式组织应用页面,每个页面对应一个目录。目录的路径用作该页面的路由。内置应用路由器,无需手动配置路由,即可轻松实现页面切换和导航。
- 用户友好且现代的图标库:图标来源于 Fluentui-system-icons 库,并进行了部分定制以适应 LCUI 的特性,提供类似的使用模式。
- 命令行开发工具:运行
lcui build
命令对app目录下的配置文件进行预处理,生成相应的C源代码和资源文件。
建筑学
随着时间的推移,LCUI 已经建立在各种库的基础上:
- lib/yutil:提供通用数据结构和函数的实用程序库。
- lib/pandagl:PandaGL(Panda 图形库),提供字体管理、文本布局、图像 I/O、图形处理和渲染功能。
- lib/css:CSS 解析器和选择器引擎,提供 CSS 解析和选择功能。
- lib/ptk:Platform Toolkit库,提供跨平台统一的系统相关API,包括消息循环、窗口管理、输入法等。
- lib/thread:提供跨平台多线程功能的线程库。
- lib/timer:定时器库提供定期执行任务的能力。
- lib/ui:UI 核心库,提供基本的 UI 功能,例如 UI 组件管理、事件队列、样式计算和绘图。
- lib/ui-xml:XML 解析库,提供从 XML 文件内容创建 UI 的能力。
- lib/ui-cursor:提供光标绘图功能的光标库。
- lib/ui-server:UI 服务器,提供将 UI 组件映射到系统窗口的能力。
- lib/ui-router:提供路由映射和导航功能的路由器管理器。
- lib/ui-widgets:预定义的基本组件库,提供文本、按钮、滚动条等基本UI组件。
- lib/worker:工作线程库,提供简单的工作线程通信和管理功能。
快速入门
在开始之前,您需要在计算机上安装以下软件:
- Git:版本控制工具,用于下载示例项目的源代码。
- XMake:用于构建项目的构建工具。
- Node.js:用于运行LCUI命令行开发工具的JavaScript运行环境。
然后,在命令行窗口中运行以下命令:
# Install the LCUI command-line development tool
npm install -g @lcui/cli
# Create an LCUI application project
lcui create my-lcui-app
随后按照命令提供的提示进行操作。
文档
教程
- Todo List:了解 LCUI 的基本概念和使用,以及如何使用它构建界面并实现状态管理、界面更新和交互。
- 渲染织物动画:用C语言重写现有织物模拟程序的JavaScript源代码,并使用cairo图形库进行织物渲染。然后,应用LCUI实现布料动画播放和交互。
- 浏览器:参考网页浏览器,使用LCUI实现类似的界面结构、布局、风格、多标签管理功能。利用LCUI的路由管理功能实现多标签页状态管理和导航,以及简单的文件浏览页面。 (本教程已过时,欢迎贡献更新)
参考
LCUI 和相关项目的一些功能受到其他开源项目的启发。您可以参考他们的文档来了解基本概念和用法。
- DirectXTK:步数计时器的源代码参考。
- Vue Router:路由器管理器的参考。一些功能还参考了Vue Router的源代码。
- Next.js:路由定义方法参考。
路线图
以下是即将推出的项目:
- LCUI
- 改进API设计。
- 增强CSS引擎以支持
inherit
、 !important
和escape字符。 - 添加SDL后端来替换lib/ptk库。
- 适配其他开源图形库,以获得更好的渲染性能。
- 命令行工具
lcui build --watch
:持续监视文件更改并自动重建。-
lcui dev-server
:与 webpack-dev-server 类似,将 LCUI 应用程序构建为开发人员在浏览器中预览界面的网站。 - 添加构建缓存以仅重建已更改的文件。
- React组件库:参考一些Web前端组件库(例如radix、shadcn/ui),开发适合LCUI应用的TypeScript + React组件库,重用LC Design组件库中的组件。
- 文档
贡献
觉得 LCUI 更新慢吗?为 LCUI 做出贡献的方式有很多。
- 提交错误并帮助我们在签入修复后验证修复。
- 在问题页面中分享一些与 GUI 开发相关的有趣想法。
- 在源代码中搜索FIXME注释并尝试修复它们。
- 在 IssueHunt 上资助您感兴趣的问题,以吸引其他开发者做出贡献。
- 查看源代码更改。
- 贡献错误修复。
LCUI 已采用贡献者契约定义的行为准则。该文档在许多开源社区中使用,我们认为它很好地阐明了我们的价值观。有关更多信息,请参阅行为准则。
常问问题
这是浏览器内核吗?或者像Electron这样集成浏览器环境的开发库?
不,你可以把它看作是应用了一些Web技术的传统GUI开发库。
既然支持使用TypeScript语言,为什么我不使用Electron呢?
是的,如果你有Web开发经验并且愿意学习Electron,那么Electron显然是最好的选择。
以LCUI目前的能力来说,主要适合满足作者的个人需求,开发简单的工具。
为什么我应该选择 LCUI 而不是其他 GUI 库/框架?
我们建议您优先考虑其他 GUI 库/框架。
CSS 支持怎么样?
以下是受支持的 CSS 功能的列表。勾选是支持(但并不代表完全支持)。默认情况下不支持未列出的属性。
CSS 功能覆盖
执照
LCUI 项目是根据 MIT 许可证发布的。