#[cfg(feature = "ui")]
use egui::{FontData, FontFamily, FontTweak};
use std::sync::Arc;
pub fn configure_egui_fonts(ctx: &egui::Context) {
let mut fonts = egui::FontDefinitions::default();
if let Some(data) = load_zh_font() {
fonts.font_data.insert(
"zh".into(),
Arc::new(FontData::from_owned(data).tweak(FontTweak {
scale: 1.0,
y_offset_factor: -0.05,
..Default::default()
})),
);
fonts
.families
.entry(FontFamily::Proportional)
.or_default()
.insert(0, "zh".into());
fonts
.families
.entry(FontFamily::Monospace)
.or_default()
.insert(0, "zh".into());
}
ctx.set_fonts(fonts);
}
pub fn configure_egui_fonts_with_fallback(ctx: &egui::Context, fallback_font_bytes: &[u8]) {
let mut fonts = egui::FontDefinitions::default();
fonts.font_data.insert(
"zh".into(),
Arc::new(
FontData::from_owned(fallback_font_bytes.to_vec()).tweak(FontTweak {
scale: 1.0,
y_offset_factor: -0.05,
..Default::default()
}),
),
);
fonts
.families
.entry(FontFamily::Proportional)
.or_default()
.insert(0, "zh".into());
fonts
.families
.entry(FontFamily::Monospace)
.or_default()
.insert(0, "zh".into());
ctx.set_fonts(fonts);
}
#[cfg(target_os = "macos")]
fn load_zh_font() -> Option<Vec<u8>> {
for path in &[
"/System/Library/Fonts/PingFang.ttc",
"/System/Library/Fonts/STHeiti Light.ttc",
"/System/Library/Fonts/Supplemental/Songti.ttc",
"/System/Library/Fonts/Supplemental/NotoSansCJK-Regular.ttc",
] {
if let Ok(data) = std::fs::read(path) {
return Some(data);
}
}
None
}
#[cfg(target_os = "windows")]
fn load_zh_font() -> Option<Vec<u8>> {
let windir = std::env::var("WINDIR").ok()?;
for path in &[
format!("{}\\Fonts\\msyh.ttc", windir),
format!("{}\\Fonts\\msyhbd.ttc", windir),
format!("{}\\Fonts\\simsun.ttc", windir),
format!("{}\\Fonts\\simhei.ttf", windir),
] {
if let Ok(data) = std::fs::read(&path) {
return Some(data);
}
}
None
}
#[cfg(target_os = "linux")]
fn load_zh_font() -> Option<Vec<u8>> {
for path in &[
"/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc",
"/usr/share/fonts/truetype/wqy/wqy-microhei.ttc",
"/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc",
"/usr/share/fonts/noto-cjk/NotoSansCJK-Regular.ttc",
"/usr/share/fonts/truetype/droid/DroidSansFallbackFull.ttf",
"/usr/share/fonts/truetype/arphic/uming.ttc",
] {
if let Ok(data) = std::fs::read(path) {
return Some(data);
}
}
None
}
#[cfg(not(any(target_os = "macos", target_os = "windows", target_os = "linux")))]
fn load_zh_font() -> Option<Vec<u8>> {
None
}