ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

nim duilib: 一款支持Windows/Linux平台的C++界面库简介

nim duilib: 一款支持Windows/Linux平台的C++界面库简介 nim duilibnim_duilib 是一款基于C开发的跨平台界面库源于经典的 duilib 界面库并进行了深度优化与功能扩展支持Windows/Linux/macOS/FreeBSD平台专注于简化桌面应用的高效开发。其设计融合了DirectUI理念通过XML描述界面布局实现视觉与逻辑的分离显著提升开发灵活性与维护性。核心技术特性XML布局驱动采用 XML 文件定义界面结构将界面布局与业务逻辑完全分离。开发者可通过修改 XML 快速调整控件位置、尺寸和样式无需改动 C 核心代码极大提升开发与迭代效率。丰富的控件体系内置按钮、文本框、列表视图、虚表控件、树形控件、滑块、进度条、菜单、颜色选择、属性页、标签页等基础控件同时支持自定义控件开发满足多样化界面设计需求。高效的渲染机制使用Skia作为渲染引擎实现控件的无窗口绘制减少系统资源占用提升界面刷新速度。支持硬件加速渲染后端绘制支持使用CPU绘制或者GPU绘制确保复杂界面流畅运行。事件驱动基于消息机制的事件处理使得UI交互逻辑清晰支持在XML文件中配置事件响应代码。多种图片格式支持SVG/PNG/GIF/JPG/BMP/APNG/WEBP/ICO图片格式。支持动画格式支持GIF、APNG、WEBP、Lottie JSON、PAG动画文件格式。多语言与国际化支持动态多种语言切换便于开发全球化的应用程序。支持动态换肤通过XML文件定义皮肤结构可以轻松改变界面风格支持动态换肤。支持窗口阴影支持窗口的圆角阴影、直角阴影并可选择阴影大小可实时更新。支持DPI感知有Unaware、SystemAware、PerMonitorAware、PerMonitorAware_V2四种模式支持独立设置DPI支持高清DPI的适配仅限Windows平台。支持CEF控件支持libcef 109 版本以兼容Windows 7系统支持libcef 142 版本支持Windows 10及以上操作系统支持Linux和MacOS平台。支持WebView2控件支持使用WebView2控件用于显示网页其接口封装简单更易于使用仅支持Windows平台。支持SDL3可使用SDL3作为窗口管理和输入输出等基本功能提供者从而支持跨平台目前已经适配了Windows/Linux/MacOS/FreeBSD平台。目录结构目录说明duilib项目的源代码docs项目的说明文档包括各个控件的功能介绍与属性列表说明文档bin各个示例程序输出目录包含预设的皮肤和语言文件以及 CEF 依赖licenses引用的其他开源代码对应的licenses文件cmakecmake编译时依赖的公共设置build各个平台的编译脚本和编译工程包括VC编译工程msvcWindows平台的应用程序清单文件和VC工程公共配置examples项目的示例程序源代码涵盖所有控件的基本用法示例duilib/third_party项目代码依赖的第三方库详细内容见后续文档基于NIM_Duilib_Framework源码做的主要修改分类修改内容整体改进1. 调整了代码的组织结构按照功能模块划分大文件按类拆分为多个小文件有利于理解整个库的体系结构2. 梳理了代码的接口文件补充各个接口的注释和功能注释有利于阅读和理解代码3. 对配置XML文件进行优化调整了属性命名规则控件的宽度和高度可以按百分比设置图片属性增加了部分扩展优化了图片加载流程4. 扩展了图片资源的支持新增加APNG/WEBP动画/Lottie JSON动画/PAG动画新增对ICO的支持并优化了图片加载引擎及代码实现逻辑5. 重新实现各个布局的代码并新增了常见的界面布局方案总体归类为浮动布局、水平布局、垂直布局、水平流式布局、垂直流式布局、网格布局、水平瓦片布局、垂直瓦片布局、虚表水平布局、虚表垂直布局、虚表水平瓦片布局、虚表垂直瓦片布局使布局的概念更易理解易于扩展详情可参考文档(docs/Box.md)6. XML文件解析引擎替换为pugixml parser性能更优7. 移除对base库的依赖消息循环和线程通信相关功能改为自己实现8. 集成了Skia引擎并作为默认的渲染引擎9. 支持SDL3支持跨平台已经适配了Windows平台、Linux平台、MacOS平台、FreeBSD平台10. CEF组件放到duilib工程并对CEF的版本进行了升级支持libcef 109 版本以兼容Win7系统支持libcef 142 版本支持Win10及以上操作系统11. 重新设计图片管理的接口和加载流程Image目录支持多线程加载图片以更好的扩展其他图片格式支持功能完善1. 对窗口类Window增加了新的属性的功能进行了完善提高对DPI自适应、窗口消息的代码容错代码结构做了调整2. 对窗口类Window增加了新的属性use_system_captionsnap_layout_menusys_menusys_menu_rect, icon属性提供使用操作系统默认标题栏的选项自绘标题栏的功能与系统标题栏的功能相似3. 对窗口Window引入WindowDropTarget辅助类提供对基于窗口的拖放功能的支持4. 对资源管理相关的部分做了梳理使得字体、颜色、图片等资源管理更容易理解5. 对ListBox控件进行了优化细分为ListBox、VListBox、HListBox、VTileListBox、HTileListBox、VirtualListBox、VirtualVListBox、VirtualHListBox、VirtualVTileListBox、VirtualHTileListBox几种功能更加完善基于虚表的ListBox功能可用性提升6. 对组合框Combo关联的控件CheckCombo、FilterCombo进行了优化提升可用性7. 对日期时间DateTime控件的编辑功能进行了完善8. 对菜单CMenuWnd类的功能代码进行优化按新的结构重新实现菜单使得菜单内的控件完全兼容现有容器/控件体系易于理解和维护9. 对文本编辑控件RichEdit进行功能优化和扩展丰富了较多常用功能10. 对树控件TreeView进行功能优化和扩展丰富了较多常用功能提升可用性11. 全局资源GlobalManager的接口进行了优化使得所有资源全部通过此接口管理易于理解和维护12. 同一个窗口内的不同容器之间容器内的控件可以通过属性设置支持拖出和拖入操作13. 控件的背景色支持渐变色新增前景色功能14. 完善了多国语言的功能能够更好的支持多语言动态切换并提供示例程序examples/MultiLang15. 完善了DPI感知功能支持Unaware、SystemAware、PerMonitorAware、PerMonitorAware_V2四种模式支持独立设置DPI支持高清DPI的适配提供了示例程序examples/DpiAware16. 移除了ui_components工程CEF组件代码重新梳理继承到duilib工程中其他内容删除17. 优化窗口的阴影功能窗口的阴影使用svg图片增加了阴影类型属性shadow_type可选值为default, 默认阴影big, 大阴影直角适合普通窗口big_round, 大阴影圆角适合普通窗口small, 小阴影直角适合普通窗口small_round, 小阴影圆角适合普通窗口menu, 小阴影直角适合弹出式窗口比如菜单等menu_round, 小阴影圆角适合弹出式窗口比如菜单等none, 无阴影18. 新增对APNG/SVG/WEBP/ICO/LOTTIE/PAG图片格式的支持19. 重新设计控件的loading功能使用Box容器展示loading功能通过xml文件配置loading界面包括动画图片并支持与动画图片交互20. Label文本显示控件的功能加强对文本齐方式新增加两端对齐新增对竖排文本的支持文本绘制方向从上到下从右到左新增支持设置行间距和设置字间距新增控件1. GroupBox分组容器2. HotKey热键控件3. HyperLink带有超级链接的文字4. IPAddressIP地址控件5. Line画线控件6. RichText格式化文本类HTML格式7. Split: 分割条控件/容器8. TabCtrl多标签控件类似浏览器的多标签9. ListCtrl列表控件Report/Icon/List三个视图10. PropertyGrid: 属性表控件支持文本、数字、复选框、字体、颜色、日期、IP地址、热键、文件路径、文件夹等属性11. ColorPicker拾色器独立窗口其中的子控件可以单独作为颜色控件来使用12. ComboButton带有下拉组合框的按钮13. ShadowWnd是WinImplBase的子类使用附加阴影窗口实现的基类实现了创建窗口并附加的功能提供没有 kWS_EX_LAYERED 属性的窗口阴影14. ControlDragableT支持相同Box内的子控件通过拖动来调整顺序15. DirectoryTree目录树控件用于显示文件系统中的目录16. AddressBar地址栏控件用于显示本地文件系统的路径17. WebView2Control封装了WebView2控件的基本功能18. GridBox/GridScrollBox基于网格布局的控件19. HFlowBox/VFlowBox/HFlowScrollBox/VFlowScrollBox基于水平流式布局和垂直流式布局的控件性能优化1. 优化了Control及子控件的内存占用在界面元素较多的时候内存占有率有大幅降低2. 优化了动画绘制流程合并定时器的触发事件避免播放控件动画或者播放动画图片的过程中导致界面很卡的现象3. 基于虚表的ListBox控件及关联控件通过优化实现机制使得可用性和性能有较大改善示例程序完善1. examples/ColorPicker: 新增加了拾色器示例程序2. examples/ListCtrl新增加了列表的示例程序演示列表的个性功能3. examples/render新增加了渲染引擎示例程序演示了大部分容器、控件、资源管理的功能4. examples/TreeView新增加了树控件的示例程序演示了树控件的各种功能5. examples/RichEdit新增加了富文本编辑控件的示例程序演示了富文本编辑控件的各种功能6. examples/MultiLang提供多语言的动态切换功能演示7. examples/DpiAware提供了DPI感知功能的功能演示8. examples/threads提供了多线程的功能演示9. examples/WebView2提供了WebView2控件的功能演示10. examples/WebView2Browser提供了WebView2控件的功能演示多标签11. examples/layout所有布局和容器的功能演示12. 其他的示例程序大部分进行了代码兼容性修改和优化使得示例程序也可以当作测试程序使用完善文档1. README.md和docs子目录的文档重新进行了梳理使得阅读者更容易理解界面库的功能、用法更易上手2. 各个控件的接口没有单独整理成文档因为可以直接阅读接口文件中的注释来达到目的目前各个接口的注释是比较完善的3. 各个平台的编译文档和依赖的编译脚本4. 重新整理主体项目、依赖第三方源码的授权文件统一放在licenses目录中管理使用的第三方库说明名称代码子目录用途license文件协议分类apngduilib/third_party/libpng支持APNG图片格式zlib/libpng Licensezlib/libpng 许可协议宽松型开源协议libpngduilib/third_party/libpng支持PNG图片格式libpng.LICENSE.txt自定义的 BSD 风格宽松协议zlibduilib/third_party/zlib支持PNG/APNG图片格式Zip文件解压zlib.LICENSE.txtzlib许可协议宽松型开源协议cximageduilib/third_party/cximage支持ICO图片格式cximage.LICENSE.txtMIT 风格协议非标准 MIT 协议giflibduilib/third_party/giflib支持GIF图片格式giflib.LICENSE.txtMIT 许可协议libwebpduilib/third_party/libwebp支持WebP图片格式libWebP.LICENSE.txtBSD 3条款许可协议stb_imageduilib/third_party/stb_image支持BMP图片格式调整图片大小stb_image.LICENSE.txtMIT 许可协议/公有领域协议libjpeg-turboduilib/third_party/libjpeg-turbo支持JPEG图片格式libjpeg-turbo.LICENSE.mdIJG 许可证和修改后的BSD 3条款许可协议nanosvgduilib/third_party/svg支持SVG图片格式nanosvg.LICENSE.txtzlib 许可协议pugixmlduilib/third_party/xml支持资源描述XML的解析pugixml.LICENSE.txtMIT 许可协议ConvertUTFduilib/third_party/convert_utf用于UTF-8/UTF-16编码转换llvm.LICENSE.txtApache License Version 2.0 为主LLVM 例外条款补充历史版本兼容 legacy 协议skia项目未包含skia源码界面库渲染引擎支持SVG图片格式支持Lottie JSON动画skia.LICENSE.txtBSD 3条款许可协议SDL项目未包含SDL源码跨平台窗口管理SDL.LICENSE.txtzlib 许可协议duilibNIM_Duilib_Framework是基于duilib开发duilib.LICENSE.txtBSD 2条款许可协议NIM_DuilibFramework本项目是基于NIM_Duilib_Framework开发NIM_Duilib_Framework.LICENSE.txtMIT 许可协议libcefduilib/third_party/libcef用于加载CEF模块libcef.LICENSE.txtBSD 3条款许可协议udis86duilib/third_party/libudis86反汇编计算完整性指令最短长度udis86.LICENSE.txtBSD 2条款许可协议WebView2duilib/third_party/Microsoft.Web.WebView2支持WebView2控件Microsoft.Web.WebView2.LICENSE.txtBSD 3条款许可协议libpagduilib/third_party/libpag支持PAG动画文件该功能默认未启用详见后续文档libpag.LICENSE.txtApache License Version 2.0(主体)libpag依赖的第三方组件的授权协议很多详见目录:duilib/third_party/libpag/licenses中的文件。如果介意libpag的授权协议包括主体协议/第三方组件协议可以不启用libpag。界面效果预览使用该界面库编写的示例程序该文档可以见到各个控件的展示效果docs/Examples.md关于PAG动画文件格式目前PAG动画文件格式仅在Window平台支持其他平台暂未支持支持PAG动画文件格式功能默认关闭因为需要自己编译libpag.lib和libpag.dll放进项目才能正常编译运行支持PAG动画格式的开启方法1使用文本编译器打开msvc/PropertySheets/LibPagSettings.props文件将LibPagEnabled变量的支持修改为12参照以下文档编译libpag库duilib/third_party/libpag/windows/libpag-build.md编译nim_duilib的时候需要使用build/duilib.sln或者build/examples.sln编译其他方式编译不支持。libpag库的主体授权协议为Apache License Version 2.0其依赖的第三方组件的授权协议很多详见目录:duilib/third_party/libpag/licenses中的文件。如果介意libpag的授权协议包括主体协议/第三方组件协议可以不启用libpag。编程语言C/C: 编译器需要支持C20支持的操作系统WindowsWindows 7.0 版本及以上LinuxOpenEuler、OpenKylin开放麒麟、UbuntuKylin优麒麟、中科方德、统信UOS、Ubuntu、Debian、Fedora、OpenSuse等macOS12FreeBSD支持的编译器Visual Studio 2022WindowsLLVMWindowsMinGW-W64gcc/g、clang/clangWindowsgcc/gLinuxclang/clangLinuxclang/clangmacOSclang/clangFreeBSDA. 编译过程Windows平台一、准备工作安装必备的软件安装python3python的主版本需要是3需要添加到Path环境变量1首先安装python32在Windows的设置里面关闭python.exe和python3.exe的应用执行别名否则编译skia的脚本执行有问题。Windows设置入口设置 - 应用 - 高级应用设置 - 应用执行别名3到python.exe所在目录中复制一份python.exe改名为python3.exe: 确保命令行参数中可以访问到python3.exe4在命令行验证 python3.exe --version可以查看python的版本号安装Git For Windows: 2.44版本git需要添加到Path环境变量确保命令行参数中可以访问到git.exe安装Visual Studio 2022社区版安装LLVM21.1.4 Win64 版本其他版本也可以1安装目录C:\LLVM2注意事项如果安装在其他目录安装目录中不能有空格否则编译会遇到问题。二、使用脚本自动编译推荐该脚本自动完成相关源码下载和编译工作。选定一个工作目录注意事项路径中不能包含空格否则编译脚本会出错创建一个脚本build.bat将下面已经整理好脚本复制进去保存文件。脚本文件内容如下echo OFF set retry_delay10 :retry_clone_duilib if not exist .\nim_duilib ( git clone https://github.com/rhett-lee/nim_duilib ) else ( git -C ./nim_duilib pull ) if %errorlevel% neq 0 ( timeout /t %retry_delay% nul goto retry_clone_duilib ) .\nim_duilib\build\build_duilib_all_in_one.bat进入命令行控制台运行该脚本.\build.bat编译完成的示例程序位于bin目录中。三、手动编译过程Windows平台设置工作目录D:\develop获取相关代码1git clone https://github.com/rhett-lee/nim_duilib2git clone https://github.com/rhett-lee/skia_compile3git clone https://github.com/google/skia.git编译Skia源码1nim_duilib内部使用Skia作为界面绘制引擎所以先要编译skia优先用LLVM编译运行流畅2按照skia_compile目录中的Windows下编译skia.md文档中的方法编译出skia相关的.lib文件编译nim_duilib进入build目录打开examples.sln可执行编译编译完成的示例程序位于bin目录中。B. 编译过程Linux平台一、准备工作安装必备的软件不同的操作系统平台可以按照以下列表安装必备的软件。操作系统平台桌面类型需要安装的模块及安装命令必选OpenEulerUKUI/DDEX11sudo dnf install -y gcc g gdb make git ninja-build gn python cmake llvm clang unzip fontconfig-devel mesa-libGL-devel mesa-libGLU-devel mesa-libGLES-devel mesa-libEGL-devel vulkan-devel libXext-devel libXcursor-devel libXi-devel libXrandr-devel dbus-devel ibus-develOpenKylin开放麒麟Waylandsudo apt install -y gcc g gdb make git ninja-build generate-ninja python3 cmake llvm clang unzip libfontconfig-dev libgl1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev libvulkan-dev libxext-dev libxcursor-dev libxi-dev libxrandr-dev libdbus-1-dev libibus-1.0-dev libwayland-dev libxkbcommon-devUbuntuKylin优麒麟X11sudo apt install -y gcc g gdb make git ninja-build generate-ninja python3 cmake llvm clang unzip libfontconfig-dev libgl1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev libvulkan-devlibxext-dev libxcursor-dev libxi-dev libxrandr-dev libdbus-1-dev libibus-1.0-dev中科方德X11sudo apt install -y gcc g gdb make git ninja-build generate-ninja python3 cmake llvm clang unzip libfontconfig-dev libgl1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev libvulkan-dev libxext-dev libxcursor-dev libxi-dev libxrandr-dev libdbus-1-dev libibus-1.0-dev统信UOSX11sudo apt install -y gcc g gdb make git cmake python3 ninja-build wget unzip libfontconfig1-dev libgl1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev libvulkan-dev libxext-dev libxcursor-dev libxi-dev libxrandr-dev libdbus-1-dev libibus-1.0-devUbuntuGNOMEWaylandsudo apt install -y gcc g gdb make git ninja-build generate-ninja python3 cmake llvm clang unzip libfontconfig-dev libgl1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev libvulkan-dev libxext-dev libxcursor-dev libxi-dev libxrandr-dev libdbus-1-dev libibus-1.0-dev libwayland-dev libxkbcommon-devDebianGNOMEWaylandsudo apt install -y gcc g gdb make git ninja-build generate-ninja python3 cmake llvm clang unzip libfontconfig-dev libgl1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev libvulkan-dev libxext-dev libxcursor-dev libxi-dev libxrandr-dev libdbus-1-dev libibus-1.0-dev libwayland-dev libxkbcommon-devFedoraGNOMEWaylandsudo dnf install -y gcc g gdb make git ninja-build gn python cmake llvm clang unzip fontconfig-devel mesa-libGL-devel mesa-libGLU-devel mesa-libGLES-devel mesa-libEGL-devel vulkan-devel libXext-devel libXcursor-devel libXi-devel libXrandr-devel dbus-devel ibus-devel wayland-devel libxkbcommon-develOpenSuseKDEX11sudo zypper install -y gcc gcc-c gdb make git ninja gn python cmake llvm clang unzip fontconfig-devel Mesa-libGL-devel Mesa-libEGL-devel Mesa-libGLESv3-devel glu-devel vulkan-devel libXext-devel libXcursor-devel libXi-devel libXrandr-devel dbus-1-devel ibus-devel二、使用脚本自动编译推荐该脚本自动完成相关源码下载和编译工作。选定一个工作目录注意事项路径中不能包含空格否则编译脚本会出错创建一个脚本build.sh将下面已经整理好脚本复制进去保存文件。然后在控制台为脚本文件添加可执行权限最后运行该脚本chmod x build.sh ./build.sh脚本文件内容如下#!/bin/bash # Retry clone nim_duilib while true; do if [ ! -d ./nim_duilib/.git ]; then git clone https://github.com/rhett-lee/nim_duilib else git -C ./nim_duilib pull fi if [ $? -ne 0 ]; then sleep 10 continue fi break done chmod x ./nim_duilib/build/build_duilib_all_in_one.sh ./nim_duilib/build/build_duilib_all_in_one.sh编译完成的示例程序位于bin目录中。备注UOS系统需要先安装所需的开发环境然后再安装可参考文档统信UOS下编译skia.md。三、手动编译过程Linux平台设置工作目录~/develop获取相关代码1git clone https://github.com/rhett-lee/nim_duilib2git clone https://github.com/rhett-lee/skia_compile3git clone https://github.com/google/skia.git4git clone https://github.com/libsdl-org/SDL.git编译Skia库操作系统平台参考文档网络链接参考文档本地文件OpenEulerOpenEuler下编译skia.mdOpenEuler下编译skia.mdOpenKylin开放麒麟OpenKylin下编译skia.mdOpenKylin下编译skia.mdUbuntuKylin优麒麟UbuntuKylin下编译skia.mdUbuntuKylin下编译skia.md中科方德中科方德下编译skia.md中科方德下编译skia.md统信UOS统信UOS下编译skia.md统信UOS下编译skia.mdUbuntuUbuntu下编译skia.mdUbuntu下编译skia.mdDebianDebian下编译skia.mdDebian下编译skia.mdFedoraFedora下编译skia.mdFedora下编译skia.mdOpenSuseOpenSuse下编译skia.mdOpenSuse下编译skia.md注意事项skia源码编译的时候应使用LLVM编译程序运行比较流畅。编译SDL库#!/bin/bash cd ~/develop cmake -S ./SDL/ -B ./SDL.build -DCMAKE_INSTALL_PREFIX./SDL3/ -DSDL_SHAREDON -DSDL_STATICOFF -DSDL_TEST_LIBRARYOFF -DSDL_X11_XSCRNSAVEROFF -DSDL_X11_XTESTOFF -DCMAKE_BUILD_TYPERelease cmake --build ./SDL.build cmake --install ./SDL.build编译nim_duilib#!/bin/bash cd ~/develop/nim_duilib/ chmod x linux_build.sh ./linux_build.sh编译完成后在bin目录中生成了可执行文件。如果希望支持CEF可以参考相关文档docs/CEF.md。C. 编译过程macOS平台一、准备工作安装必备的软件安装完成系统后需要做的工作安装Xcode命令行工具xcode-select --install验证安装clang --version安装Homebrew/bin/bash -c $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)如果失败可以查找其他源来安装。更新Homebrewbrew update系统已经自带无需安装的软件git make unzip python3安装cmakebrew install cmake安装ninjabrew install ninja安装gn需要从源码编译gnmkdir ~/develop cd ~/develop git clone https://github.com/timniederhausen/gn cd gn python3 build/gen.py ninja -C out sudo cp out/gn /usr/local/bin/ gn --version二、使用脚本自动编译推荐该脚本自动完成相关源码下载和编译工作。选定一个工作目录注意事项路径中不能包含空格否则编译脚本会出错创建一个脚本build.sh将下面已经整理好脚本复制进去保存文件。然后在控制台为脚本文件添加可执行权限最后运行该脚本chmod x build.sh ./build.sh脚本文件内容如下#!/bin/bash # Retry clone nim_duilib while true; do if [ ! -d ./nim_duilib/.git ]; then git clone https://github.com/rhett-lee/nim_duilib else git -C ./nim_duilib pull fi if [ $? -ne 0 ]; then sleep 10 continue fi break done chmod x ./nim_duilib/build/build_duilib_all_in_one.sh ./nim_duilib/build/build_duilib_all_in_one.sh编译完成的示例程序位于bin目录中。三、手动编译过程macOS平台设置工作目录~/develop获取相关代码1git clone https://github.com/rhett-lee/nim_duilib2git clone https://github.com/rhett-lee/skia_compile3git clone https://github.com/google/skia.git4git clone https://github.com/libsdl-org/SDL.git编译Skia库操作系统平台参考文档网络链接参考文档本地文件macOSmacOS下编译skia.mdmacOS下编译skia.md注意事项skia源码编译的时候应使用LLVM编译程序运行比较流畅。编译SDL库#!/bin/bash cd ~/develop cmake -S ./SDL/ -B ./SDL.build -DCMAKE_INSTALL_PREFIX./SDL3/ -DSDL_SHAREDON -DSDL_STATICOFF -DSDL_TEST_LIBRARYOFF -DSDL_X11_XSCRNSAVEROFF -DSDL_X11_XTESTOFF -DCMAKE_BUILD_TYPERelease cmake --build ./SDL.build cmake --install ./SDL.build编译nim_duilib#!/bin/bash cd ~/develop/nim_duilib/ chmod x macos_build.sh ./macos_build.sh编译完成后在bin目录中生成了可执行文件。如果希望支持CEF可以参考相关文档docs/CEF.md。D. 编译过程FreeBSD平台一、准备工作安装必备的软件sudo pkg install git unzip python3 cmake ninja gn llvm fontconfig freetype2二、使用脚本自动编译推荐该脚本自动完成相关源码下载和编译工作。选定一个工作目录注意事项路径中不能包含空格否则编译脚本会出错创建一个脚本build.sh将下面已经整理好脚本复制进去保存文件。然后在控制台为脚本文件添加可执行权限最后运行该脚本chmod x build.sh ./build.sh脚本文件内容如下#!/usr/bin/env bash # Retry clone nim_duilib while true; do if [ ! -d ./nim_duilib/.git ]; then git clone https://github.com/rhett-lee/nim_duilib else git -C ./nim_duilib pull fi if [ $? -ne 0 ]; then sleep 10 continue fi break done chmod x ./nim_duilib/build/build_duilib_all_in_one.sh ./nim_duilib/build/build_duilib_all_in_one.sh编译完成的示例程序位于bin目录中。​​注意FreeBSD 平台不支持 CEFChromium Embedded Framework。三、手动编译过程FreeBSD平台设置工作目录~/develop获取相关代码1git clone https://github.com/rhett-lee/nim_duilib2git clone https://github.com/rhett-lee/skia_compile3git clone https://github.com/google/skia.git4git clone https://github.com/libsdl-org/SDL.git编译Skia库操作系统平台参考文档网络链接参考文档本地文件FreeBSDFreeBSD下编译skia.mdFreeBSD下编译skia.md注意事项skia源码编译的时候只支持使用LLVM编译。编译SDL库#!/usr/bin/env bash cd ~/develop cmake -S ./SDL/ -B ./SDL.build -DCMAKE_INSTALL_PREFIX./SDL3/ -DSDL_SHAREDON -DSDL_STATICOFF -DSDL_TEST_LIBRARYOFF -DSDL_X11_XSCRNSAVEROFF -DSDL_X11_XTESTOFF -DCMAKE_BUILD_TYPERelease cmake --build ./SDL.build cmake --install ./SDL.build编译nim_duilib#!/usr/bin/env bash cd ~/develop/nim_duilib/ chmod x ./build/freebsd_build.sh ./build/freebsd_build.sh编译完成后在bin目录中生成了可执行文件。开发计划跨平台Windows/Linux/macOS/FreeBSD的窗口引擎基于SDL3.0不断测试与完善X11和Wayland动画功能的加强不断测试发现缺陷并修复不断完善代码其他待补充参考文档快速上手参考文档示例程序相关链接Skia的编译文档库点击访问skia compile 本项目是直接在NIM_Duilib_Framework项目的基础上继续开发的项目地址NIM_Duilib_FrameworkNIM_Duilib_Framework项目是基于duilib开发的项目地址duilib
返回列表