diff --git a/crates/gpui/src/platform/windows/direct_write.rs b/crates/gpui/src/platform/windows/direct_write.rs index f86d994124903583efb2e803c783d2da021e9f9a..cb22948898fd496d6820e29088a9be7c5c502341 100644 --- a/crates/gpui/src/platform/windows/direct_write.rs +++ b/crates/gpui/src/platform/windows/direct_write.rs @@ -231,7 +231,9 @@ impl PlatformTextSystem for DirectWriteTextSystem { Ok(*font_id) } else { let mut lock = RwLockUpgradableReadGuard::upgrade(lock); - let font_id = lock.select_font(font); + let font_id = lock + .select_font(font) + .with_context(|| format!("Failed to select font: {:?}", font))?; lock.font_selections.insert(font.clone(), font_id); Ok(font_id) } @@ -457,7 +459,7 @@ impl DirectWriteState { } } - fn select_font(&mut self, target_font: &Font) -> FontId { + fn select_font(&mut self, target_font: &Font) -> Option { unsafe { if target_font.family == ".SystemUIFont" { let family = self.system_ui_font_name.clone(); @@ -468,7 +470,6 @@ impl DirectWriteState { &target_font.features, target_font.fallbacks.as_ref(), ) - .unwrap() } else { let family = self.system_ui_font_name.clone(); self.find_font_id( @@ -478,7 +479,7 @@ impl DirectWriteState { &target_font.features, target_font.fallbacks.as_ref(), ) - .unwrap_or_else(|| { + .or_else(|| { #[cfg(any(test, feature = "test-support"))] { panic!("ERROR: {} font not found!", target_font.family); @@ -494,7 +495,6 @@ impl DirectWriteState { target_font.fallbacks.as_ref(), true, ) - .unwrap() } }) } @@ -1472,8 +1472,10 @@ impl IDWriteTextRenderer_Impl for TextRenderer_Impl { .get(&font_identifier) { *id + } else if let Some(id) = context.text_system.select_font(&font_struct) { + id } else { - context.text_system.select_font(&font_struct) + return Err(Error::new(DWRITE_E_NOFONT, "Failed to select font")); }; let glyph_ids = unsafe { std::slice::from_raw_parts(glyphrun.glyphIndices, glyph_count) };