diff --git a/crates/editor/src/display_map.rs b/crates/editor/src/display_map.rs index 6684d0ae56a94cf1d33149e1d088320ac7ec22d7..32810b4450c34e03fcc32d71ae44b724c1484aed 100644 --- a/crates/editor/src/display_map.rs +++ b/crates/editor/src/display_map.rs @@ -786,7 +786,7 @@ pub mod tests { let buffer_start_excerpt_header_height = rng.gen_range(1..=5); let excerpt_header_height = rng.gen_range(1..=5); let family_id = font_cache - .load_family(&["Helvetica"], Default::default()) + .load_family(&["Helvetica"], &Default::default()) .unwrap(); let font_id = font_cache .select_font(family_id, &Default::default()) @@ -1045,7 +1045,7 @@ pub mod tests { let font_cache = cx.font_cache(); let family_id = font_cache - .load_family(&["Helvetica"], Default::default()) + .load_family(&["Helvetica"], &Default::default()) .unwrap(); let font_id = font_cache .select_font(family_id, &Default::default()) @@ -1137,7 +1137,7 @@ pub mod tests { let buffer = MultiBuffer::build_simple(&text, cx); let family_id = cx .font_cache() - .load_family(&["Helvetica"], Default::default()) + .load_family(&["Helvetica"], &Default::default()) .unwrap(); let font_id = cx .font_cache() @@ -1222,7 +1222,7 @@ pub mod tests { let font_cache = cx.font_cache(); let family_id = font_cache - .load_family(&["Helvetica"], Default::default()) + .load_family(&["Helvetica"], &Default::default()) .unwrap(); let font_id = font_cache .select_font(family_id, &Default::default()) @@ -1312,7 +1312,7 @@ pub mod tests { let font_cache = cx.font_cache(); let family_id = font_cache - .load_family(&["Courier"], Default::default()) + .load_family(&["Courier"], &Default::default()) .unwrap(); let font_id = font_cache .select_font(family_id, &Default::default()) @@ -1386,7 +1386,7 @@ pub mod tests { let font_cache = cx.font_cache(); let family_id = font_cache - .load_family(&["Courier"], Default::default()) + .load_family(&["Courier"], &Default::default()) .unwrap(); let font_id = font_cache .select_font(family_id, &Default::default()) @@ -1504,7 +1504,7 @@ pub mod tests { let buffer = MultiBuffer::build_simple(text, cx); let font_cache = cx.font_cache(); let family_id = font_cache - .load_family(&["Helvetica"], Default::default()) + .load_family(&["Helvetica"], &Default::default()) .unwrap(); let font_id = font_cache .select_font(family_id, &Default::default()) @@ -1564,7 +1564,7 @@ pub mod tests { let buffer = MultiBuffer::build_simple("aaa\n\t\tbbb", cx); let font_cache = cx.font_cache(); let family_id = font_cache - .load_family(&["Helvetica"], Default::default()) + .load_family(&["Helvetica"], &Default::default()) .unwrap(); let font_id = font_cache .select_font(family_id, &Default::default()) diff --git a/crates/editor/src/display_map/block_map.rs b/crates/editor/src/display_map/block_map.rs index aeeb7bcc441c86bc2a62a4d039382fd29bbe2676..fffe20bb219970028b6aa8ef08b2fe677a8b1c1e 100644 --- a/crates/editor/src/display_map/block_map.rs +++ b/crates/editor/src/display_map/block_map.rs @@ -1017,7 +1017,7 @@ mod tests { let family_id = cx .font_cache() - .load_family(&["Helvetica"], Default::default()) + .load_family(&["Helvetica"], &Default::default()) .unwrap(); let font_id = cx .font_cache() @@ -1190,7 +1190,7 @@ mod tests { let family_id = cx .font_cache() - .load_family(&["Helvetica"], Default::default()) + .load_family(&["Helvetica"], &Default::default()) .unwrap(); let font_id = cx .font_cache() @@ -1249,7 +1249,7 @@ mod tests { let tab_size = 1.try_into().unwrap(); let family_id = cx .font_cache() - .load_family(&["Helvetica"], Default::default()) + .load_family(&["Helvetica"], &Default::default()) .unwrap(); let font_id = cx .font_cache() diff --git a/crates/editor/src/display_map/wrap_map.rs b/crates/editor/src/display_map/wrap_map.rs index deb7be3e6860f7964bfa96f387f713def56eac5c..0d5fb878e583a0269d33b8742e8c18733d19a8fb 100644 --- a/crates/editor/src/display_map/wrap_map.rs +++ b/crates/editor/src/display_map/wrap_map.rs @@ -1054,7 +1054,7 @@ mod tests { }; let tab_size = NonZeroU32::new(rng.gen_range(1..=4)).unwrap(); let family_id = font_cache - .load_family(&["Helvetica"], Default::default()) + .load_family(&["Helvetica"], &Default::default()) .unwrap(); let font_id = font_cache .select_font(family_id, &Default::default()) diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index 8eedda7c58b0d728f9f85ff9a46dce3d15f6047e..adcc4c1eba3b429c689f5967a901ecc2a42d6019 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -6769,7 +6769,6 @@ fn build_style( } } else { let font_family_id = settings.buffer_font_family; - let font_features = settings.buffer_font_features; let font_family_name = cx.font_cache().family_name(font_family_id).unwrap(); let font_properties = Default::default(); let font_id = font_cache @@ -6780,7 +6779,7 @@ fn build_style( text: TextStyle { color: settings.theme.editor.text_color, font_family_name, - font_features, + font_features: settings.buffer_font_features.clone(), font_family_id, font_id, font_size, diff --git a/crates/editor/src/movement.rs b/crates/editor/src/movement.rs index f554c88a4792e481ffb50af2550c74dbe3cf9fb3..3e5f896564f81a3eea5c3be3152f02a0d7e3b4fe 100644 --- a/crates/editor/src/movement.rs +++ b/crates/editor/src/movement.rs @@ -589,7 +589,7 @@ mod tests { cx.set_global(Settings::test(cx)); let family_id = cx .font_cache() - .load_family(&["Helvetica"], Default::default()) + .load_family(&["Helvetica"], &Default::default()) .unwrap(); let font_id = cx .font_cache() diff --git a/crates/editor/src/test.rs b/crates/editor/src/test.rs index 8024986ec5472804fd7cecbc0862507f7f85b4de..9d0c1c7f1ac1fa6cca3983f96712d068bcf9ca7e 100644 --- a/crates/editor/src/test.rs +++ b/crates/editor/src/test.rs @@ -27,7 +27,7 @@ pub fn marked_display_snapshot( let family_id = cx .font_cache() - .load_family(&["Helvetica"], Default::default()) + .load_family(&["Helvetica"], &Default::default()) .unwrap(); let font_id = cx .font_cache() diff --git a/crates/gpui/examples/text.rs b/crates/gpui/examples/text.rs index 82413787c68aaee8f9e3588507992ba5c8ee5381..e16ac440fdd97d0e349f5ac7dedeec612c49bb6b 100644 --- a/crates/gpui/examples/text.rs +++ b/crates/gpui/examples/text.rs @@ -58,7 +58,7 @@ impl gpui::Element for TextElement { let font_size = 12.; let family = cx .font_cache - .load_family(&["SF Pro Display"], Default::default()) + .load_family(&["SF Pro Display"], &Default::default()) .unwrap(); let normal = RunStyle { font_id: cx diff --git a/crates/gpui/src/font_cache.rs b/crates/gpui/src/font_cache.rs index e2884f038feeb04c74b8d50cb996e898b14b871c..4388ad4bcbd2bea66149c05258bfe39d5682af03 100644 --- a/crates/gpui/src/font_cache.rs +++ b/crates/gpui/src/font_cache.rs @@ -59,21 +59,21 @@ impl FontCache { .map(|family| family.name.clone()) } - pub fn load_family(&self, names: &[&str], features: Features) -> Result { + pub fn load_family(&self, names: &[&str], features: &Features) -> Result { for name in names { let state = self.0.upgradable_read(); if let Some(ix) = state .families .iter() - .position(|f| f.name.as_ref() == *name && f.font_features == features) + .position(|f| f.name.as_ref() == *name && f.font_features == *features) { return Ok(FamilyId(ix)); } let mut state = RwLockUpgradableReadGuard::upgrade(state); - if let Ok(font_ids) = state.fonts.load_family(name, &features) { + if let Ok(font_ids) = state.fonts.load_family(name, features) { if font_ids.is_empty() { continue; } @@ -87,7 +87,7 @@ impl FontCache { state.families.push(Family { name: Arc::from(*name), - font_features: features, + font_features: features.clone(), font_ids, }); return Ok(family_id); @@ -263,7 +263,7 @@ mod tests { let arial = fonts .load_family( &["Arial"], - Features { + &Features { calt: Some(false), ..Default::default() }, @@ -283,7 +283,7 @@ mod tests { let arial_with_calt = fonts .load_family( &["Arial"], - Features { + &Features { calt: Some(true), ..Default::default() }, diff --git a/crates/gpui/src/fonts.rs b/crates/gpui/src/fonts.rs index b474d8d00f8f9b9d8e714290b07dc1544b24baee..02fd288d81df44365f66a75b1e0efc7adb543e51 100644 --- a/crates/gpui/src/fonts.rs +++ b/crates/gpui/src/fonts.rs @@ -21,7 +21,7 @@ pub struct FontId(pub usize); pub type GlyphId = u32; -#[derive(Copy, Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize, JsonSchema)] +#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize, JsonSchema)] pub struct Features { pub calt: Option, pub case: Option, @@ -155,7 +155,7 @@ impl TextStyle { font_cache: &FontCache, ) -> Result { let font_family_name = font_family_name.into(); - let font_family_id = font_cache.load_family(&[&font_family_name], font_features)?; + let font_family_id = font_cache.load_family(&[&font_family_name], &font_features)?; let font_id = font_cache.select_font(font_family_id, &font_properties)?; Ok(Self { color, @@ -299,7 +299,7 @@ impl Default for TextStyle { let font_family_name = Arc::from("Courier"); let font_family_id = font_cache - .load_family(&[&font_family_name], Default::default()) + .load_family(&[&font_family_name], &Default::default()) .unwrap(); let font_id = font_cache .select_font(font_family_id, &Default::default()) diff --git a/crates/gpui/src/text_layout.rs b/crates/gpui/src/text_layout.rs index 654922ea2defb2b6eae78d2afb5306e807f8da15..72ea0c8919b9081126a283cc0c163bf3b0e6bfa8 100644 --- a/crates/gpui/src/text_layout.rs +++ b/crates/gpui/src/text_layout.rs @@ -664,7 +664,7 @@ mod tests { let font_cache = cx.font_cache().clone(); let font_system = cx.platform().fonts(); let family = font_cache - .load_family(&["Courier"], Default::default()) + .load_family(&["Courier"], &Default::default()) .unwrap(); let font_id = font_cache.select_font(family, &Default::default()).unwrap(); @@ -728,7 +728,7 @@ mod tests { let text_layout_cache = TextLayoutCache::new(font_system.clone()); let family = font_cache - .load_family(&["Helvetica"], Default::default()) + .load_family(&["Helvetica"], &Default::default()) .unwrap(); let font_id = font_cache.select_font(family, &Default::default()).unwrap(); let normal = RunStyle { diff --git a/crates/settings/src/settings.rs b/crates/settings/src/settings.rs index 630cacf805b224aeecac1f254ab93c6a81baf7a7..4566776a342381c5bc01b79bee46b53dc302e461 100644 --- a/crates/settings/src/settings.rs +++ b/crates/settings/src/settings.rs @@ -406,7 +406,7 @@ impl Settings { buffer_font_family: font_cache .load_family( &[defaults.buffer_font_family.as_ref().unwrap()], - buffer_font_features, + &buffer_font_features, ) .unwrap(), buffer_font_family_name: defaults.buffer_font_family.unwrap(), @@ -473,7 +473,7 @@ impl Settings { } if family_changed { if let Some(id) = font_cache - .load_family(&[&self.buffer_font_family_name], self.buffer_font_features) + .load_family(&[&self.buffer_font_family_name], &self.buffer_font_features) .log_err() { self.buffer_font_family = id; @@ -504,14 +504,6 @@ impl Settings { merge(&mut self.default_dock_anchor, data.default_dock_anchor); merge(&mut self.base_keymap, data.base_keymap); - // Ensure terminal font is loaded, so we can request it in terminal_element layout - if let Some(terminal_font) = &data.terminal.font_family { - // TODO: enable font features for the terminal as well. - font_cache - .load_family(&[terminal_font], Default::default()) - .log_err(); - } - self.editor_overrides = data.editor; self.git_overrides = data.git.unwrap_or_default(); self.journal_overrides = data.journal; @@ -647,7 +639,7 @@ impl Settings { buffer_font_features: Default::default(), buffer_font_family: cx .font_cache() - .load_family(&["Monaco"], Default::default()) + .load_family(&["Monaco"], &Default::default()) .unwrap(), buffer_font_size: 14., active_pane_magnification: 1., diff --git a/crates/terminal_view/src/terminal_element.rs b/crates/terminal_view/src/terminal_element.rs index be210d490556e977a7fee52a88eea051cd0feb1f..f3c8cd37422316789f5f6edddcb78d70d5815a3b 100644 --- a/crates/terminal_view/src/terminal_element.rs +++ b/crates/terminal_view/src/terminal_element.rs @@ -514,11 +514,12 @@ impl TerminalElement { let font_features = settings .terminal_overrides .font_features - .or(settings.terminal_defaults.font_features) - .unwrap_or(settings.buffer_font_features); + .as_ref() + .or(settings.terminal_defaults.font_features.as_ref()) + .unwrap_or(&settings.buffer_font_features); let family_id = font_cache - .load_family(&[font_family_name], font_features) + .load_family(&[font_family_name], &font_features) .log_err() .unwrap_or(settings.buffer_font_family); @@ -536,7 +537,7 @@ impl TerminalElement { color: settings.theme.editor.text_color, font_family_id: family_id, font_family_name: font_cache.family_name(family_id).unwrap(), - font_features, + font_features: font_features.clone(), font_id, font_size, font_properties: Default::default(), diff --git a/crates/theme_testbench/src/theme_testbench.rs b/crates/theme_testbench/src/theme_testbench.rs index f21c631767a948e0ca665778a4c582551eb883a5..993e1bd8c3c818da5920cc9af815bbab55082181 100644 --- a/crates/theme_testbench/src/theme_testbench.rs +++ b/crates/theme_testbench/src/theme_testbench.rs @@ -243,7 +243,7 @@ impl ThemeTestbench { color: style.foreground, font_family_id: family_id, font_family_name: font_cache.family_name(family_id).unwrap(), - font_features: settings.buffer_font_features, + font_features: settings.buffer_font_features.clone(), font_id, font_size, font_properties: Default::default(),