From c7e3d01e2b7626918efe1d102636b850bba0051d Mon Sep 17 00:00:00 2001 From: Timon Date: Wed, 4 Feb 2026 08:23:50 +0100 Subject: [PATCH] Improve font loading (#3705) Fix fonts not loading --- .../portfolio/document/document_message_handler.rs | 12 +++--------- .../messages/portfolio/portfolio_message_handler.rs | 11 +++++------ 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/editor/src/messages/portfolio/document/document_message_handler.rs b/editor/src/messages/portfolio/document/document_message_handler.rs index 330fe16a..e38597a6 100644 --- a/editor/src/messages/portfolio/document/document_message_handler.rs +++ b/editor/src/messages/portfolio/document/document_message_handler.rs @@ -20,7 +20,7 @@ use crate::messages::portfolio::document::utility_types::document_metadata::{Doc use crate::messages::portfolio::document::utility_types::misc::{AlignAggregate, AlignAxis, FlipAxis, PTZ}; use crate::messages::portfolio::document::utility_types::network_interface::{FlowType, InputConnector, NodeTemplate}; use crate::messages::portfolio::document::utility_types::nodes::RawBuffer; -use crate::messages::portfolio::utility_types::{FontCatalog, PanelType, PersistentData}; +use crate::messages::portfolio::utility_types::{PanelType, PersistentData}; use crate::messages::prelude::*; use crate::messages::tool::common_functionality::graph_modification_utils::{self, get_blend_mode, get_fill, get_opacity}; use crate::messages::tool::tool_messages::select_tool::SelectToolPointerKeys; @@ -36,7 +36,6 @@ use graphene_std::raster::BlendMode; use graphene_std::raster_types::Raster; use graphene_std::subpath::Subpath; use graphene_std::table::Table; -use graphene_std::text::Font; use graphene_std::vector::PointId; use graphene_std::vector::click_target::{ClickTarget, ClickTargetType}; use graphene_std::vector::misc::{dvec2_to_point, point_to_dvec2}; @@ -2175,7 +2174,7 @@ impl DocumentMessageHandler { } /// Loads all of the fonts in the document. - pub fn load_layer_resources(&self, responses: &mut VecDeque, font_catalog: &FontCatalog) { + pub fn load_layer_resources(&self, responses: &mut VecDeque) { let mut fonts_to_load = HashSet::new(); for (_, node, _) in self.document_network().recursive_nodes() { @@ -2187,12 +2186,7 @@ impl DocumentMessageHandler { } for font in fonts_to_load { - if let Some(style) = font_catalog.find_font_style_in_catalog(&font) { - responses.add_front(FrontendMessage::TriggerFontDataLoad { - font: Font::new(font.font_family, style.to_named_style()), - url: style.url, - }); - } + responses.add(PortfolioMessage::LoadFontData { font }); } } diff --git a/editor/src/messages/portfolio/portfolio_message_handler.rs b/editor/src/messages/portfolio/portfolio_message_handler.rs index 0a296727..646b6015 100644 --- a/editor/src/messages/portfolio/portfolio_message_handler.rs +++ b/editor/src/messages/portfolio/portfolio_message_handler.rs @@ -434,11 +434,12 @@ impl MessageHandler> for Portfolio let catalog = &self.persistent_data.font_catalog; if catalog.0.is_empty() { - log::error!("Tried to load document resources before font catalog was loaded"); + responses.add_front(FrontendMessage::TriggerFontCatalogLoad); + return; } if let Some(document) = self.documents.get_mut(&document_id) { - document.load_layer_resources(responses, catalog); + document.load_layer_resources(responses); } } PortfolioMessage::NewDocumentWithName { name } => { @@ -741,7 +742,7 @@ impl MessageHandler> for Portfolio added_nodes = true; } - document.load_layer_resources(responses, &self.persistent_data.font_catalog); + document.load_layer_resources(responses); let new_ids: HashMap<_, _> = entry.nodes.iter().map(|(id, _)| (*id, NodeId::new())).collect(); let layer = LayerNodeIdentifier::new_unchecked(new_ids[&NodeId(0)]); all_new_ids.extend(new_ids.values().cloned()); @@ -1106,9 +1107,7 @@ impl MessageHandler> for Portfolio }; if !document.is_loaded { document.is_loaded = true; - if self.persistent_data.font_catalog.0.is_empty() { - responses.add_front(FrontendMessage::TriggerFontCatalogLoad); - } + responses.add(PortfolioMessage::LoadDocumentResources { document_id }); responses.add(PortfolioMessage::UpdateDocumentWidgets); responses.add(PropertiesPanelMessage::Clear); }