CoverBrowser: list mode: limit font size of components (#7324)

Should trigger when per-page <= 6/7, avoids authors and
titles to become too big.
pull/7328/head
poire-z 3 years ago committed by GitHub
parent 5e3de72a5a
commit 9a6468ce5e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -48,7 +48,6 @@ local corner_mark_size = -1
local corner_mark
local scale_by_size = Screen:scaleBySize(1000000) / 1000000
local max_fontsize_fileinfo
-- ItemShortCutIcon (for keyboard navigation) is private to menu.lua and can't be accessed,
-- so we need to redefine it
@ -191,11 +190,16 @@ function ListMenuItem:update()
h = self.height - 2 * self.underline_h
}
local function _fontSize(nominal)
-- nominal font size is based on 64px ListMenuItem height
-- keep ratio of font size to item height
local font_size = nominal * dimen.h / 64 / scale_by_size
return math.floor(font_size)
local function _fontSize(nominal, max)
-- The nominal font size is based on 64px ListMenuItem height.
-- Keep ratio of font size to item height
local font_size = math.floor(nominal * dimen.h / 64 / scale_by_size)
-- But limit it to the provided max, to avoid huge font size when
-- only 4-6 items per page
if max and font_size >= max then
return max
end
return font_size
end
-- Will speed up a bit if we don't do all font sizes when
-- looking for one that make text fit
@ -226,13 +230,13 @@ function ListMenuItem:update()
-- nb items on the right, directory name on the left
local wright = TextWidget:new{
text = self.mandatory_func and self.mandatory_func() or self.mandatory,
face = Font:getFace("infont", math.min(max_fontsize_fileinfo, _fontSize(15))),
face = Font:getFace("infont", _fontSize(14, 18)),
}
local pad_width = Screen:scaleBySize(10) -- on the left, in between, and on the right
local wleft_width = dimen.w - wright:getWidth() - 3*pad_width
local wleft = TextBoxWidget:new{
text = BD.directory(self.text),
face = Font:getFace("cfont", _fontSize(20)),
face = Font:getFace("cfont", _fontSize(20, 24)),
width = wleft_width,
alignment = "left",
bold = true,
@ -439,7 +443,7 @@ function ListMenuItem:update()
-- Build the right widget
local fontsize_info = math.min(max_fontsize_fileinfo, _fontSize(14))
local fontsize_info = _fontSize(14, 18)
local wfileinfo = TextWidget:new{
text = fileinfo_str,
@ -499,8 +503,8 @@ function ListMenuItem:update()
local fontname_title = "cfont"
local fontname_authors = "cfont"
local fontsize_title = _fontSize(20)
local fontsize_authors = _fontSize(18)
local fontsize_title = _fontSize(20, 24)
local fontsize_authors = _fontSize(18, 22)
local wtitle, wauthors
local title, authors
local series_mode = BookInfoManager:getSetting("series_mode")
@ -533,8 +537,8 @@ function ListMenuItem:update()
end
authors = table.concat(authors, "\n")
-- as we'll fit 3 lines instead of 2, we can avoid some loops by starting from a lower font size
fontsize_title = _fontSize(17)
fontsize_authors = _fontSize(15)
fontsize_title = _fontSize(17, 21)
fontsize_authors = _fontSize(15, 19)
elseif authors then
authors = BD.auto(authors)
end
@ -563,8 +567,8 @@ function ListMenuItem:update()
elseif series_mode == "series_in_separate_line" then
authors = bookinfo.series .. "\n" .. authors
-- as we'll fit 3 lines instead of 2, we can avoid some loops by starting from a lower font size
fontsize_title = _fontSize(17)
fontsize_authors = _fontSize(15)
fontsize_title = _fontSize(17, 21)
fontsize_authors = _fontSize(15, 19)
end
end
end
@ -694,7 +698,7 @@ function ListMenuItem:update()
-- If we have it, we need to build a more complex widget with
-- this date on the right
local fileinfo_str = self.mandatory_func()
local fontsize_info = math.min(max_fontsize_fileinfo, _fontSize(14))
local fontsize_info = _fontSize(14, 18)
local wfileinfo = TextWidget:new{
text = fileinfo_str,
face = Font:getFace("cfont", fontsize_info),
@ -723,7 +727,7 @@ function ListMenuItem:update()
end
local text = BD.filename(self.text)
local text_widget
local fontsize_no_bookinfo = _fontSize(18)
local fontsize_no_bookinfo = _fontSize(18, 22)
repeat
if text_widget then
text_widget:free()
@ -945,9 +949,6 @@ function ListMenu:_recalculateDimen()
h = self.item_height
}
-- upper limit for file info font to leave enough space for title and author
max_fontsize_fileinfo = available_height / scale_by_size / 32
if self.page_recalc_needed then
-- self.page has probably been set to a wrong value, we recalculate
-- it here as done in Menu:init() or Menu:switchItemTable()

Loading…
Cancel
Save