返回

文章详情

展示 HN:现代 Ada GUI 库:CSS 样式、XML UI、SDL3

Hacker News2026年8月24日 16:30

一个现代的 Ada GUI 库。Adi2 为您提供了一个真正的小部件工具包,具备现代 UI 栈所期待的便利 - 类似 CSS 的样式、实时加载、声明式 XML 布局、动画、SVG 和 Lottie 图形、国际化以及资源打包 - 所有这些都在 Ada 中原生实现,建立在 SDL3 之上。状态:正在生产中使用,但尚未稳定发布 - API 在不同版本之间可能仍会有所更改。为什么选择 Adi2?像网络一样为您的 UI 加样式。选择器、伪类、部分、过渡、渐变、盒子阴影 - 所有这些都采用熟悉的 .css 语法。编辑文件,保存,查看更改。在开发过程中无需重新编译。更喜欢纯 Ada?CSS 规则只是纯 Ada 的 Style_Rules 聚合体 - 可以手动编写,无需额外的繁琐(见下面的代码片段)。声明式描述 UI - 或者不描述。使用 XML 编写 <button> 、 <grid> 、 <text-editor> ,并让工具链发出干净的 Ada 包,或者直接使用基于句柄的构建器在 Ada 中构造相同的小部件树。这两种方式针对完全相同的 API;XML 生成器是便捷工具,而非必需品。渲染富内容。内置的轻量级 HTML 视图小部件以级联样式呈现文档样式的标记。通过 SDL3_image 渲染光栅图像,通过内置的 plutosvg 渲染 SVG,通过内置的 rlottie 渲染 Lottie 动画。发布一个单一二进制文件。将每个 CSS 文件、字体、图像、翻译和 SVG 精灵打包到您的可执行文件中。运行时没有文件系统依赖。使用用户的语言。支持 Gettext 的国际化,具有复数形式、自动区域设置检测,以及 .po → Ada 编译。无模板地动画。CSS 过渡用于颜色、背景色、边框颜色、边框宽度、边框半径、内边距、外边距、不透明度、盒子阴影和字体大小 - 框架处理插值和定时。HiDPI 准备单位。dp / dip 用于布局,rem 用于排版,pix 当您确切需要一个渲染器像素时,px - 此单位会根据设置 Set_Px_Maps_To_Dip 来决定是否遵循显示比例。请参见 docs/css_styling.md 。为工具和自动化而构建。开发专用的 MCP 桥接允许编辑器和 AI 助手捕捉运行中的应用程序屏幕,遍历小部件树并操作它 - 点击按钮、输入、移动焦点、读取性能计数。这对于您选择的 AI 编写的端到端测试非常有用。可以在浏览器中运行。这些示例使用 GNAT-LLVM 和 Emscripten 编译为 WebAssembly - 尝试它们的实时演示,或查看 wasm/ 以获取构建信息。发布的成本。发布构建以静态链接方式打包成一个小于 10 MB 的单一可执行文件 - 包含小部件工具包、CSS 引擎、SVG 和 Lottie 渲染,所有这些均包括在内。您捆绑的任何资产都会增加其自身的重量。它通过 SDL 的渲染器绘制,该渲染器绑定到主机提供的内容:Windows 上的 Direct3D、macOS 上的 Metal、存在时的 Vulkan 或 OpenGL,软件作为最低要求。Windows XP 使用 Direct3D 9,而当前的 Mac 使用 Metal,来自相同的源。Adi2 Qt Flutter Electron 发布大小 <10 MB,单个文件 ~15-30 MB 静态;否则是 Qt 运行时,大小约为 ~20 MB+,引擎加上数据目录大小约 ~100 MB+,捆绑了自包含的 Qt 库和插件的 Chromium 和 Node 运行时 Flutter 引擎;Linux 上的 GTK3 Chromium 和 Node 图形 SDL 渲染器,软件回退包含 GPU 或光栅后端 Skia 或 Impeller,期望使用 GPU 堆栈和合成器 便携性 Windows XP+、macOS、Linux、WebAssembly Windows 10+、macOS、Linux、移动、嵌入式 Windows 10+、macOS、 Linux、移动、Web Windows 10+、macOS、Linux 语言 Ada C++ Dart JavaScript 内存安全检查,确定性回收 手动垃圾收集 垃圾收集 样式 CSS QSS Dart 小部件代码 CSS 尺寸是为一个最小应用程序准备的;您的应用程序会随着您自己的代码和资产而增长。其他每种工具的大小都伴随着庞大的生态系统和多年的生产使用 - Adi2 提供的交易是您可以交给某人的单个文件,适用于其他工具已经超越的硬件。截图 hello_example material_demo html_view_example rlottie_example assets_example 每个示例的完整库:docs/gallery.md。或者在浏览器中自己运行它们:实时演示。简要说明声明式路径 - XML + CSS /* examples/css/hello_example.css */ . primary { background-color : rgb ( 37 , 99 , 235 ); border-radius : 8 px ; padding : 10 px 16 px ; transition : background-color 150 ms ease-out; } . primary : hover { background-color : rgb ( 29 , 78 , 216 ); } . primary :: label { color : white; font-size : 14 px ; font-weight : 500 ; } <!-- examples/xml/hello_example.xml --> < adi > < link rel = " stylesheet " href = " examples/css/hello_example.css " /> < callback name = " On_Hello_Click " type = " Adi.Widget.Button.Click_Callback " /> < window title = " Hello, Adi " width = " 320 " height = " 180 " > < box class = " root " > < label text = " Welcome to Adi " class = " welcome " /> < button text = " Click me " class = " primary " on-clicked = " On_Hello_Click " /> </ box > </ window > </ adi > 工具链会发出一个类型化的 Ada 包,您可以从您的中实例化它。

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡