Stateless build of the special font file

Keep the glyphs in SVG format and build the font using a FontForge
script.
A part of the previous font is kept because the sources is lost.

This adds a new dependency to the build system, fontforge.
This commit is contained in:
Jules Aguillon 2022-03-17 20:08:26 +01:00
parent fe35d5fd5a
commit e63ff8f837
12 changed files with 83 additions and 26 deletions

View File

@ -6,7 +6,6 @@ ANDROID_PLATFORM_VERSION = android-30
JAVA_VERSION = 1.8
SRC_DIR = srcs
ASSETS_DIR = assets
RES_DIR = res
EXTRA_JARS =
@ -46,7 +45,6 @@ JAVAC_FLAGS = -source $(JAVA_VERSION) -target $(JAVA_VERSION) -encoding utf8
MANIFEST_FILE = AndroidManifest.xml
JAVA_FILES = $(shell find $(SRC_DIR) -name '*.java')
RES_FILES = $(shell find $(RES_DIR) -type f)
ASSETS_FILES = $(shell find $(ASSETS_DIR) -type f 2>/dev/null)
# Debug signing
@ -80,11 +78,12 @@ _build/%.apk: _build/%.unsigned-apk %-keystore.conf
_build/%.unsigned-apk: _build/%.unaligned-apk
$(ANDROID_BUILD_TOOLS)/zipalign -fp 4 "$<" "$@"
_build/%.unaligned-apk: _build/classes.dex $(MANIFEST_FILE) $(ASSETS_FILES)
APK_EXTRA_FILES = classes.dex assets/special_font.ttf
_build/%.unaligned-apk: $(addprefix _build/,$(APK_EXTRA_FILES)) $(MANIFEST_FILE)
$(ANDROID_BUILD_TOOLS)/aapt package -f -M $(MANIFEST_FILE) -S $(RES_DIR) \
-I $(ANDROID_PLATFORM)/android.jar -F "$@" $(AAPT_PACKAGE_FLAGS)
[ -z "$(ASSETS_FILES)" ] || $(ANDROID_BUILD_TOOLS)/aapt add "$@" $(ASSETS_FILES)
cd $(@D) && $(ANDROID_BUILD_TOOLS)/aapt add $(@F) classes.dex
cd $(@D) && $(ANDROID_BUILD_TOOLS)/aapt add $(@F) $(APK_EXTRA_FILES)
# R.java
@ -96,6 +95,16 @@ $(R_FILE): $(RES_FILES) $(MANIFEST_FILE)
$(ANDROID_BUILD_TOOLS)/aapt package -f -m -S $(RES_DIR) -J $(GEN_DIR) \
-M $(MANIFEST_FILE) -I $(ANDROID_PLATFORM)/android.jar
# Special font
SPECIAL_FONT_BASE_FONT = srcs/special_font/base_font.ttf
SPECIAL_FONT_GLYPHS = $(wildcard srcs/special_font/*.svg)
SPECIAL_FONT_SCRIPT = srcs/special_font/build.pe
_build/assets/special_font.ttf: $(SPECIAL_FONT_SCRIPT) $(SPECIAL_FONT_BASE_FONT) $(SPECIAL_FONT_GLYPHS)
mkdir -p $(@D)
fontforge -lang=ff -script $(SPECIAL_FONT_SCRIPT) $@ $(SPECIAL_FONT_BASE_FONT) $(SPECIAL_FONT_GLYPHS)
# Compile java classes and build classes.dex
OBJ_DIR = _build/class

View File

@ -1,15 +0,0 @@
# Fonts
The glyphs from this font are made by:
- Home and End
Author: @sdrapha
- Cog
Copyright (C) 2016 by Dave Gandy
Author: Dave Gandy
License: SIL ()
- Emoticon, PageUp and PageDown
IcoMoon-Free is a free vector icon pack by Keyamoon.
License: Attribution 4.0 International (CC BY 4.0)

View File

@ -14,6 +14,6 @@ let
in
pkgs.mkShell {
buildInputs = [ pkgs.findutils jdk android.androidsdk ];
buildInputs = [ pkgs.findutils jdk android.androidsdk pkgs.fontforge ];
ANDROID_HOME = "${android.androidsdk}/libexec/android-sdk";
}

View File

@ -228,10 +228,10 @@ class KeyValue
addCharKey('€', EVENT_NONE, FLAG_LOCALIZED);
addCharKey('£', EVENT_NONE, FLAG_LOCALIZED);
addSpecialKey("config", "\uE806", EVENT_CONFIG, FLAG_KEY_FONT | FLAG_SMALLER_FONT);
addSpecialKey("config", "\u0004", EVENT_CONFIG, FLAG_KEY_FONT | FLAG_SMALLER_FONT);
addSpecialKey("switch_text", "ABC", EVENT_SWITCH_TEXT);
addSpecialKey("switch_numeric", "123+", EVENT_SWITCH_NUMERIC);
addSpecialKey("switch_emoji", "\uE812" , EVENT_SWITCH_EMOJI, FLAG_KEY_FONT | FLAG_SMALLER_FONT);
addSpecialKey("switch_emoji", "\u0001" , EVENT_SWITCH_EMOJI, FLAG_KEY_FONT | FLAG_SMALLER_FONT);
addSpecialKey("switch_back_emoji", "ABC", EVENT_SWITCH_BACK_EMOJI);
addSpecialKey("change_method", "\ue807", EVENT_CHANGE_METHOD, FLAG_KEY_FONT | FLAG_SMALLER_FONT);
addSpecialKey("action", "Action", EVENT_ACTION, FLAG_SMALLER_FONT); // Will always be replaced
@ -242,8 +242,8 @@ class KeyValue
addEventKey("right", "\uE80C", KeyEvent.KEYCODE_DPAD_RIGHT, FLAG_KEY_FONT | FLAG_PRECISE_REPEAT);
addEventKey("down", "\uE809", KeyEvent.KEYCODE_DPAD_DOWN, FLAG_KEY_FONT | FLAG_PRECISE_REPEAT);
addEventKey("left", "\uE80A", KeyEvent.KEYCODE_DPAD_LEFT, FLAG_KEY_FONT | FLAG_PRECISE_REPEAT);
addEventKey("page_up", "\uE810", KeyEvent.KEYCODE_PAGE_UP, FLAG_KEY_FONT);
addEventKey("page_down", "\uE811", KeyEvent.KEYCODE_PAGE_DOWN, FLAG_KEY_FONT);
addEventKey("page_up", "\u0002", KeyEvent.KEYCODE_PAGE_UP, FLAG_KEY_FONT);
addEventKey("page_down", "\u0003", KeyEvent.KEYCODE_PAGE_DOWN, FLAG_KEY_FONT);
addEventKey("home", "\uE80E", KeyEvent.KEYCODE_MOVE_HOME, FLAG_KEY_FONT);
addEventKey("end", "\uE80F", KeyEvent.KEYCODE_MOVE_END, FLAG_KEY_FONT);
addEventKey("backspace", "", KeyEvent.KEYCODE_DEL, FLAG_SMALLER_FONT);

View File

@ -70,7 +70,7 @@ public class Theme
{
if (_specialKeyFont == null)
{
_specialKeyFont = Typeface.createFromAsset(context.getAssets(), "fonts/keys.ttf");
_specialKeyFont = Typeface.createFromAsset(context.getAssets(), "special_font.ttf");
}
return _specialKeyFont;
}

7
srcs/special_font/01.svg Normal file
View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- IcoMoon-Free 227-smile2 CC BY 4.0 -->
<!-- Generated by IcoMoon.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
<path fill="#000000" d="M8 0c-4.418 0-8 3.582-8 8s3.582 8 8 8 8-3.582 8-8-3.582-8-8-8zM11 4c0.552 0 1 0.448 1 1s-0.448 1-1 1-1-0.448-1-1 0.448-1 1-1zM5 4c0.552 0 1 0.448 1 1s-0.448 1-1 1-1-0.448-1-1 0.448-1 1-1zM8 13c-1.82 0-3.413-0.973-4.288-2.427l1.286-0.772c0.612 1.018 1.727 1.699 3.002 1.699s2.389-0.681 3.002-1.699l1.286 0.772c-0.874 1.454-2.467 2.427-4.288 2.427z"></path>
</svg>

After

Width:  |  Height:  |  Size: 742 B

16
srcs/special_font/02.svg Normal file
View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- IcoMoon-Free 327-move-up CC BY 4.0 -->
<!-- Generated by IcoMoon.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
<path fill="#000000" d="M11 8v6h1v-6h2.5l-3-3-3 3z"></path>
<path fill="#000000" d="M1 3h1.5v1h-1.5v-1z"></path>
<path fill="#000000" d="M3 3h1.5v1h-1.5v-1z"></path>
<path fill="#000000" d="M5 3h1v1.5h-1v-1.5z"></path>
<path fill="#000000" d="M1 6.5h1v1.5h-1v-1.5z"></path>
<path fill="#000000" d="M2.5 7h1.5v1h-1.5v-1z"></path>
<path fill="#000000" d="M4.5 7h1.5v1h-1.5v-1z"></path>
<path fill="#000000" d="M1 4.5h1v1.5h-1v-1.5z"></path>
<path fill="#000000" d="M5 5h1v1.5h-1v-1.5z"></path>
<path fill="#000000" d="M5 11v3h-3v-3h3zM6 10h-5v5h5v-5z"></path>
</svg>

After

Width:  |  Height:  |  Size: 921 B

16
srcs/special_font/03.svg Normal file
View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- IcoMoon-Free 328-move-down CC BY 4.0 -->
<!-- Generated by IcoMoon.io -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16">
<path fill="#000000" d="M12 11v-6h-1v6h-2.5l3 3 3-3z"></path>
<path fill="#000000" d="M5 4v3h-3v-3h3zM6 3h-5v5h5v-5z"></path>
<path fill="#000000" d="M1 10h1.5v1h-1.5v-1z"></path>
<path fill="#000000" d="M3 10h1.5v1h-1.5v-1z"></path>
<path fill="#000000" d="M5 10h1v1.5h-1v-1.5z"></path>
<path fill="#000000" d="M1 13.5h1v1.5h-1v-1.5z"></path>
<path fill="#000000" d="M2.5 14h1.5v1h-1.5v-1z"></path>
<path fill="#000000" d="M4.5 14h1.5v1h-1.5v-1z"></path>
<path fill="#000000" d="M1 11.5h1v1.5h-1v-1.5z"></path>
<path fill="#000000" d="M5 12h1v1.5h-1v-1.5z"></path>
</svg>

After

Width:  |  Height:  |  Size: 931 B

1
srcs/special_font/04.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M495.9 166.6C499.2 175.2 496.4 184.9 489.6 191.2L446.3 230.6C447.4 238.9 448 247.4 448 256C448 264.6 447.4 273.1 446.3 281.4L489.6 320.8C496.4 327.1 499.2 336.8 495.9 345.4C491.5 357.3 486.2 368.8 480.2 379.7L475.5 387.8C468.9 398.8 461.5 409.2 453.4 419.1C447.4 426.2 437.7 428.7 428.9 425.9L373.2 408.1C359.8 418.4 344.1 427 329.2 433.6L316.7 490.7C314.7 499.7 307.7 506.1 298.5 508.5C284.7 510.8 270.5 512 255.1 512C241.5 512 227.3 510.8 213.5 508.5C204.3 506.1 197.3 499.7 195.3 490.7L182.8 433.6C167 427 152.2 418.4 138.8 408.1L83.14 425.9C74.3 428.7 64.55 426.2 58.63 419.1C50.52 409.2 43.12 398.8 36.52 387.8L31.84 379.7C25.77 368.8 20.49 357.3 16.06 345.4C12.82 336.8 15.55 327.1 22.41 320.8L65.67 281.4C64.57 273.1 64 264.6 64 256C64 247.4 64.57 238.9 65.67 230.6L22.41 191.2C15.55 184.9 12.82 175.3 16.06 166.6C20.49 154.7 25.78 143.2 31.84 132.3L36.51 124.2C43.12 113.2 50.52 102.8 58.63 92.95C64.55 85.8 74.3 83.32 83.14 86.14L138.8 103.9C152.2 93.56 167 84.96 182.8 78.43L195.3 21.33C197.3 12.25 204.3 5.04 213.5 3.51C227.3 1.201 241.5 0 256 0C270.5 0 284.7 1.201 298.5 3.51C307.7 5.04 314.7 12.25 316.7 21.33L329.2 78.43C344.1 84.96 359.8 93.56 373.2 103.9L428.9 86.14C437.7 83.32 447.4 85.8 453.4 92.95C461.5 102.8 468.9 113.2 475.5 124.2L480.2 132.3C486.2 143.2 491.5 154.7 495.9 166.6V166.6zM256 336C300.2 336 336 300.2 336 255.1C336 211.8 300.2 175.1 256 175.1C211.8 175.1 176 211.8 176 255.1C176 300.2 211.8 336 256 336z"/></svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -0,0 +1,8 @@
# Fonts
See copyright notice in each SVG files.
The glyphs in `base_font.ttf` are made by:
- Home and End
Author: @sdrapha

View File

@ -0,0 +1,15 @@
# The special font is used for the symbols of some keys. It is built from SVG
# files, one for each glyph.
# Starts from an existing font file for glyphs that don't have SVG sources yet.
Open($2)
# Imports glyphs, file name is position in the font.
i = 3
while (i < $argc)
Select(Strtol($argv[i]:t:r))
Import($argv[i])
i++
endloop
Generate($1)