From 8dc6ee6fb1e98b86b82969f5a62a3c34426fea5c Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Wed, 30 Jun 2021 15:46:30 +0200 Subject: [PATCH] Fix font fallback list on macOS with default family Even with an empty font family we should produce a font fallback list, and we can. Fixes the missing checkmark (when not affected by clipping). --- .../rendering_backends/gl/fonts.rs | 46 +++++++++---------- 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/sixtyfps_runtime/rendering_backends/gl/fonts.rs b/sixtyfps_runtime/rendering_backends/gl/fonts.rs index a865de89a..8194d25c2 100644 --- a/sixtyfps_runtime/rendering_backends/gl/fonts.rs +++ b/sixtyfps_runtime/rendering_backends/gl/fonts.rs @@ -142,30 +142,28 @@ pub(crate) fn font_fallbacks_for_request( _request: &FontRequest, _reference_text: &str, ) -> Vec { - _request - .family - .as_ref() - .and_then(|family| { - core_text::font::new_from_name(&family, _request.pixel_size.unwrap_or_default() as f64) - .ok() - }) - .map(|requested_font| { - core_text::font::cascade_list_for_languages( - &requested_font, - &core_foundation::array::CFArray::from_CFTypes(&[]), - ) - .iter() - .map(|fallback_descriptor| FontRequest { - family: Some(fallback_descriptor.family_name().into()), - weight: _request.weight, - pixel_size: _request.pixel_size, - letter_spacing: _request.letter_spacing, - }) - .filter(|fallback| !fallback.family.as_ref().unwrap().starts_with(".")) // font-kit asserts when loading `.Apple Fallback` - .take(1) // Take only the top from the fallback list until we mmap the llaaarge font files - .collect::>() - }) - .unwrap_or_default() + let requested_font = match core_text::font::new_from_name( + &_request.family.as_ref().map_or_else(|| "", |s| s.as_str()), + _request.pixel_size.unwrap_or_default() as f64, + ) { + Ok(f) => f, + Err(_) => return vec![], + }; + + core_text::font::cascade_list_for_languages( + &requested_font, + &core_foundation::array::CFArray::from_CFTypes(&[]), + ) + .iter() + .map(|fallback_descriptor| FontRequest { + family: Some(fallback_descriptor.family_name().into()), + weight: _request.weight, + pixel_size: _request.pixel_size, + letter_spacing: _request.letter_spacing, + }) + .filter(|fallback| !fallback.family.as_ref().unwrap().starts_with(".")) // font-kit asserts when loading `.Apple Fallback` + .take(1) // Take only the top from the fallback list until we mmap the llaaarge font files + .collect::>() } #[cfg(target_os = "windows")]