资讯详情

SerenityOS About 应用完全指南:Ladyball 图标、版本号机制与 AboutDialog 源码实现

📅 2026/9/10 20:24:48 | 华诺云谱 👁 阅读
SerenityOS About 应用完全指南:Ladyball 图标、版本号机制与 AboutDialog 源码实现
SerenityOS About 应用完全指南Ladyball 图标、版本号机制与 AboutDialog 源码实现【免费下载链接】serenityThe Serenity Operating System 项目地址: https://gitcode.com/GitHub_Trending/se/serenity导读About是 SerenityOS 内置的关于应用用于在图形界面中展示系统名称、版本、修订号、版权信息以及官方 Ladyball 标志是用户与开发者了解当前系统构建状态最直接的入口。本文以 Base/usr/share/man/man1/Applications/About.md 手册页为主线结合 Userland/Applications/About/main.cpp、Userland/Libraries/LibGUI/AboutDialog.cpp 等源码完整讲解该应用的启动方式、界面元素、版本号生成机制与内部实现原理。读完本文你将掌握如何在 SerenityOS 中运行与理解 About 应用并了解其背后 GUI 对话框框架的调用链。一、运行方式与使用入口手册页的 Synopsis 给出了应用的命令行用法$ About在 SerenityOS 图形桌面环境中可以直接在终端执行About也可以从系统菜单中的应用列表启动。手册页还提供了launch:///bin/About的启动协议链接这是 SerenityOS 桌面环境下通过 URL 协议拉起应用的统一方式等效于运行/bin/About。从源码看该应用的二进制正是由 Userland/Applications/About/CMakeLists.txt 中的serenity_app(About ICON ladyball)构建程序入口是 Userland/Applications/About/main.cpp其serenity_main在创建 GUI 应用后直接弹出关于对话框并进入事件循环GUI::AboutDialog::show(SerenityOS_string, TRY(Core::Version::read_long_version_string()), app_icon.bitmap_for_size(32), nullptr, app_icon.bitmap_for_size(16)); return app-exec();二、界面元素与 Ladyball 标志打开 About 应用后左侧展示官方 Ladyball 标志。该标志由 Katalin Kult 设计将阴阳符号Yin-Yang与瓢虫ladybird本项目虫类意象独特的壳纹相结合寓意 SerenityOS 的设计哲学Serenity Prayer 的接纳不可控之事体现对无法改变事物的坦然接受阴阳的对立力量平衡象征系统中各种对立力量的调和Lagom 的恰到好处瑞典语中不多不少、刚刚好的适度理念。从源码看About 对话框的图标由 Userland/Libraries/LibGUI/AboutDialog.gml 定义的 GML 布局渲染界面自上而下包含品牌横幅brand_banner位图取自/res/graphics/brand-banner.png、左侧图标区icon_wrapper/icon、右侧的nameSerenityOS、serenity_os、version、copyright标签以及 OK 按钮。其中 copyright 标签固定显示Copyright © the SerenityOS developers, 2018-2026。三、版本号与修订号的生成机制手册页明确说明由于项目没有官方发布版本版本号固定为1.0-dev修订号则取当前 Git 最新提交哈希。这一机制在源码中有清晰印证。Userland/Libraries/LibCore/Version.cpp 的read_long_version_string()在 SerenityOS 平台上通过uname()系统调用读取内核release与version字段格式化为Version {} revision {}而在非 SerenityOS 环境如 Lagom 测试构建下则直接返回Version 1.0。修订哈希的具体注入发生在构建期Userland/Applications/About/CMakeLists.txt 通过三条execute_process命令读取当前 Git 信息execute_process(COMMAND git rev-parse --short HEAD OUTPUT_VARIABLE GIT_COMMIT) execute_process(COMMAND git rev-parse --abbrev-ref HEAD OUTPUT_VARIABLE GIT_BRANCH) execute_process(COMMAND git diff-index --quiet HEAD -- echo tracked || echo untracked OUTPUT_VARIABLE GIT_CHANGES) add_definitions(-DGIT_COMMIT${GIT_COMMIT} -DGIT_BRANCH${GIT_BRANCH} -DGIT_CHANGES${GIT_CHANGES})即取当前分支、短哈希并判断工作区是否有未提交改动tracked/untracked通过编译期宏注入目标从而让 About 对话框显示的修订号反映当前构建所对应的确切 Git 提交。四、AboutDialog 的实现原理About 应用本身只是一个薄壳真正的界面逻辑由 LibGUI 的AboutDialog提供Userland/Libraries/LibGUI/AboutDialog.cpp。AboutDialog::show是静态入口接受五个参数应用名称、版本字符串、应用图标位图、父窗口指针与窗口图标位图static void show(String name, String version, RefPtrGfx::Bitmap const icon nullptr, Window* parent_window nullptr, RefPtrGfx::Bitmap const window_icon nullptr);其内部流程为调用AboutDialog::create构建对话框窗口标题自动设置为About {name}如 About SerenityOS从 GML 布局中按名字查找控件若有图标则显示icon_wrapper并设置图标位图否则隐藏图标区设置name、version标签文本并仅当名称不是 SerenityOS 时才显示下方的 SerenityOS 副标题标签见 AboutDialog.cpp为 OK 按钮绑定点击回调dialog-done(ExecResult::OK)关闭对话框设置窗口尺寸为413x204、不可调整大小最后exec()以模态方式运行。因此任何 SerenityOS 应用都可以复用该组件快速生成风格统一的关于对话框About 应用只是把它用于系统本身。五、安全加固pledge 与 unveilUserland/Applications/About/main.cpp 在启动早期进行了两次pledge系统调用收紧权限并配合unveil限制文件系统可见性TRY(Core::System::pledge(stdio recvfd sendfd rpath unix)); auto app TRY(GUI::Application::create(arguments)); TRY(Core::System::pledge(stdio recvfd sendfd rpath)); TRY(Core::System::unveil(/res, r)); TRY(Core::System::unveil(nullptr, nullptr));第一次 pledge 允许unix以支持 GUI 应用初始化时的 IPC 连接创建应用后再收紧仅保留stdio recvfd sendfd rpath。随后仅向进程揭示/res目录只读用于加载 Ladyball 图标等资源最后以unveil(nullptr, nullptr)锁定权限清单。这是 SerenityOS 应用最小权限安全模型的典型示例。六、相关资源与延伸阅读手册页原文Base/usr/share/man/man1/Applications/About.md应用入口Userland/Applications/About/main.cpp构建配置Userland/Applications/About/CMakeLists.txt对话框实现Userland/Libraries/LibGUI/AboutDialog.cpp 与头文件 Userland/Libraries/LibGUI/AboutDialog.h界面布局Userland/Libraries/LibGUI/AboutDialog.gml版本字符串生成Userland/Libraries/LibCore/Version.cpp若要在自己的 SerenityOS 应用中复用 About 对话框可在 CMake 中链接LibGUI等库并在代码中调用GUI::AboutDialog::show(...)传入应用名与版本字符串即可。【免费下载链接】serenityThe Serenity Operating System 项目地址: https://gitcode.com/GitHub_Trending/se/serenity创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。