#gtk #gtk4 #elm

relm4-icons

Icons for gtk-rs and Relm4 applications

16 releases

0.8.2 Mar 13, 2024
0.8.1 Mar 13, 2024
0.7.2 Mar 14, 2024
0.7.0-alpha.2 Sep 10, 2023
0.6.0-beta.6 Mar 24, 2023

#276 in GUI

Download history 128/week @ 2024-01-02 127/week @ 2024-01-09 218/week @ 2024-01-16 198/week @ 2024-01-23 252/week @ 2024-01-30 326/week @ 2024-02-06 349/week @ 2024-02-13 333/week @ 2024-02-20 445/week @ 2024-02-27 311/week @ 2024-03-05 1009/week @ 2024-03-12 499/week @ 2024-03-19 288/week @ 2024-03-26 527/week @ 2024-04-02 252/week @ 2024-04-09 240/week @ 2024-04-16

1,356 downloads per month
Used in 2 crates

Apache-2.0 OR MIT

1MB
172 lines

Relm4 icons - Icons for your gtk-rs and Relm4 applications!

CI Matrix Relm4 icons on crates.io Relm4 icons docs Minimum Rust version 1.75 dependency status

More than 3000 icons, ready for use in your app!

Usage

1. Find your icons 🔍

You can either use the of the over 3000 shipped icons or your own icons. You can browse the shipped icons using one of the following methods:

For icons from the GNOME icon-development-kit:

For icons from Fluent UI System Icons:

For browsing all shipped icons:

Sometimes, icons-development-kit and Fluent UI System Icons have overlapping icon names, so the postfix "-alt" is added.

2. Specify your icons 🖼️

Create a file called icons.toml next to the Cargo.toml file of your app:

# Recommended: Specify your app ID *OR* your base resource path for more robust icon loading
app_id = "com.my.app"
base_resource_path = "/com/my/app/"

# List of icon names you found (shipped with this crate)
# Note: the file ending `-symbolic.svg` isn't part of the icon name.
icons = ["plus", "minus"]

# Optional: Specify a folder containing your own SVG icons
icon_folder = "my_svg_icons"

3. Add Relm4 icons ✍

relm4-icons = "0.8.0"

4. Load the icons 🛫

Add this to your initialization code:

relm4_icons::initialize_icons();

5. Use the icons 🎉

Use set_icon_name and similar methods to use your icons, for example with ButtonExt, StackPage, MenuButton or Image.

Example

let button = gtk::Button::default();
button.set_icon_name("plus");

You can also use the icon_names module for extra compile-time generated icon names.

use relm4_icons::icon_names;

let button = gtk::Button::default();
button.set_icon_name(icon_names::PLUS);

How it works

Crate

  1. Collect all icons specified in the config file
  2. Build a gresource bundle containing only the selected icons
  3. Include the gresource file in the compiled binary
  4. On initialization load the gresource file

Add new icons

To add new icons, move them into the icons folder and make sure their file name ends with -symbolic.svg. Then run the following commands:

cd update_icons
cargo run

Credit

  • GNOME contributors for providing so many outstanding icons
  • gvdb-rs for providing a great crate for interacting with gresources in pure Rust
  • gtk-rs for outstanding Rust bindings for GTK4

The source code of Relm4 icons is licensed under the terms of both the MIT license and the Apache License (Version 2.0).

Icons

  • The icons in the icons/icon-development-kit folder are licensed under the terms of the CC0 license and therefore public domain.
  • The icons in the icons/fluentui-system-icons folder are licensed under the terms of the MIT license.

Both licenses should work for both open source and proprietary applications (without warranty).

Dependencies

~16–26MB
~448K SLoC