所以我尝试了 egui 文档中的示例并且它有效。然而 egui 文档中的示例似乎侧重于覆盖现有的 FontFamily(比例、等宽字体):
let mut fonts = FontDefinitions::default();
// Install my own font (maybe supporting non-latin characters):
fonts.font_data.insert("my_font".to_owned(),
FontData::from_static(include_bytes!("../../fonts/Ubuntu-Light.ttf"))); // .ttf and .otf supported
// Put my font first (highest priority):
fonts.families.get_mut(&FontFamily::Proportional).unwrap()
.insert(0, "my_font".to_owned());
// Put my font as last fallback for monospace:
fonts.families.get_mut(&FontFamily::Monospace).unwrap()
.push("my_font".to_owned());
egui_ctx.set_fonts(fonts);
但是如何在枚举中声明或定义一个全新的家族?
pub enum FontFamily {
Proportional,
Monospace,
Name(Arc<str>),
}
pub enum FontFamily {
Proportional,
Monospace,
my_font, <-- How i put the font here as a new FamilyMember?
Name(Arc<str>),
}
我想仅将我自己的
my_font
用于特定标签或字段,如本例所示:
ui.add(
egui::TextEdit::singleline(&mut ss)
.text_color(egui::Color32::LIGHT_RED)
.font(egui::FontSelection::FontId(FontId::new(
20.,
egui::FontFamily::my_font, <--
))),
首先下载您需要的TTF或OTF字体。
https://fonts.google.com
是一个很好的来源。
将字体放入
assets/fonts/
(例如font_name.ttf或font_name.otf)
要将字体加载到egui中,可以使用以下代码。 (请注意,include_bytes! 宏将字体数据嵌入到最终编译的二进制文件中。)对于我自己,我创建了一个文件
src/fonts.rs
并使用以下 Rust 代码填充它。您将需要根据您的特定需求更改字体详细信息。请注意,我使用 egui 的 eframe GUI 来显示字体。
use eframe::egui;
use eframe::egui::{FontData, FontDefinitions, FontFamily};
use std::collections::BTreeMap;
pub fn setup_custom_fonts(ctx: &egui::Context) {
let mut fonts = FontDefinitions::default();
//
// Load font =====================================
//
fonts.font_data.insert(
"jost".to_owned(),
FontData::from_static(include_bytes!("../assets/fonts/Jost-Regular.ttf")),
);
let mut newfam = BTreeMap::new();
newfam.insert(FontFamily::Name("jost".into()), vec!["jost".to_owned()]);
fonts.families.append(&mut newfam);
//
// Load font =====================================
//
fonts.font_data.insert(
"poppins".to_owned(),
FontData::from_static(include_bytes!("../assets/fonts/Poppins-Regular.ttf")),
);
let mut newfam = BTreeMap::new();
newfam.insert(
FontFamily::Name("poppins".into()),
vec!["poppins".to_owned()],
);
fonts.families.append(&mut newfam);
//
// Load font =====================================
//
fonts.font_data.insert(
"audiowide".to_owned(),
FontData::from_static(include_bytes!("../assets/fonts/Audiowide-Regular.ttf")),
);
let mut newfam = BTreeMap::new();
newfam.insert(
FontFamily::Name("audiowide".into()),
vec!["audiowide".to_owned()],
);
fonts.families.append(&mut newfam);
//
// Set fonts =====================================
//
ctx.set_fonts(fonts);
}
要使您的 Rust 代码能够访问使用
fonts.rs
加载的字体,您需要将 mod fonts;
添加到您的 lib.rs
。
要使用字体,请将
use egui::{FontFamily, FontId};
添加到 app.rs
(或需要使用字体的其他 Rust 文件)的顶部。然后您可以使用以下命令显示字体。请注意,此代码将字体放置在浅红色按钮内。加载的字体使用 RichText::new
显示,如下所示。
ui.vertical_centered(|ui| {
if ui
.add(
egui::Button::new(
RichText::new("text")
.font(FontId {
size: 20.0,
family: FontFamily::Name("audiowide".into()),
})
.strong()
.size(20.)
.color(Color32::BLACK),
)
.rounding(5.)
.min_size(Vec2 { x: 100., y: 50. })
.fill(Color32::LIGHT_RED),
)
.clicked()
{
self.data.button10.set_text("I changed");
}
});