From 8c20159fb009330aee4281ecb40dcc031ee2d8f0 Mon Sep 17 00:00:00 2001 From: Elena Torro Date: Fri, 6 Jun 2025 09:51:15 +0200 Subject: [PATCH] :bug: Cache emoji font correctly --- frontend/src/app/render_wasm/api/fonts.cljs | 3 ++- render-wasm/src/render/fonts.rs | 13 +++++++++---- render-wasm/src/wasm/fonts.rs | 12 ++++++++++-- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/frontend/src/app/render_wasm/api/fonts.cljs b/frontend/src/app/render_wasm/api/fonts.cljs index bb52dca1c0..3c041ab85e 100644 --- a/frontend/src/app/render_wasm/api/fonts.cljs +++ b/frontend/src/app/render_wasm/api/fonts.cljs @@ -131,7 +131,8 @@ (aget id-buffer 2) (aget id-buffer 3) (:weight font-data) - (:style font-data)))] + (:style font-data) + emoji?))] (when-not font-stored? (store-font-url font-data uri emoji? fallback?))))) diff --git a/render-wasm/src/render/fonts.rs b/render-wasm/src/render/fonts.rs index 6b2fd465ae..e936c77a75 100644 --- a/render-wasm/src/render/fonts.rs +++ b/render-wasm/src/render/fonts.rs @@ -66,7 +66,7 @@ impl FontStore { is_emoji: bool, is_fallback: bool, ) -> Result<(), String> { - if self.has_family(&family) { + if self.has_family(&family, is_emoji) { return Ok(()); } @@ -92,9 +92,14 @@ impl FontStore { Ok(()) } - pub fn has_family(&self, family: &FontFamily) -> bool { - let serialized = format!("{}", family); - self.font_provider.family_names().any(|x| x == serialized) + pub fn has_family(&self, family: &FontFamily, is_emoji: bool) -> bool { + let alias = format!("{}", family); + let font_name = if is_emoji { + DEFAULT_EMOJI_FONT + } else { + alias.as_str() + }; + self.font_provider.family_names().any(|x| x == font_name) } pub fn get_fallback(&self) -> &HashSet { diff --git a/render-wasm/src/wasm/fonts.rs b/render-wasm/src/wasm/fonts.rs index 84ef277039..e3e9b3ed26 100644 --- a/render-wasm/src/wasm/fonts.rs +++ b/render-wasm/src/wasm/fonts.rs @@ -31,11 +31,19 @@ pub extern "C" fn store_font( } #[no_mangle] -pub extern "C" fn is_font_uploaded(a: u32, b: u32, c: u32, d: u32, weight: u32, style: u8) -> bool { +pub extern "C" fn is_font_uploaded( + a: u32, + b: u32, + c: u32, + d: u32, + weight: u32, + style: u8, + is_emoji: bool, +) -> bool { with_state!(state, { let id = uuid_from_u32_quartet(a, b, c, d); let family = FontFamily::new(id, weight, style.into()); - let res = state.render_state().fonts().has_family(&family); + let res = state.render_state().fonts().has_family(&family, is_emoji); res })