From 26b9ab2505b76a5ecc06771e7c0d77915e36e5bf Mon Sep 17 00:00:00 2001 From: NiLuJe Date: Fri, 26 Feb 2021 00:48:05 +0100 Subject: [PATCH] Minor followup to #7335 (#7347) * Unify SortWidget's pagination button (it was using a tap_input, which is why I'd missed it ;)). (https://github.com/koreader/koreader/pull/7335#issuecomment-785628495) * Menu*: Remove redundant screen-layout updates from `_recalculateDimen`, as it should only be concerned with item layout (https://github.com/koreader/koreader/pull/7335#discussion_r582072032) --- frontend/ui/widget/menu.lua | 18 +++++------------- frontend/ui/widget/sortwidget.lua | 4 +++- plugins/coverbrowser.koplugin/covermenu.lua | 6 ++++-- plugins/coverbrowser.koplugin/listmenu.lua | 8 -------- plugins/coverbrowser.koplugin/mosaicmenu.lua | 13 +------------ 5 files changed, 13 insertions(+), 36 deletions(-) diff --git a/frontend/ui/widget/menu.lua b/frontend/ui/widget/menu.lua index 69758d587..2bd79b08b 100644 --- a/frontend/ui/widget/menu.lua +++ b/frontend/ui/widget/menu.lua @@ -585,19 +585,6 @@ local Menu = FocusManager:new{ function Menu:_recalculateDimen() self.perpage = self.items_per_page or G_reader_settings:readSetting("items_per_page") or self.items_per_page_default self.span_width = 0 - self.dimen.w = self.width - self.dimen.h = self.height or Screen:getHeight() - if self.dimen.h > Screen:getHeight() or self.dimen.h == nil then - self.dimen.h = Screen:getHeight() - end - self.inner_dimen = Geom:new{ - w = self.dimen.w - 2 * self.border_size, - h = self.dimen.h - 2 * self.border_size, - } - self.item_dimen = Geom:new{ - w = self.inner_dimen.w, - h = Screen:scaleBySize(46), - } local height_dim local bottom_height = 0 local top_height = 0 @@ -631,6 +618,11 @@ function Menu:init() h = self.dimen.h - 2 * self.border_size, } + self.item_dimen = Geom:new{ + w = self.inner_dimen.w, + h = Screen:scaleBySize(46), + } + self.page = 1 self.paths = {} -- per instance table to trace navigation path diff --git a/frontend/ui/widget/sortwidget.lua b/frontend/ui/widget/sortwidget.lua index 8b20be203..0d00b1cf4 100644 --- a/frontend/ui/widget/sortwidget.lua +++ b/frontend/ui/widget/sortwidget.lua @@ -296,7 +296,7 @@ function SortWidget:init() self.footer_page = Button:new{ text = "", - tap_input = { + hold_input = { title = _("Enter page number"), type = "number", hint_func = function() @@ -308,7 +308,9 @@ function SortWidget:init() self:goToPage(page) end end, + ok_text = "Go to page", }, + call_hold_input_on_tap = true, bordersize = 0, margin = 0, text_font_face = "pgfont", diff --git a/plugins/coverbrowser.koplugin/covermenu.lua b/plugins/coverbrowser.koplugin/covermenu.lua index b28a33f8a..e772c3fa8 100644 --- a/plugins/coverbrowser.koplugin/covermenu.lua +++ b/plugins/coverbrowser.koplugin/covermenu.lua @@ -49,8 +49,10 @@ function CoverMenu:updateItems(select_number) -- self.layout must be updated for focusmanager self.layout = {} self.item_group:clear() - -- strange, best here if resetLayout() are done after _recalculateDimen(), - -- unlike what is done in menu.lua + -- NOTE: Our various _recalculateDimen overloads appear to have a stronger dependency + -- on the rest of the widget elements being properly laid-out, + -- so we have to run it *first*, unlike in Menu. + -- Otherwise, various layout issues arise (e.g., MosaicMenu's page_info is misaligned). self:_recalculateDimen() self.page_info:resetLayout() self.return_button:resetLayout() diff --git a/plugins/coverbrowser.koplugin/listmenu.lua b/plugins/coverbrowser.koplugin/listmenu.lua index b8966d5d9..275d0fd57 100644 --- a/plugins/coverbrowser.koplugin/listmenu.lua +++ b/plugins/coverbrowser.koplugin/listmenu.lua @@ -881,14 +881,6 @@ end local ListMenu = {} function ListMenu:_recalculateDimen() - self.dimen.w = self.width - self.dimen.h = self.height or Screen:getHeight() - -- NOTE: inner_dimen should match dimen because we're generally (always?) borderless - self.inner_dimen = Geom:new{ - w = self.dimen.w - 2 * self.border_size, - h = self.dimen.h - 2 * self.border_size, - } - -- Find out available height from other UI elements made in Menu self.others_height = 0 if self.title_bar then -- Menu:init() has been done diff --git a/plugins/coverbrowser.koplugin/mosaicmenu.lua b/plugins/coverbrowser.koplugin/mosaicmenu.lua index 3a1e29661..20aad959a 100644 --- a/plugins/coverbrowser.koplugin/mosaicmenu.lua +++ b/plugins/coverbrowser.koplugin/mosaicmenu.lua @@ -797,18 +797,7 @@ end local MosaicMenu = {} function MosaicMenu:_recalculateDimen() - self.dimen.w = self.width - self.dimen.h = self.height or Screen:getHeight() - -- NOTE: inner_dimen should match dimen because we're generally (always?) borderless - self.inner_dimen = Geom:new{ - w = self.dimen.w - 2 * self.border_size, - h = self.dimen.h - 2 * self.border_size, - } - - local portrait_mode = true - if Screen:getWidth() > Screen:getHeight() then - portrait_mode = false - end + local portrait_mode = Screen:getWidth() <= Screen:getHeight() -- 3 x 3 grid by default if not initially provided (4 x 2 in landscape mode) if portrait_mode then self.nb_cols = self.nb_cols_portrait or 3