diff --git a/frontend/src/app/main/fonts.cljs b/frontend/src/app/main/fonts.cljs index 50b3b00354..5b06f449b4 100644 --- a/frontend/src/app/main/fonts.cljs +++ b/frontend/src/app/main/fonts.cljs @@ -253,7 +253,6 @@ (defn get-variant [{:keys [variants] :as font} font-variant-id] - (prn "get-variant" font-variant-id fonts) (or (d/seek #(= (:id %) font-variant-id) variants) (get-default-variant font))) diff --git a/render-wasm/src/fonts/RobotoMono-Regular.ttf b/render-wasm/src/fonts/RobotoMono-Regular.ttf deleted file mode 100644 index 6df2b25360..0000000000 Binary files a/render-wasm/src/fonts/RobotoMono-Regular.ttf and /dev/null differ diff --git a/render-wasm/src/fonts/sourcesanspro-regular.ttf b/render-wasm/src/fonts/sourcesanspro-regular.ttf new file mode 100644 index 0000000000..cb2f335971 Binary files /dev/null and b/render-wasm/src/fonts/sourcesanspro-regular.ttf differ diff --git a/render-wasm/src/render/fonts.rs b/render-wasm/src/render/fonts.rs index 2460fa27d0..dd8d24f2b3 100644 --- a/render-wasm/src/render/fonts.rs +++ b/render-wasm/src/render/fonts.rs @@ -1,12 +1,22 @@ use skia_safe::{self as skia, textlayout, Font, FontMgr}; -use crate::shapes::FontFamily; +use crate::shapes::{FontFamily, FontStyle}; +use crate::uuid::Uuid; -const DEFAULT_FONT_BYTES: &[u8] = include_bytes!("../fonts/RobotoMono-Regular.ttf"); const EMOJI_FONT_BYTES: &[u8] = include_bytes!("../fonts/NotoColorEmoji-Regular.ttf"); -pub static DEFAULT_FONT: &'static str = "robotomono-regular"; pub static DEFAULT_EMOJI_FONT: &'static str = "noto-color-emoji"; +const DEFAULT_FONT_BYTES: &[u8] = include_bytes!("../fonts/sourcesanspro-regular.ttf"); + +pub fn default_font() -> String { + let family = FontFamily::new(default_font_uuid(), 400, FontStyle::Normal); + format!("{}", family) +} + +fn default_font_uuid() -> Uuid { + Uuid::nil() +} + pub struct FontStore { font_mgr: FontMgr, font_provider: textlayout::TypefaceFontProvider, @@ -18,25 +28,19 @@ impl FontStore { pub fn new() -> Self { let font_mgr = FontMgr::new(); - let mut font_provider = skia::textlayout::TypefaceFontProvider::new(); - - let default_font = font_mgr - .new_from_data(DEFAULT_FONT_BYTES, None) - .expect("Failed to load font"); - - font_provider.register_typeface(default_font, DEFAULT_FONT); + let mut font_provider = load_default_provider(&font_mgr); + // TODO: Load emoji font lazily let emoji_font = font_mgr .new_from_data(EMOJI_FONT_BYTES, None) .expect("Failed to load font"); - font_provider.register_typeface(emoji_font, DEFAULT_EMOJI_FONT); let mut font_collection = skia::textlayout::FontCollection::new(); font_collection.set_default_font_manager(FontMgr::from(font_provider.clone()), None); let debug_typeface = font_provider - .match_family_style("robotomono-regular", skia::FontStyle::default()) + .match_family_style(default_font().as_str(), skia::FontStyle::default()) .unwrap(); let debug_font = skia::Font::new(debug_typeface, 10.0); @@ -85,3 +89,15 @@ impl FontStore { self.font_provider.family_names().any(|x| x == serialized) } } + +fn load_default_provider(font_mgr: &FontMgr) -> skia::textlayout::TypefaceFontProvider { + let mut font_provider = skia::textlayout::TypefaceFontProvider::new(); + + let family = FontFamily::new(default_font_uuid(), 400, FontStyle::Normal); + let font = font_mgr + .new_from_data(DEFAULT_FONT_BYTES, None) + .expect("Failed to load font"); + font_provider.register_typeface(font, family.alias().as_str()); + + font_provider +} diff --git a/render-wasm/src/shapes/fonts.rs b/render-wasm/src/shapes/fonts.rs index a0e624bfc7..7a4524cad5 100644 --- a/render-wasm/src/shapes/fonts.rs +++ b/render-wasm/src/shapes/fonts.rs @@ -39,6 +39,10 @@ impl FontFamily { pub fn new(id: Uuid, weight: u32, style: FontStyle) -> Self { Self { id, style, weight } } + + pub fn alias(&self) -> String { + format!("{}", self) + } } impl fmt::Display for FontFamily { diff --git a/render-wasm/src/shapes/text.rs b/render-wasm/src/shapes/text.rs index d343a2944e..4a5d37af15 100644 --- a/render-wasm/src/shapes/text.rs +++ b/render-wasm/src/shapes/text.rs @@ -1,6 +1,6 @@ use crate::{ math::Rect, - render::{DEFAULT_EMOJI_FONT, DEFAULT_FONT}, + render::{default_font, DEFAULT_EMOJI_FONT}, }; use skia_safe::{ self as skia, @@ -133,7 +133,7 @@ impl TextLeaf { style.set_font_size(self.font_size); style.set_font_families(&[ self.serialized_font_family(), - DEFAULT_FONT.to_string(), + default_font(), DEFAULT_EMOJI_FONT.to_string(), ]); style