TOC: baseline align chapter name and page number

pull/5128/head
poire-z 5 years ago
parent 4717d6f70a
commit 0f3f2b660b

@ -327,6 +327,7 @@ function ReaderToc:onShowToc()
height = Screen:getHeight(), height = Screen:getHeight(),
cface = Font:getFace("x_smallinfofont"), cface = Font:getFace("x_smallinfofont"),
single_line = true, single_line = true,
align_baselines = true,
perpage = G_reader_settings:readSetting("items_per_page") or 14, perpage = G_reader_settings:readSetting("items_per_page") or 14,
line_color = require("ffi/blitbuffer").COLOR_WHITE, line_color = require("ffi/blitbuffer").COLOR_WHITE,
on_close_ges = { on_close_ges = {

@ -17,6 +17,7 @@ local HorizontalSpan = require("ui/widget/horizontalspan")
local InfoMessage = require("ui/widget/infomessage") local InfoMessage = require("ui/widget/infomessage")
local InputContainer = require("ui/widget/container/inputcontainer") local InputContainer = require("ui/widget/container/inputcontainer")
local LeftContainer = require("ui/widget/container/leftcontainer") local LeftContainer = require("ui/widget/container/leftcontainer")
local Math = require("optmath")
local OverlapGroup = require("ui/widget/overlapgroup") local OverlapGroup = require("ui/widget/overlapgroup")
local RenderText = require("ui/rendertext") local RenderText = require("ui/rendertext")
local RightContainer = require("ui/widget/container/rightcontainer") local RightContainer = require("ui/widget/container/rightcontainer")
@ -139,6 +140,9 @@ local MenuItem = InputContainer:new{
shortcut_style = "square", shortcut_style = "square",
_underline_container = nil, _underline_container = nil,
linesize = Size.line.medium, linesize = Size.line.medium,
single_line = false,
-- Align text & mandatory baselines (only when single_line=true)
align_baselines = false,
} }
function MenuItem:init() function MenuItem:init()
@ -218,6 +222,22 @@ function MenuItem:init()
bold = self.bold, bold = self.bold,
fgcolor = self.dim and Blitbuffer.COLOR_DARK_GRAY or nil, fgcolor = self.dim and Blitbuffer.COLOR_DARK_GRAY or nil,
} }
if self.align_baselines then
local name_baseline = item_name:getBaseline()
local mandatory_baseline = mandatory_widget:getBaseline()
local baselines_diff = Math.round(name_baseline - mandatory_baseline)
if baselines_diff > 0 then
mandatory_widget = VerticalGroup:new{
VerticalSpan:new{width = baselines_diff},
mandatory_widget,
}
elseif baselines_diff < 0 then
item_name = VerticalGroup:new{
VerticalSpan:new{width = -baselines_diff},
item_name,
}
end
end
else else
while true do while true do
-- Free previously made widgets to avoid memory leaks -- Free previously made widgets to avoid memory leaks
@ -946,6 +966,7 @@ function Menu:updateItems(select_number)
menu = self, menu = self,
linesize = self.linesize, linesize = self.linesize,
single_line = self.single_line, single_line = self.single_line,
align_baselines = self.align_baselines,
line_color = self.line_color, line_color = self.line_color,
} }
table.insert(self.item_group, item_tmp) table.insert(self.item_group, item_tmp)

@ -79,6 +79,11 @@ function TextWidget:getSize()
} }
end end
function TextWidget:getBaseline()
self:updateSize()
return self._baseline_h
end
function TextWidget:setText(text) function TextWidget:setText(text)
self.text = text self.text = text
self:updateSize() self:updateSize()

Loading…
Cancel
Save