在 Windows 上的 GTK4 应用程序中渲染 SVG 图标

Rendering SVG icons in GTK4 apps on Windows

提问人:fragsalat 提问时间:11/8/2023 更新时间:11/8/2023 访问量:22

问:

我想知道在 Windows 上的 gtk-rs (GTK4) 中渲染主题感知图标需要什么。我在资源中添加了图标,可以成功渲染 PNG 文件。直接替换 SVG 不会渲染任何内容。 是否可以像在 Web 开发中那样使用图标字体?如果是这样,如何在 gtk4 中添加自定义字体?

我的文件夹结构

[root]
  resources/
    icons/
      scalable/
        actions/
          svgicon.svg
          pngicon.png
    gresources.xml
  src/
    main.rs
    window.ui
    window.rs
  build.rs
  Cargo.toml

gresources.xml

<?xml version="1.0" encoding="UTF-8"?>
<gresources>
  <gresource prefix="/myapp/gui/">
    <file compressed="true">icons/scalable/actions/pngicon.png</file>
    <file compressed="true">icons/scalable/actions/svgicon.svg</file>
  </gresource>
</gresources>

窗口.ui

        <child>
          <object class="GtkPicture">
            <property name="file">resource:///myapp/gui/icons/scalable/actions/svgicon.svg</property>
            <property name="width-request">100</property>
            <property name="height-request">100</property>
          </object>
        </child>
        <child>
          <object class="GtkPicture">
            <property name="file">resource:///myapp/gui/icons/scalable/actions/pngicon.png</property>
            <property name="width-request">100</property>
            <property name="height-request">100</property>
          </object>
        </child>

如前所述,png 图像呈现,但 svg 不呈现。我读到人们可以使用 librsvg 在 Windows 上渲染 svg,但由于 Windows 上缺少 libxml2,这无法编译。我想知道为什么这如此成问题,以及 freedesktop(默认图标)是如何在 gtk 中构建和渲染的?

提前感谢您的帮助

视窗 SVG GTK4 GTK-RS

评论


答:

0赞 fragsalat 11/8/2023 #1

幸运的是,我现在可以自己回答我的答案了。在 gtk-rs 的 rustbook 的末尾,它解释了如何使用 libadwita(我对此不感兴趣),并在那里解释了 librsvg 也可以使用 gvsbuild 工具构建,类似于 gtk4 已经构建gvsbuild build libadwaita librsvg

构建这个库立即解决了我无法加载 svg 的问题。