Bundle Newsreader serif and apply to hero text

Embeds Newsreader (variable opsz/wght, OFL-licensed) into the
ely_app binary via include_bytes!, registers it through GPUI's
text_system at startup (chrome::typography::register_serif_fonts),
and exposes the SERIF_FAMILY constant for downstream surfaces.

Apply the family to every page hero where the design uses
ely-serif: home headline, settings/appearance headline, plugin
marketplace headline, sync headline, plugin detail name, and the
home reading-list cover headline. The OFL license file ships
alongside the .ttf assets to satisfy the font's redistribution
clause.
This commit is contained in:
2026-05-09 18:57:40 -04:00
parent 273ac07ceb
commit ed3150f9ed
12 changed files with 129 additions and 2 deletions
@@ -9,6 +9,7 @@ use gpui::{
use gpui_component::{IconName, scroll::ScrollableElement};
use crate::shell::ElyShell;
use crate::shell::chrome::SERIF_FAMILY;
pub(crate) fn render_appearance_form(
snapshot: &BrowserSnapshot,
@@ -48,6 +49,7 @@ fn render_header() -> AnyElement {
)
.child(
div()
.font_family(SERIF_FAMILY)
.text_size(px(34.0))
.font_weight(FontWeight(400.0))
.text_color(rgb(colors::INK))
@@ -7,6 +7,8 @@ use gpui_component::IconName;
use crate::shell::ElyShell;
use crate::shell::chrome::SERIF_FAMILY;
use super::style::{
ARROW_CHIP_BG, PILL_BG, PILL_BG_HOVER, SEARCH_BG, card_shadow, soft_shadow,
};
@@ -42,6 +44,7 @@ fn render_greeting_row(text: String) -> AnyElement {
fn render_serif_headline() -> AnyElement {
div()
.font_family(SERIF_FAMILY)
.text_size(px(64.0))
.font_weight(FontWeight(400.0))
.text_color(rgb(colors::INK))
@@ -10,7 +10,7 @@ use gpui::{
};
use crate::shell::ElyShell;
use crate::shell::chrome::render_glyph_for;
use crate::shell::chrome::{SERIF_FAMILY, render_glyph_for};
use super::style::{CARD_BG, card_shadow};
use super::time::relative_time_label;
@@ -217,6 +217,7 @@ fn render_reading_list_cover(
.gap_1()
.child(
div()
.font_family(SERIF_FAMILY)
.text_size(px(18.0))
.font_weight(FontWeight(500.0))
.text_color(rgb(0xffffff))
+2
View File
@@ -8,6 +8,7 @@ pub(crate) mod sidebar;
pub(crate) mod sidebar_header;
pub(crate) mod split_pane;
pub(crate) mod topbar;
pub(crate) mod typography;
pub(crate) mod wallpaper;
pub(crate) use appearance_form::render_appearance_form;
@@ -22,4 +23,5 @@ pub(crate) use split_pane::{
render_split_pane_header,
};
pub(crate) use topbar::render_topbar;
pub(crate) use typography::{SERIF_FAMILY, register_serif_fonts};
pub(crate) use wallpaper::render_wallpaper;
@@ -0,0 +1,17 @@
use std::borrow::Cow;
use gpui::App;
const NEWSREADER_REGULAR: &[u8] =
include_bytes!("../../../assets/fonts/Newsreader.ttf");
const NEWSREADER_ITALIC: &[u8] =
include_bytes!("../../../assets/fonts/Newsreader-Italic.ttf");
pub(crate) const SERIF_FAMILY: &str = "Newsreader";
pub(crate) fn register_serif_fonts(cx: &App) -> gpui::Result<()> {
cx.text_system().add_fonts(vec![
Cow::Borrowed(NEWSREADER_REGULAR),
Cow::Borrowed(NEWSREADER_ITALIC),
])
}
@@ -10,6 +10,7 @@ use gpui_component::{IconName, scroll::ScrollableElement};
use super::plugin_editors_pick::{action_button, render_editors_pick};
use super::{ElyShell, render_canvas_surface};
use crate::shell::chrome::SERIF_FAMILY;
impl ElyShell {
pub(super) fn render_plugin_catalog_page(
@@ -58,6 +59,7 @@ fn render_hero_left(snapshot: &BrowserSnapshot, cx: &mut Context<ElyShell>) -> A
)
.child(
div()
.font_family(SERIF_FAMILY)
.text_size(px(48.0))
.font_weight(FontWeight(400.0))
.text_color(rgb(colors::INK))
@@ -10,6 +10,7 @@ use gpui_component::{
};
use super::{ElyShell, render_canvas_surface};
use crate::shell::chrome::SERIF_FAMILY;
impl ElyShell {
pub(super) fn render_plugin_detail_page(
@@ -75,7 +76,8 @@ impl ElyShell {
.gap_2()
.child(
div()
.text_size(px(26.0))
.font_family(SERIF_FAMILY)
.text_size(px(28.0))
.truncate()
.text_color(rgb(colors::INK))
.child(plugin.manifest().name().to_string()),
@@ -12,6 +12,7 @@ use gpui_component::{IconName, scroll::ScrollableElement};
use crate::brand::SYNC_SERVICE_NAME;
use super::{ElyShell, render_canvas_surface};
use crate::shell::chrome::SERIF_FAMILY;
impl ElyShell {
pub(super) fn render_sync_page(
@@ -78,6 +79,7 @@ fn render_status_pill(snapshot: &BrowserSnapshot) -> AnyElement {
fn render_serif_headline() -> AnyElement {
div()
.font_family(SERIF_FAMILY)
.text_size(px(46.0))
.font_weight(FontWeight(400.0))
.text_color(rgb(colors::INK))