From 414058379b1033a36d2f1ba0d1154e3e92ed0ff5 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Tue, 9 Apr 2024 06:44:57 -0700 Subject: [PATCH] Switch to the system UI font on macOS (#10317) To reference the system font, use the special ".SystemUIFont" family name. /cc @PixelJanitor Release Notes: - Switched to the system UI font for user interface elements on macOS. Co-authored-by: Antonio Scandurra --- assets/settings/default.json | 2 +- crates/gpui/src/platform/linux/text_system.rs | 9 ++++++++- crates/gpui/src/platform/mac/text_system.rs | 16 +++++++++------- crates/gpui/src/platform/windows/text_system.rs | 9 ++++++++- crates/gpui/src/text_system.rs | 2 ++ 5 files changed, 28 insertions(+), 10 deletions(-) diff --git a/assets/settings/default.json b/assets/settings/default.json index 19c1357f227c6210429474660ad3903872fdb08a..879fdce6d06f345942691a6e7250fdf8d46abe31 100644 --- a/assets/settings/default.json +++ b/assets/settings/default.json @@ -36,7 +36,7 @@ // }, "buffer_line_height": "comfortable", // The name of a font to use for rendering text in the UI - "ui_font_family": "Zed Sans", + "ui_font_family": ".SystemUIFont", // The OpenType features to enable for text in the UI "ui_font_features": { // Disable ligatures: diff --git a/crates/gpui/src/platform/linux/text_system.rs b/crates/gpui/src/platform/linux/text_system.rs index e1d5648c134ed301ebff2c03c965db88a5254000..5164ebd93034b37a6ab0b1c48adac5cd709e61ee 100644 --- a/crates/gpui/src/platform/linux/text_system.rs +++ b/crates/gpui/src/platform/linux/text_system.rs @@ -210,9 +210,16 @@ impl LinuxTextSystemState { #[profiling::function] fn load_family( &mut self, - name: &SharedString, + name: &str, _features: FontFeatures, ) -> Result> { + // TODO: Determine the proper system UI font. + let name = if name == ".SystemUIFont" { + "Zed Sans" + } else { + name + }; + let mut font_ids = SmallVec::new(); let families = self .font_system diff --git a/crates/gpui/src/platform/mac/text_system.rs b/crates/gpui/src/platform/mac/text_system.rs index d5bb7230127927c0cd16e489af07d3bce5f2901f..2892b517da58c2360b3a0e28bc4c8ef89a7be4b5 100644 --- a/crates/gpui/src/platform/mac/text_system.rs +++ b/crates/gpui/src/platform/mac/text_system.rs @@ -219,16 +219,18 @@ impl MacTextSystemState { Ok(()) } - fn load_family( - &mut self, - name: &SharedString, - features: FontFeatures, - ) -> Result> { + fn load_family(&mut self, name: &str, features: FontFeatures) -> Result> { + let name = if name == ".SystemUIFont" { + ".AppleSystemUIFont" + } else { + name + }; + let mut font_ids = SmallVec::new(); let family = self .memory_source - .select_family_by_name(name.as_ref()) - .or_else(|_| self.system_source.select_family_by_name(name.as_ref()))?; + .select_family_by_name(name) + .or_else(|_| self.system_source.select_family_by_name(name))?; for font in family.fonts() { let mut font = font.load()?; diff --git a/crates/gpui/src/platform/windows/text_system.rs b/crates/gpui/src/platform/windows/text_system.rs index 5db1a0eea49785dfdfcbbbd628da15402fb7ed7f..6ad8c4be540de6c78532ee20f87bd1a47b1f4d63 100644 --- a/crates/gpui/src/platform/windows/text_system.rs +++ b/crates/gpui/src/platform/windows/text_system.rs @@ -209,9 +209,16 @@ impl WindowsTextSystemState { #[profiling::function] fn load_family( &mut self, - name: &SharedString, + name: &str, _features: FontFeatures, ) -> Result> { + // TODO: Determine the proper system UI font. + let name = if name == ".SystemUIFont" { + "Zed Sans" + } else { + name + }; + let mut font_ids = SmallVec::new(); let families = self .font_system diff --git a/crates/gpui/src/text_system.rs b/crates/gpui/src/text_system.rs index f0c8cfafe3422a43f61f590e3c54c8252611a87b..4d044a2837ce32f243c2efc409d380c9b524703b 100644 --- a/crates/gpui/src/text_system.rs +++ b/crates/gpui/src/text_system.rs @@ -675,6 +675,8 @@ impl Hash for RenderEmojiParams { #[derive(Clone, Debug, Eq, PartialEq, Hash)] pub struct Font { /// The font family name. + /// + /// The special name ".SystemUIFont" is used to identify the system UI font, which varies based on platform. pub family: SharedString, /// The font features to use.