From d01a81dc7568c2f16b8b98d6a1654f6aec41771c Mon Sep 17 00:00:00 2001 From: Rohitt Vashishtha Date: Thu, 23 Nov 2023 11:30:24 +0530 Subject: [PATCH] Reader: Allow scrolling small offsets in continuous mode. Using the drag gestures is cumbersome and finicky, especially when you want to do it all the time. Thus, we add a new option here to modify the default tapping behavior. --- frontend/apps/reader/modules/readerpaging.lua | 20 +++++++++++++++++-- frontend/dispatcher.lua | 2 ++ frontend/ui/data/koptoptions.lua | 14 +++++++++++++ 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/frontend/apps/reader/modules/readerpaging.lua b/frontend/apps/reader/modules/readerpaging.lua index 65c622672..ab69cbc7d 100644 --- a/frontend/apps/reader/modules/readerpaging.lua +++ b/frontend/apps/reader/modules/readerpaging.lua @@ -145,7 +145,7 @@ function ReaderPaging:setupTouchZones() screen_zone = forward_zone, handler = function() if G_reader_settings:nilOrFalse("page_turns_disable_tap") then - return self:onGotoViewRel(1) + return self:onPageTurnRel(1) end end, }, @@ -155,7 +155,7 @@ function ReaderPaging:setupTouchZones() screen_zone = backward_zone, handler = function() if G_reader_settings:nilOrFalse("page_turns_disable_tap") then - return self:onGotoViewRel(-1) + return self:onPageTurnRel(-1) end end, }, @@ -191,6 +191,14 @@ function ReaderPaging:onReadSettings(config) self:_gotoPage(config:readSetting("last_page") or 1) self.flipping_zoom_mode = config:readSetting("flipping_zoom_mode") or "page" self.flipping_scroll_mode = config:isTrue("flipping_scroll_mode") + self.page_scroll_amount = config:readSetting("kopt_page_scroll_amount") + or G_reader_settings:readSetting("kopt_page_scroll_amount") + or 0 +end + +function ReaderPaging:onPageScrollAmountUpdate(page_scroll_amount) + self.page_scroll_amount = page_scroll_amount + return true end function ReaderPaging:onSaveSettings() @@ -579,6 +587,14 @@ function ReaderPaging:onGotoViewRel(diff) return true end +function ReaderPaging:onPageTurnRel(diff) + -- handle smooth scroll by default. + if self.view.page_scroll and self.page_scroll_amount ~= 0 then + return self:onGotoPosRel(self.page_scroll_amount * diff) + end + return self:onGotoViewRel(diff) +end + function ReaderPaging:onGotoPosRel(diff) if self.view.page_scroll then self:onPanningRel(100*diff) diff --git a/frontend/dispatcher.lua b/frontend/dispatcher.lua index a4f0efc91..60b2192e6 100644 --- a/frontend/dispatcher.lua +++ b/frontend/dispatcher.lua @@ -239,6 +239,7 @@ local settingsList = { kopt_zoom_direction = {category="string", paging=true}, kopt_page_scroll = {category="string", paging=true}, kopt_page_gap_height = {category="string", paging=true}, + kopt_page_scroll_amount = {category="string", paging=true}, kopt_full_screen = {category="string", paging=true}, kopt_line_spacing = {category="configurable", paging=true}, kopt_justification = {category="configurable", paging=true}, @@ -451,6 +452,7 @@ local dispatcher_menu_order = { "kopt_zoom_direction", "kopt_page_scroll", "kopt_page_gap_height", + "kopt_page_scroll_amount", "kopt_full_screen", "kopt_line_spacing", "kopt_justification", diff --git a/frontend/ui/data/koptoptions.lua b/frontend/ui/data/koptoptions.lua index 801dff66d..1b5b01440 100644 --- a/frontend/ui/data/koptoptions.lua +++ b/frontend/ui/data/koptoptions.lua @@ -352,6 +352,20 @@ left to right or reverse, top to bottom or reverse.]]), name_text_hold_callback = optionsutil.showValues, help_text = _([[In continuous view mode, sets the thickness of the separator between document pages.]]), }, + { + name = "page_scroll_amount", + name_text = _("Page Scroll Amount"), + toggle = { C_("Scroll", "legacy"), C_("Scroll", "small"), C_("Scroll", "medium"), C_("Scroll", "large") }, + values = { 0, 1, 2, 3 }, + default_value = 0, + args = { 0, 1, 2, 3 }, + event = "PageScrollAmountUpdate", + enabled_func = function(configurable) + return optionsutil.enableIfEquals(configurable, "page_scroll", 1) + end, + name_text_hold_callback = optionsutil.showValues, + help_text = _([[In continuous view mode, sets the amount of scroll tapping would lead to.]]), + }, { name = "full_screen", name_text = _("Progress Bar"),