From 787c6db73898254017eed4708aaf7e0698f6c389 Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Wed, 28 Feb 2024 10:48:03 +0100 Subject: [PATCH] Work around crash on macOS when rendering certain emojis Set a default font manager to avoid that the unconditional dereferencing inside Skia crashes on a null pointer. Upstream PR: https://github.com/google/skia/pull/162 Fixes #4696 --- internal/renderers/skia/textlayout.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/internal/renderers/skia/textlayout.rs b/internal/renderers/skia/textlayout.rs index 3d513f1690c..b725a3656d0 100644 --- a/internal/renderers/skia/textlayout.rs +++ b/internal/renderers/skia/textlayout.rs @@ -9,6 +9,7 @@ use i_slint_core::graphics::FontRequest; use i_slint_core::items::{TextHorizontalAlignment, TextVerticalAlignment}; use i_slint_core::lengths::{LogicalLength, ScaleFactor}; use i_slint_core::{items, Color}; +use skia_safe::FontMgr; use super::itemrenderer::to_skia_color; use super::{PhysicalLength, PhysicalPoint, PhysicalRect, PhysicalSize}; @@ -33,6 +34,7 @@ thread_local! { let font_mgr = skia_safe::FontMgr::new(); let type_face_font_provider = skia_safe::textlayout::TypefaceFontProvider::new(); let mut font_collection = skia_safe::textlayout::FontCollection::new(); + font_collection.set_default_font_manager(FontMgr::new(), None); // FontCollection first looks up in the dynamic font manager and then the asset font manager. If the // family is empty, the default font manager will match against the system default. We want that behavior, // and only if the family is not present in the system, then we want to fall back to the assert font manager