Refactor UI font generation to support different rendering modes based on size. Small UI fonts (12pt) use 1-bit rendering for crisp display and reduced flash usage. Large UI fonts (14pt) now use 2-bit compressed rendering to stay smooth when scaled up on touch/high-density boards. Extract font generation logic into reusable generate_ui_font() function.
78 lines
3.1 KiB
Bash
Executable File
78 lines
3.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
cd "$(dirname "$0")"
|
|
|
|
READER_FONT_STYLES=("Regular" "Italic" "Bold" "BoldItalic")
|
|
NOTOSERIF_FONT_SIZES=(12 14 16 18)
|
|
NOTOSANS_FONT_SIZES=(12 14 16 18)
|
|
|
|
for size in ${NOTOSERIF_FONT_SIZES[@]}; do
|
|
for style in ${READER_FONT_STYLES[@]}; do
|
|
font_name="notoserif_${size}_$(echo $style | tr '[:upper:]' '[:lower:]')"
|
|
font_path="../builtinFonts/source/NotoSerif/NotoSerif-${style}.ttf"
|
|
output_path="../builtinFonts/${font_name}.h"
|
|
python fontconvert.py $font_name $size $font_path --2bit --compress --pnum > $output_path
|
|
echo "Generated $output_path"
|
|
done
|
|
done
|
|
|
|
for size in ${NOTOSANS_FONT_SIZES[@]}; do
|
|
for style in ${READER_FONT_STYLES[@]}; do
|
|
font_name="notosans_${size}_$(echo $style | tr '[:upper:]' '[:lower:]')"
|
|
font_path="../builtinFonts/source/NotoSans/NotoSans-${style}.ttf"
|
|
output_path="../builtinFonts/${font_name}.h"
|
|
python fontconvert.py $font_name $size $font_path --2bit --compress --pnum > $output_path
|
|
echo "Generated $output_path"
|
|
done
|
|
done
|
|
|
|
# Small UI chrome (button devices, uiScale 1.0). Rendered 1-bit: crisp at these
|
|
# sizes and half the flash of 2-bit.
|
|
UI_FONT_SIZES=(10 12)
|
|
# Larger UI chrome substituted in on touch/high-density boards via the uiScale
|
|
# remap (see src/main.cpp setupFonts). Rendered 2-bit so it stays smooth when
|
|
# enlarged. Touch boards use uiScale 1.2, so UI_12 -> 14.4 -> 14 is the size the
|
|
# remap actually lands on; add larger sizes here if a board adopts a higher scale.
|
|
UI_FONT_SIZES_LARGE=(14)
|
|
UI_FONT_STYLES=("Regular" "Bold")
|
|
|
|
# Ubuntu lacks the Latin Extended Additional block (U+1EA0-U+1EF9) used for
|
|
# Vietnamese tone marks. Append a Vietnamese-only Ubuntu cut so those glyphs are
|
|
# filled from it while every glyph Ubuntu already has stays unchanged (fontstack
|
|
# is ordered by descending priority). NotoSansHebrew fills U+05D0-U+05EA so the
|
|
# Hebrew UI translation renders in menus and settings.
|
|
generate_ui_font() {
|
|
local size="$1" style="$2" extra_flags="$3"
|
|
local font_name="ubuntu_${size}_$(echo $style | tr '[:upper:]' '[:lower:]')"
|
|
local font_path="../builtinFonts/source/Ubuntu/Ubuntu-${style}.ttf"
|
|
local hebrew_path="../builtinFonts/source/NotoSansHebrew/NotoSansHebrew-${style}.ttf"
|
|
local viet_path="../builtinFonts/source/Ubuntu/Ubuntu-Vietnamese-${style}.ttf"
|
|
local output_path="../builtinFonts/${font_name}.h"
|
|
python fontconvert.py $font_name $size $font_path $hebrew_path $viet_path \
|
|
--additional-intervals 0x05D0,0x05EA $extra_flags > $output_path
|
|
echo "Generated $output_path"
|
|
}
|
|
|
|
for size in ${UI_FONT_SIZES[@]}; do
|
|
for style in ${UI_FONT_STYLES[@]}; do
|
|
generate_ui_font $size $style ""
|
|
done
|
|
done
|
|
|
|
for size in ${UI_FONT_SIZES_LARGE[@]}; do
|
|
for style in ${UI_FONT_STYLES[@]}; do
|
|
generate_ui_font $size $style "--2bit --compress"
|
|
done
|
|
done
|
|
|
|
python fontconvert.py notosans_8_regular 8 \
|
|
../builtinFonts/source/NotoSans/NotoSans-Regular.ttf \
|
|
../builtinFonts/source/NotoSansHebrew/NotoSansHebrew-Regular.ttf \
|
|
--additional-intervals 0x05D0,0x05EA > ../builtinFonts/notosans_8_regular.h
|
|
|
|
echo ""
|
|
echo "Running compression verification..."
|
|
python verify_compression.py ../builtinFonts/
|