From 046d127f31bad089decc2e213dc8488c43aa6f04 Mon Sep 17 00:00:00 2001 From: Matt Borgerson Date: Thu, 6 Mar 2025 01:57:41 -0700 Subject: [PATCH] ui: Trim FontAwesome font to glyphs in use (save 940KiB) --- data/font_awesome_6_1_1_solid.min.otf | Bin 0 -> 15380 bytes data/meson.build | 2 +- scripts/gen-min-fa-font.sh | 7 +++++++ ui/xui/font-manager.cc | 6 +++--- 4 files changed, 11 insertions(+), 4 deletions(-) create mode 100644 data/font_awesome_6_1_1_solid.min.otf create mode 100755 scripts/gen-min-fa-font.sh diff --git a/data/font_awesome_6_1_1_solid.min.otf b/data/font_awesome_6_1_1_solid.min.otf new file mode 100644 index 0000000000000000000000000000000000000000..0e46b7a47e5fb9039c715b2d8fdf4d58d6f1bbed GIT binary patch literal 15380 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 F{a^Zs&ffq4 literal 0 HcmV?d00001 diff --git a/data/meson.build b/data/meson.build index bb2084bc1c..4a82350d44 100644 --- a/data/meson.build +++ b/data/meson.build @@ -7,7 +7,7 @@ pfiles = [ 'abxy.ttf', 'Roboto-Medium.ttf', 'RobotoCondensed-Regular.ttf', - 'font_awesome_6_1_1_solid.otf', + 'font_awesome_6_1_1_solid.min.otf', # Update glyphs with scripts/gen-min-fa-font.sh ] libpfile_targets = [] diff --git a/scripts/gen-min-fa-font.sh b/scripts/gen-min-fa-font.sh new file mode 100755 index 0000000000..b55b3c5809 --- /dev/null +++ b/scripts/gen-min-fa-font.sh @@ -0,0 +1,7 @@ +#!/bin/bash +set -ex +# uv tool install fonttools +FONT_INPUT=font_awesome_6_1_1_solid.otf +FONT_OUTPUT=font_awesome_6_1_1_solid.min.otf +GLYPHS=$(grep -rhoE "ICON_FA_\w+" ../ui/xui | sort | uniq | sed -E 's/^ICON_FA_//; s/_/-/g; s/.*/\L&/' | paste -sd ",") +pyftsubset $FONT_INPUT --output-file=$FONT_OUTPUT --glyphs=$GLYPHS diff --git a/ui/xui/font-manager.cc b/ui/xui/font-manager.cc index 6dadbc74b0..7074d6f893 100644 --- a/ui/xui/font-manager.cc +++ b/ui/xui/font-manager.cc @@ -21,7 +21,7 @@ #include "data/Roboto-Medium.ttf.h" #include "data/RobotoCondensed-Regular.ttf.h" -#include "data/font_awesome_6_1_1_solid.otf.h" +#include "data/font_awesome_6_1_1_solid.min.otf.h" #include "data/abxy.ttf.h" FontManager g_font_mgr; @@ -81,8 +81,8 @@ void FontManager::Rebuild() ImVec2(0, -3 * g_viewport_mgr.m_scale * m_font_scale); config.GlyphMinAdvanceX = 32.0f * g_viewport_mgr.m_scale * m_font_scale; static const ImWchar icon_ranges[] = { ICON_MIN_FA, ICON_MAX_FA, 0 }; - io.Fonts->AddFontFromMemoryTTF((void *)font_awesome_6_1_1_solid_data, - font_awesome_6_1_1_solid_size, + io.Fonts->AddFontFromMemoryTTF((void *)font_awesome_6_1_1_solid_min_data, + font_awesome_6_1_1_solid_min_size, 18.0f * g_viewport_mgr.m_scale * m_font_scale, &config, icon_ranges);