rescale font size when fallbacks to fallback fonts

and make FreeSerif font the default font instead of DroidSansFallback

This patch should fix #272.
pull/312/head
chrox 11 years ago
parent 2245780878
commit 3f3e434157

@ -3,12 +3,12 @@ require "dbg" -- for DEBUG()
Font = { Font = {
fontmap = { fontmap = {
-- default font for menu contents -- default font for menu contents
cfont = "droid/DroidSansFallback.ttf", cfont = "freefont/FreeSerif.ttf",
-- default font for title -- default font for title
--tfont = "NimbusSanL-BoldItal.cff", --tfont = "NimbusSanL-BoldItal.cff",
tfont = "droid/DroidSansFallback.ttf", tfont = "freefont/FreeSerif.ttf",
-- default font for footer -- default font for footer
ffont = "droid/DroidSansFallback.ttf", ffont = "freefont/FreeSerif.ttf",
-- default font for reading position info -- default font for reading position info
rifont = "droid/DroidSans.ttf", rifont = "droid/DroidSans.ttf",
@ -32,9 +32,9 @@ Font = {
infofont = "droid/DroidSans.ttf", infofont = "droid/DroidSans.ttf",
}, },
fallbacks = { fallbacks = {
[1] = "freefont/FreeSans.ttf", [1] = "droid/DroidSansFallback.ttf",
[2] = "droid/DroidSans.ttf", [2] = "freefont/FreeSans.ttf",
[3] = "droid/DroidSansFallback.ttf", [3] = "droid/DroidSans.ttf",
}, },
fontdir = os.getenv("FONTDIR") or "./fonts", fontdir = os.getenv("FONTDIR") or "./fonts",
@ -50,7 +50,7 @@ function Font:getFace(font, size)
font = self.cfont font = self.cfont
end end
local size = math.floor(scaleByDPI(size)) local size = scaleByDPI(size)
local face = self.faces[font..size] local face = self.faces[font..size]
-- build face if not found -- build face if not found

@ -68,10 +68,11 @@ function getGlyph(face, charcode, bgcolor, fgcolor)
local rendered_glyph = face.ftface:renderGlyph(charcode, bgcolor, fgcolor) local rendered_glyph = face.ftface:renderGlyph(charcode, bgcolor, fgcolor)
if face.ftface:checkGlyph(charcode) == 0 then if face.ftface:checkGlyph(charcode) == 0 then
for index, font in pairs(Font.fallbacks) do for index, font in pairs(Font.fallbacks) do
DEBUG("fallback to font", font) -- rescale face size by DPI since it will be scaled in getFace again
local fb_face = Font:getFace(font, face.size) local fb_face = Font:getFace(font, rescaleByDPI(face.size))
if fb_face.ftface:checkGlyph(charcode) ~= 0 then if fb_face.ftface:checkGlyph(charcode) ~= 0 then
rendered_glyph = fb_face.ftface:renderGlyph(charcode, bgcolor, fgcolor) rendered_glyph = fb_face.ftface:renderGlyph(charcode, bgcolor, fgcolor)
DEBUG("fallback to font", font)
break break
end end
end end

@ -134,11 +134,20 @@ function Screen:scaleByDPI(px)
return math.floor(px * self:getDPI()/167) return math.floor(px * self:getDPI()/167)
end end
function Screen:rescaleByDPI(px)
return math.ceil(px * 167/self:getDPI())
end
-- make a shortcut to Screen:scaleByDPI -- make a shortcut to Screen:scaleByDPI
function scaleByDPI(px) function scaleByDPI(px)
return Screen:scaleByDPI(px) return Screen:scaleByDPI(px)
end end
-- make a shortcut to Screen:rescaleByDPI
function rescaleByDPI(px)
return Screen:rescaleByDPI(px)
end
function Screen:getPitch() function Screen:getPitch()
return self.fb:getPitch() return self.fb:getPitch()
end end

Loading…
Cancel
Save