#egui #icons #font #symbols #nerdfonts

egui_nerdfonts

Nerdfonts 图标为 egui

4 个版本

0.1.3 2024年6月12日
0.1.2 2023年12月9日
0.1.1 2023年7月28日
0.1.0 2023年7月28日

235GUI 中排名

每月下载 21

MIT/Apache

2MB
18K SLoC

egui_nerdfonts

Nerd Fonts 图标 提供 egui 的捆绑包。

NerdFonts

安装

在 Cargo.toml 中将 crate 作为依赖项添加

egui_nerdfonts = "0.1.3"

或在你的项目中输入 cargo add egui_nerdfonts

使用

首先,更新你的 egui 上下文中的字体

let mut fonts = egui::FontDefinitions::default();
egui_nerdfonts::add_to_fonts(&mut fonts, egui_nerdfonts::Variant::Regular);

let egui_ctx = Context::default();
egui_ctx.set_fonts(fonts);

这里 选择你想要使用的 nerdfonts 图标。

然后按以下方式使用 nerdfonts 图标

ui.label(format!("{}", egui_nerdfonts::regular::NF_DEV_RUST));

示例

cargo run --example rust_logo

output

关于

egui_phosphor 启发,代码使用相同的结构。

使用的 .ttf 是 这个,而 src/variants/regular.rs 是使用以下 Python 脚本生成的,其中 nerdfonts_regular.ttf 作为第一个参数

from itertools import chain
from fontTools.ttLib import TTFont
from fontTools.unicode import Unicode
import sys

with TTFont(
    sys.argv[1], 0, allowVID=0, ignoreDecompileErrors=True, fontNumber=-1
) as ttf:
    chars = chain.from_iterable(
        [y + (Unicode[y[0]],) for y in x.cmap.items()] for x in ttf["cmap"].tables
    )
    for char in chars:
        symbol_name = char[1].upper().replace('-', '_').replace(' ', '_').replace('#', '_').replace('!', '')
        code = r"\u" + "{" + f"{char[0]:X}" + "}"
        print(f"pub const {symbol_name}: &str = \"{code}\";")

依赖项

~4.5–9.5MB
~82K SLoC