use bevy::{asset::AssetId, prelude::*};
pub use lucide_icons::Icon;
#[derive(Resource, Deref, DerefMut)]
pub struct IconFont(pub Handle<Font>);
#[derive(Resource)]
pub struct EditorFont(pub Handle<Font>);
#[derive(Resource)]
pub struct EditorFontItalic(pub Handle<Font>);
pub struct IconFontPlugin;
const FIRA_SANS_BYTES: &[u8] = include_bytes!("../fonts/FiraSans-Regular.ttf");
const FIRA_SANS_ITALIC_BYTES: &[u8] = include_bytes!("../fonts/FiraSans-Italic.ttf");
impl Plugin for IconFontPlugin {
fn build(&self, app: &mut App) {
let mut fonts = app.world_mut().resource_mut::<Assets<Font>>();
let icon_font = Font::try_from_bytes(lucide_icons::LUCIDE_FONT_BYTES.to_vec())
.expect("Failed to load Lucide icon font");
let icon_handle = fonts.add(icon_font);
let editor_font =
Font::try_from_bytes(FIRA_SANS_BYTES.to_vec()).expect("Failed to load FiraSans font");
let editor_font_handle = fonts.add(editor_font.clone());
let editor_font_italic = Font::try_from_bytes(FIRA_SANS_ITALIC_BYTES.to_vec())
.expect("Failed to load FiraSans Italic font");
let editor_font_italic_handle = fonts.add(editor_font_italic);
let _ = fonts.insert(AssetId::default(), editor_font);
app.insert_resource(IconFont(icon_handle));
app.insert_resource(EditorFont(editor_font_handle));
app.insert_resource(EditorFontItalic(editor_font_italic_handle));
}
}
pub fn icon(icon: Icon, size: f32, font: Handle<Font>) -> impl Bundle {
(
Text::new(String::from(icon.unicode())),
TextFont {
font,
font_size: size,
..Default::default()
},
)
}
pub fn icon_colored(icon: Icon, size: f32, font: Handle<Font>, color: Color) -> impl Bundle {
(
Text::new(String::from(icon.unicode())),
TextFont {
font,
font_size: size,
..Default::default()
},
TextColor(color),
)
}