diff --git a/frontend/apps/reader/modules/readerhighlight.lua b/frontend/apps/reader/modules/readerhighlight.lua index bb1da36fd..c751ff5bc 100644 --- a/frontend/apps/reader/modules/readerhighlight.lua +++ b/frontend/apps/reader/modules/readerhighlight.lua @@ -100,8 +100,9 @@ function ReaderHighlight:genHighlightDrawerMenu() end return { { - text_func = function() - return self.view.highlight.disabled and _("Enable") or _("Disable") + text = _("Allow highlighting"), + checked_func = function() + return not self.view.highlight.disabled end, callback = function() self.view.highlight.disabled = not self.view.highlight.disabled @@ -109,6 +110,7 @@ function ReaderHighlight:genHighlightDrawerMenu() hold_callback = function(touchmenu_instance) self:makeDefault(not self.view.highlight.disabled) end, + separator = true, }, get_highlight_style("lighten"), get_highlight_style("underscore"), diff --git a/frontend/apps/reader/modules/readerpaging.lua b/frontend/apps/reader/modules/readerpaging.lua index aa0b887d1..01b5b49b7 100644 --- a/frontend/apps/reader/modules/readerpaging.lua +++ b/frontend/apps/reader/modules/readerpaging.lua @@ -187,18 +187,21 @@ function ReaderPaging:addToMainMenu(menu_items) -- The difference between the two menus is only the enabled func. local page_overlap_menu = { { - text_func = function() - return self.show_overlap_enable and _("Disable") or _("Enable") + text = _("Page overlap"), + checked_func = function() + return self.show_overlap_enable end, callback = function() self.show_overlap_enable = not self.show_overlap_enable if not self.show_overlap_enable then self.view:resetDimArea() end - end + end, + separator = true, }, } - for _, menu_entry in ipairs(self.view:genOverlapStyleMenu()) do + local overlap_enabled_func = function() return self.show_overlap_enable end + for _, menu_entry in ipairs(self.view:genOverlapStyleMenu(overlap_enabled_func)) do table.insert(page_overlap_menu, menu_entry) end menu_items.page_overlap = { diff --git a/frontend/apps/reader/modules/readerrolling.lua b/frontend/apps/reader/modules/readerrolling.lua index b24cf0151..ef1ede86f 100644 --- a/frontend/apps/reader/modules/readerrolling.lua +++ b/frontend/apps/reader/modules/readerrolling.lua @@ -9,6 +9,7 @@ local logger = require("logger") local _ = require("gettext") local Input = Device.input local Screen = Device.screen +local T = require("ffi/util").template --[[ Rolling is just like paging in page-based documents except that @@ -42,8 +43,6 @@ local ReaderRolling = InputContainer:new{ xpointer = nil, panning_steps = ReaderPanning.panning_steps, show_overlap_enable = nil, - -- nb of lines from previous page to show on next page (scroll mode only) - overlap_lines = G_reader_settings:readSetting("copt_overlap_lines") or 1, cre_top_bar_enabled = false, } @@ -311,10 +310,14 @@ function ReaderRolling:addToMainMenu(menu_items) -- FIXME: repeated code with page overlap menu for readerpaging -- needs to keep only one copy of the logic as for the DRY principle. -- The difference between the two menus is only the enabled func. + local overlap_lines_help_text = _([[ +When page overlap is enabled, some lines from the previous page will be displayed on the next page. +You can set how many lines are shown.]]) local page_overlap_menu = { { - text_func = function() - return self.show_overlap_enable and _("Disable") or _("Enable") + text = _("Page overlap"), + checked_func = function() + return self.show_overlap_enable end, callback = function() self.show_overlap_enable = not self.show_overlap_enable @@ -323,13 +326,43 @@ function ReaderRolling:addToMainMenu(menu_items) end end }, + { + text_func = function() + return T(_("Number of lines: %1"), G_reader_settings:readSetting("copt_overlap_lines") or 1) + end, + enabled_func = function() + return self.show_overlap_enable + end, + callback = function(touchmenu_instance) + local SpinWidget = require("ui/widget/spinwidget") + UIManager:show(SpinWidget:new{ + width = Screen:getWidth() * 0.75, + value = G_reader_settings:readSetting("copt_overlap_lines") or 1, + value_min = 1, + value_max = 10, + precision = "%d", + ok_text = _("Set"), + title_text = _("Set overlapped lines"), + text = overlap_lines_help_text, + callback = function(spin) + G_reader_settings:saveSetting("copt_overlap_lines", spin.value) + touchmenu_instance:updateItems() + end, + }) + end, + keep_menu_open = true, + help_text = overlap_lines_help_text, + separator = true, + }, } - for _, menu_entry in ipairs(self.view:genOverlapStyleMenu()) do + local overlap_enabled_func = function() return self.show_overlap_enable end + for _, menu_entry in ipairs(self.view:genOverlapStyleMenu(overlap_enabled_func)) do table.insert(page_overlap_menu, menu_entry) end menu_items.page_overlap = { text = _("Page overlap"), enabled_func = function() return self.view.view_mode ~= "page" end, + help_text = _([[When page overlap is enabled, some lines from the previous pages are shown on the next page.]]), sub_item_table = page_overlap_menu, } end @@ -525,7 +558,8 @@ function ReaderRolling:onGotoViewRel(diff) local page_visible_height = self.ui.dimen.h - footer_height local pan_diff = diff * page_visible_height if self.show_overlap_enable then - local overlap_h = Screen:scaleBySize(self.ui.font.font_size * 1.1 * self.ui.font.line_space_percent/100.0) * self.overlap_lines + local overlap_lines = G_reader_settings:readSetting("copt_overlap_lines") or 1 + local overlap_h = Screen:scaleBySize(self.ui.font.font_size * 1.1 * self.ui.font.line_space_percent/100.0) * overlap_lines if pan_diff > overlap_h then pan_diff = pan_diff - overlap_h elseif pan_diff < -overlap_h then diff --git a/frontend/apps/reader/modules/readerview.lua b/frontend/apps/reader/modules/readerview.lua index 37f52eadf..c0f6d9843 100644 --- a/frontend/apps/reader/modules/readerview.lua +++ b/frontend/apps/reader/modules/readerview.lua @@ -841,11 +841,12 @@ local page_overlap_styles = { dim = _("Gray out"), } -function ReaderView:genOverlapStyleMenu() +function ReaderView:genOverlapStyleMenu(overlap_enabled_func) local view = self local get_overlap_style = function(style) return { text = page_overlap_styles[style], + enabled_func = overlap_enabled_func, checked_func = function() return view.page_overlap_style == style end,