use eframe::egui::{Context, FontFamily};
use eframe::epaint::text::{FontData, FontDefinitions};
use std::sync::Arc;
const JB_MONO_REG: &[u8] = include_bytes!(concat!(env!("CARGO_MANIFEST_DIR"), "/assets/fonts/JetBrainsMono-Regular.ttf"));
const WENKAI_SC_REG: &[u8] = include_bytes!(concat!(env!("CARGO_MANIFEST_DIR"), "/assets/fonts/LXGWWenKaiMono-Regular.ttf"));
const WENKAI_TC_REG: &[u8] = include_bytes!(concat!(env!("CARGO_MANIFEST_DIR"), "/assets/fonts/LXGWWenKaiMonoTC-Regular.ttf"));
#[inline]
fn insert_static(defs: &mut FontDefinitions, key: &str, bytes: &'static [u8]) {
defs.font_data
.insert(key.to_string(), Arc::from(FontData::from_static(bytes)));
}
fn push_front_unique(defs: &mut FontDefinitions, family: FontFamily, name: &str) {
if !defs.font_data.contains_key(name) {
return;
}
if let Some(list) = defs.families.get_mut(&family) {
if let Some(pos) = list.iter().position(|s| s == name) {
list.remove(pos);
}
list.insert(0, name.to_string());
}
}
fn push_front_both(defs: &mut FontDefinitions, name: &str) {
push_front_unique(defs, FontFamily::Proportional, name);
push_front_unique(defs, FontFamily::Monospace, name);
}
pub fn install_fonts(ctx: &Context) {
let mut defs = FontDefinitions::default();
insert_static(&mut defs, "JetBrainsMono-Regular", JB_MONO_REG);
insert_static(&mut defs, "LXGWWenKaiMonoTC-Regular", WENKAI_TC_REG);
insert_static(&mut defs, "LXGWWenKaiMono-Regular", WENKAI_SC_REG);
push_front_both(&mut defs, "LXGWWenKaiMono-Regular"); push_front_both(&mut defs, "LXGWWenKaiMonoTC-Regular"); push_front_both(&mut defs, "JetBrainsMono-Regular");
ctx.set_fonts(defs);
}