Improve font loading (#3705)

Fix fonts not loading
This commit is contained in:
Timon 2026-02-04 08:23:50 +01:00 committed by GitHub
parent 46989438c1
commit c7e3d01e2b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 8 additions and 15 deletions

View File

@ -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::misc::{AlignAggregate, AlignAxis, FlipAxis, PTZ};
use crate::messages::portfolio::document::utility_types::network_interface::{FlowType, InputConnector, NodeTemplate}; 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::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::prelude::*;
use crate::messages::tool::common_functionality::graph_modification_utils::{self, get_blend_mode, get_fill, get_opacity}; 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; 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::raster_types::Raster;
use graphene_std::subpath::Subpath; use graphene_std::subpath::Subpath;
use graphene_std::table::Table; use graphene_std::table::Table;
use graphene_std::text::Font;
use graphene_std::vector::PointId; use graphene_std::vector::PointId;
use graphene_std::vector::click_target::{ClickTarget, ClickTargetType}; use graphene_std::vector::click_target::{ClickTarget, ClickTargetType};
use graphene_std::vector::misc::{dvec2_to_point, point_to_dvec2}; 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. /// Loads all of the fonts in the document.
pub fn load_layer_resources(&self, responses: &mut VecDeque<Message>, font_catalog: &FontCatalog) { pub fn load_layer_resources(&self, responses: &mut VecDeque<Message>) {
let mut fonts_to_load = HashSet::new(); let mut fonts_to_load = HashSet::new();
for (_, node, _) in self.document_network().recursive_nodes() { for (_, node, _) in self.document_network().recursive_nodes() {
@ -2187,12 +2186,7 @@ impl DocumentMessageHandler {
} }
for font in fonts_to_load { for font in fonts_to_load {
if let Some(style) = font_catalog.find_font_style_in_catalog(&font) { responses.add(PortfolioMessage::LoadFontData { font });
responses.add_front(FrontendMessage::TriggerFontDataLoad {
font: Font::new(font.font_family, style.to_named_style()),
url: style.url,
});
}
} }
} }

View File

@ -434,11 +434,12 @@ impl MessageHandler<PortfolioMessage, PortfolioMessageContext<'_>> for Portfolio
let catalog = &self.persistent_data.font_catalog; let catalog = &self.persistent_data.font_catalog;
if catalog.0.is_empty() { 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) { if let Some(document) = self.documents.get_mut(&document_id) {
document.load_layer_resources(responses, catalog); document.load_layer_resources(responses);
} }
} }
PortfolioMessage::NewDocumentWithName { name } => { PortfolioMessage::NewDocumentWithName { name } => {
@ -741,7 +742,7 @@ impl MessageHandler<PortfolioMessage, PortfolioMessageContext<'_>> for Portfolio
added_nodes = true; 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 new_ids: HashMap<_, _> = entry.nodes.iter().map(|(id, _)| (*id, NodeId::new())).collect();
let layer = LayerNodeIdentifier::new_unchecked(new_ids[&NodeId(0)]); let layer = LayerNodeIdentifier::new_unchecked(new_ids[&NodeId(0)]);
all_new_ids.extend(new_ids.values().cloned()); all_new_ids.extend(new_ids.values().cloned());
@ -1106,9 +1107,7 @@ impl MessageHandler<PortfolioMessage, PortfolioMessageContext<'_>> for Portfolio
}; };
if !document.is_loaded { if !document.is_loaded {
document.is_loaded = true; document.is_loaded = true;
if self.persistent_data.font_catalog.0.is_empty() { responses.add(PortfolioMessage::LoadDocumentResources { document_id });
responses.add_front(FrontendMessage::TriggerFontCatalogLoad);
}
responses.add(PortfolioMessage::UpdateDocumentWidgets); responses.add(PortfolioMessage::UpdateDocumentWidgets);
responses.add(PropertiesPanelMessage::Clear); responses.add(PropertiesPanelMessage::Clear);
} }