diff --git a/redoxer.sh b/redoxer.sh index 4db9fd5..ba39b4c 100755 --- a/redoxer.sh +++ b/redoxer.sh @@ -25,4 +25,4 @@ redoxer exec \ --gui \ --folder . \ /bin/sh -c \ - "ln -s /ui/fonts /usr/share/fonts && ${cmd}" + "${cmd}" diff --git a/src/font/system/mod.rs b/src/font/system/mod.rs index 8bc1a30..bb44a26 100644 --- a/src/font/system/mod.rs +++ b/src/font/system/mod.rs @@ -3,15 +3,9 @@ pub use self::no_std::*; #[cfg(not(feature = "std"))] mod no_std; -//TODO: use std implementation on Redox -#[cfg(all(feature = "std", target_os = "redox"))] -pub use self::redox::*; -#[cfg(all(feature = "std", target_os = "redox"))] -mod redox; - -#[cfg(all(feature = "std", not(target_os = "redox")))] +#[cfg(feature = "std")] pub use self::std::*; -#[cfg(all(feature = "std", not(target_os = "redox")))] +#[cfg(feature = "std")] mod std; // re-export fontdb diff --git a/src/font/system/redox.rs b/src/font/system/redox.rs deleted file mode 100644 index 5977ac5..0000000 --- a/src/font/system/redox.rs +++ /dev/null @@ -1,102 +0,0 @@ -// SPDX-License-Identifier: MIT OR Apache-2.0 - -use alloc::{ - string::{String, ToString}, - sync::Arc, - vec::Vec, -}; - -use crate::{Attrs, Font, FontMatches}; - -/// Access system fonts -pub struct FontSystem { - locale: String, - db: fontdb::Database, -} - -impl FontSystem { - pub fn new() -> Self { - let locale = sys_locale::get_locale().unwrap_or_else(|| { - log::warn!("failed to get system locale, falling back to en-US"); - String::from("en-US") - }); - log::debug!("Locale: {}", locale); - - //TODO: allow loading fonts from memory - let mut db = fontdb::Database::new(); - { - let now = std::time::Instant::now(); - - db.load_fonts_dir("/ui/fonts"); - //TODO: configurable default fonts - db.set_monospace_family("Fira Mono"); - db.set_sans_serif_family("Fira Sans"); - db.set_serif_family("DejaVu Serif"); - - log::info!( - "Parsed {} font faces in {}ms.", - db.len(), - now.elapsed().as_millis() - ); - } - - { - let now = std::time::Instant::now(); - - //TODO only do this on demand! - for id in db.faces().map(|face| face.id).collect::>() { - unsafe { - db.make_shared_face_data(id); - } - } - - log::info!( - "Mapped {} font faces in {}ms.", - db.len(), - now.elapsed().as_millis() - ); - } - - Self { locale, db } - } - - pub fn locale(&self) -> &str { - &self.locale - } - - pub fn db(&self) -> &fontdb::Database { - &self.db - } - - // Clippy false positive - #[allow(clippy::needless_lifetimes)] - pub fn get_font<'a>(&'a self, id: fontdb::ID) -> Option>> { - let face = self.db.face(id)?; - match Font::new(face) { - Some(font) => Some(Arc::new(font)), - None => { - log::warn!("failed to load font '{}'", face.post_script_name); - None - } - } - } - - pub fn get_font_matches<'a>(&'a self, attrs: Attrs) -> Arc> { - let mut fonts = Vec::new(); - for face in self.db.faces() { - if !attrs.matches(face) { - continue; - } - - if let Some(font) = self.get_font(face.id) { - fonts.push(font); - } - } - - Arc::new(FontMatches { - locale: &self.locale, - default_family: self.db.family_name(&attrs.family).to_string(), - fonts, - }) - } -} diff --git a/src/font/system/std.rs b/src/font/system/std.rs index 9ff1033..071fcb9 100644 --- a/src/font/system/std.rs +++ b/src/font/system/std.rs @@ -46,6 +46,9 @@ impl FontSystem { #[cfg(not(target_arch = "wasm32"))] let now = std::time::Instant::now(); + #[cfg(target_os = "redox")] + db.load_fonts_dir("/ui/fonts"); + db.load_system_fonts(); for source in fonts {