From 860759cd485051d4d4456f4937d850a68ed890f0 Mon Sep 17 00:00:00 2001 From: Frans de Jonge Date: Sat, 24 Aug 2019 11:12:06 +0200 Subject: [PATCH] Support loading GUI fonts from any known folder --- frontend/ui/font.lua | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/frontend/ui/font.lua b/frontend/ui/font.lua index 105bb99ed..3584b2bae 100644 --- a/frontend/ui/font.lua +++ b/frontend/ui/font.lua @@ -2,10 +2,10 @@ Font module. ]] +local FontList = require("fontlist") local Freetype = require("ffi/freetype") -local logger = require("logger") local Screen = require("device").screen -local FontList = require("fontlist") +local logger = require("logger") local Font = { fontmap = { @@ -28,18 +28,18 @@ local Font = { pgfont = "noto/NotoSans-Regular.ttf", -- selectmenu: font for item shortcut - scfont = "droid/DroidSansMono.ttf", + scfont = "DroidSansMono.ttf", -- help page: font for displaying keys - hpkfont = "droid/DroidSansMono.ttf", + hpkfont = "DroidSansMono.ttf", -- font for displaying help messages hfont = "noto/NotoSans-Regular.ttf", -- font for displaying input content -- we have to use mono here for better distance controlling - infont = "droid/DroidSansMono.ttf", + infont = "DroidSansMono.ttf", -- small mono font for displaying code - smallinfont = "droid/DroidSansMono.ttf", + smallinfont = "DroidSansMono.ttf", -- font for info messages infofont = "noto/NotoSans-Regular.ttf", @@ -106,10 +106,20 @@ function Font:getFace(font, size) if not realname then realname = font end - realname = FontList.fontdir.."/"..realname - local ok, face = pcall(Freetype.newFace, realname, size) + local builtin_font_location = FontList.fontdir.."/"..realname + local ok, face = pcall(Freetype.newFace, builtin_font_location, size) + -- Not all fonts are bundled on all platforms because they come with the system. + -- In that case, search through all font folders for the requested font. + if not ok and font ~= realname then + local fonts = FontList:getFontList() + for _k, _v in ipairs(fonts) do + if _v:find(realname) then + ok, face = pcall(Freetype.newFace, _v, size) + end + end + end if not ok then - logger.warn("#! Font ", font, " (", realname, ") not supported: ", face) + logger.err("#! Font ", font, " (", realname, ") not supported: ", face) return nil end --- Freetype font face wrapper object