diff --git a/frontend/apps/reader/modules/readertoc.lua b/frontend/apps/reader/modules/readertoc.lua index 91fc3a65a..b2493beba 100644 --- a/frontend/apps/reader/modules/readertoc.lua +++ b/frontend/apps/reader/modules/readertoc.lua @@ -327,6 +327,7 @@ function ReaderToc:onShowToc() height = Screen:getHeight(), cface = Font:getFace("x_smallinfofont"), single_line = true, + align_baselines = true, perpage = G_reader_settings:readSetting("items_per_page") or 14, line_color = require("ffi/blitbuffer").COLOR_WHITE, on_close_ges = { diff --git a/frontend/ui/widget/menu.lua b/frontend/ui/widget/menu.lua index d3bd23132..d5d51156e 100644 --- a/frontend/ui/widget/menu.lua +++ b/frontend/ui/widget/menu.lua @@ -17,6 +17,7 @@ local HorizontalSpan = require("ui/widget/horizontalspan") local InfoMessage = require("ui/widget/infomessage") local InputContainer = require("ui/widget/container/inputcontainer") local LeftContainer = require("ui/widget/container/leftcontainer") +local Math = require("optmath") local OverlapGroup = require("ui/widget/overlapgroup") local RenderText = require("ui/rendertext") local RightContainer = require("ui/widget/container/rightcontainer") @@ -139,6 +140,9 @@ local MenuItem = InputContainer:new{ shortcut_style = "square", _underline_container = nil, linesize = Size.line.medium, + single_line = false, + -- Align text & mandatory baselines (only when single_line=true) + align_baselines = false, } function MenuItem:init() @@ -218,6 +222,22 @@ function MenuItem:init() bold = self.bold, 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 while true do -- Free previously made widgets to avoid memory leaks @@ -946,6 +966,7 @@ function Menu:updateItems(select_number) menu = self, linesize = self.linesize, single_line = self.single_line, + align_baselines = self.align_baselines, line_color = self.line_color, } table.insert(self.item_group, item_tmp) diff --git a/frontend/ui/widget/textwidget.lua b/frontend/ui/widget/textwidget.lua index 2ac8dc9fd..9354d975e 100644 --- a/frontend/ui/widget/textwidget.lua +++ b/frontend/ui/widget/textwidget.lua @@ -79,6 +79,11 @@ function TextWidget:getSize() } end +function TextWidget:getBaseline() + self:updateSize() + return self._baseline_h +end + function TextWidget:setText(text) self.text = text self:updateSize()