ReaderPaging/Rolling: deduplicate inverse_reading_order code (#8445)

pull/8460/head
hius07 2 years ago committed by GitHub
parent c7229d90bc
commit 217937a5bc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -941,7 +941,7 @@ function ReaderHighlight:onHoldPan(_, ges)
-- by (temporarily) switching to scroll mode when panning to the -- by (temporarily) switching to scroll mode when panning to the
-- top left or bottom right corners. -- top left or bottom right corners.
local mirrored_reading = BD.mirroredUILayout() local mirrored_reading = BD.mirroredUILayout()
if self.ui.rolling and self.ui.rolling.inverse_reading_order then if self.view.inverse_reading_order then
mirrored_reading = not mirrored_reading mirrored_reading = not mirrored_reading
end end
local is_in_prev_page_corner, is_in_next_page_corner local is_in_prev_page_corner, is_in_next_page_corner

@ -37,7 +37,6 @@ local ReaderPaging = InputContainer:new{
page_area = nil, page_area = nil,
overlap = Screen:scaleBySize(DOVERLAPPIXELS), overlap = Screen:scaleBySize(DOVERLAPPIXELS),
inverse_reading_order = nil,
page_flipping_mode = false, page_flipping_mode = false,
bookmark_flipping_mode = false, bookmark_flipping_mode = false,
flip_steps = {0,1,2,5,10,20,50,100}, flip_steps = {0,1,2,5,10,20,50,100},
@ -108,24 +107,12 @@ function ReaderPaging:onReaderReady()
self:setupTouchZones() self:setupTouchZones()
end end
function ReaderPaging:setupTapTouchZones() function ReaderPaging:setupTouchZones()
local forward_zone = { self.ges_events = {}
ratio_x = DTAP_ZONE_FORWARD.x, ratio_y = DTAP_ZONE_FORWARD.y, self.onGesture = nil
ratio_w = DTAP_ZONE_FORWARD.w, ratio_h = DTAP_ZONE_FORWARD.h, if not Device:isTouchDevice() then return end
}
local backward_zone = {
ratio_x = DTAP_ZONE_BACKWARD.x, ratio_y = DTAP_ZONE_BACKWARD.y,
ratio_w = DTAP_ZONE_BACKWARD.w, ratio_h = DTAP_ZONE_BACKWARD.h,
}
local do_mirror = BD.mirroredUILayout() local forward_zone, backward_zone = self.view:getTapZones()
if self.inverse_reading_order then
do_mirror = not do_mirror
end
if do_mirror then
forward_zone.ratio_x = 1 - forward_zone.ratio_x - forward_zone.ratio_w
backward_zone.ratio_x = 1 - backward_zone.ratio_x - backward_zone.ratio_w
end
self.ui:registerTouchZones({ self.ui:registerTouchZones({
{ {
@ -148,19 +135,6 @@ function ReaderPaging:setupTapTouchZones()
end end
end, end,
}, },
})
end
-- This method will be called in onSetDimensions handler
function ReaderPaging:setupTouchZones()
-- deligate gesture listener to readerui
self.ges_events = {}
self.onGesture = nil
if not Device:isTouchDevice() then return end
self:setupTapTouchZones()
self.ui:registerTouchZones({
{ {
id = "paging_swipe", id = "paging_swipe",
ges = "swipe", ges = "swipe",
@ -194,11 +168,6 @@ function ReaderPaging:onReadSettings(config)
self.flipping_zoom_mode = config:readSetting("flipping_zoom_mode") or "page" self.flipping_zoom_mode = config:readSetting("flipping_zoom_mode") or "page"
self.flipping_scroll_mode = config:isTrue("flipping_scroll_mode") self.flipping_scroll_mode = config:isTrue("flipping_scroll_mode")
self.is_reflowed = config:has("kopt_text_wrap") and config:readSetting("kopt_text_wrap") == 1 self.is_reflowed = config:has("kopt_text_wrap") and config:readSetting("kopt_text_wrap") == 1
if config:has("inverse_reading_order") then
self.inverse_reading_order = config:isTrue("inverse_reading_order")
else
self.inverse_reading_order = G_reader_settings:isTrue("inverse_reading_order")
end
for _, v in ipairs(ReaderZooming.zoom_pan_settings) do for _, v in ipairs(ReaderZooming.zoom_pan_settings) do
self[v] = config:readSetting(v) or G_reader_settings:readSetting(v) or ReaderZooming[v] self[v] = config:readSetting(v) or G_reader_settings:readSetting(v) or ReaderZooming[v]
end end
@ -211,7 +180,6 @@ function ReaderPaging:onSaveSettings()
self.ui.doc_settings:saveSetting("percent_finished", self:getLastPercent()) self.ui.doc_settings:saveSetting("percent_finished", self:getLastPercent())
self.ui.doc_settings:saveSetting("flipping_zoom_mode", self.flipping_zoom_mode) self.ui.doc_settings:saveSetting("flipping_zoom_mode", self.flipping_zoom_mode)
self.ui.doc_settings:saveSetting("flipping_scroll_mode", self.flipping_scroll_mode) self.ui.doc_settings:saveSetting("flipping_scroll_mode", self.flipping_scroll_mode)
self.ui.doc_settings:saveSetting("inverse_reading_order", self.inverse_reading_order)
end end
function ReaderPaging:getLastProgress() function ReaderPaging:getLastProgress()
@ -400,7 +368,7 @@ function ReaderPaging:onSwipe(_, ges)
return true return true
elseif direction == "west" then elseif direction == "west" then
if G_reader_settings:nilOrFalse("page_turns_disable_swipe") then if G_reader_settings:nilOrFalse("page_turns_disable_swipe") then
if self.inverse_reading_order then if self.view.inverse_reading_order then
self:onGotoViewRel(-1) self:onGotoViewRel(-1)
else else
self:onGotoViewRel(1) self:onGotoViewRel(1)
@ -409,7 +377,7 @@ function ReaderPaging:onSwipe(_, ges)
end end
elseif direction == "east" then elseif direction == "east" then
if G_reader_settings:nilOrFalse("page_turns_disable_swipe") then if G_reader_settings:nilOrFalse("page_turns_disable_swipe") then
if self.inverse_reading_order then if self.view.inverse_reading_order then
self:onGotoViewRel(1) self:onGotoViewRel(1)
else else
self:onGotoViewRel(-1) self:onGotoViewRel(-1)
@ -1141,18 +1109,4 @@ function ReaderPaging:onToggleReflow()
self:onReflowUpdated() self:onReflowUpdated()
end end
-- Duplicated in ReaderRolling
function ReaderPaging:onToggleReadingOrder()
self.inverse_reading_order = not self.inverse_reading_order
self:setupTouchZones()
local is_rtl = BD.mirroredUILayout()
if self.inverse_reading_order then
is_rtl = not is_rtl
end
UIManager:show(Notification:new{
text = is_rtl and _("RTL page turning.") or _("LTR page turning."),
})
return true
end
return ReaderPaging return ReaderPaging

@ -42,7 +42,6 @@ local ReaderRolling = InputContainer:new{
pan_rate = 30, -- default 30 ops, will be adjusted in readerui pan_rate = 30, -- default 30 ops, will be adjusted in readerui
rendering_hash = 0, rendering_hash = 0,
current_pos = 0, current_pos = 0,
inverse_reading_order = nil,
-- only used for page view mode -- only used for page view mode
current_page= nil, current_page= nil,
xpointer = nil, xpointer = nil,
@ -209,12 +208,6 @@ function ReaderRolling:onReadSettings(config)
end end
end end
if config:has("inverse_reading_order") then
self.inverse_reading_order = config:isTrue("inverse_reading_order")
else
self.inverse_reading_order = G_reader_settings:isTrue("inverse_reading_order")
end
-- This self.visible_pages may not be the current nb of visible pages -- This self.visible_pages may not be the current nb of visible pages
-- as crengine may decide to not ensure that in some conditions. -- as crengine may decide to not ensure that in some conditions.
-- It's the one we got from settings, the one the user has decided on -- It's the one we got from settings, the one the user has decided on
@ -302,7 +295,6 @@ function ReaderRolling:onSaveSettings()
if self.ui.document then if self.ui.document then
self.ui.doc_settings:saveSetting("percent_finished", self:getLastPercent()) self.ui.doc_settings:saveSetting("percent_finished", self:getLastPercent())
end end
self.ui.doc_settings:saveSetting("inverse_reading_order", self.inverse_reading_order)
self.ui.doc_settings:saveSetting("visible_pages", self.visible_pages) self.ui.doc_settings:saveSetting("visible_pages", self.visible_pages)
self.ui.doc_settings:saveSetting("hide_nonlinear_flows", self.hide_nonlinear_flows) self.ui.doc_settings:saveSetting("hide_nonlinear_flows", self.hide_nonlinear_flows)
end end
@ -320,23 +312,7 @@ function ReaderRolling:setupTouchZones()
self.onGesture = nil self.onGesture = nil
if not Device:isTouchDevice() then return end if not Device:isTouchDevice() then return end
local forward_zone = { local forward_zone, backward_zone = self.view:getTapZones()
ratio_x = DTAP_ZONE_FORWARD.x, ratio_y = DTAP_ZONE_FORWARD.y,
ratio_w = DTAP_ZONE_FORWARD.w, ratio_h = DTAP_ZONE_FORWARD.h,
}
local backward_zone = {
ratio_x = DTAP_ZONE_BACKWARD.x, ratio_y = DTAP_ZONE_BACKWARD.y,
ratio_w = DTAP_ZONE_BACKWARD.w, ratio_h = DTAP_ZONE_BACKWARD.h,
}
local do_mirror = BD.mirroredUILayout()
if self.inverse_reading_order then
do_mirror = not do_mirror
end
if do_mirror then
forward_zone.ratio_x = 1 - forward_zone.ratio_x - forward_zone.ratio_w
backward_zone.ratio_x = 1 - backward_zone.ratio_x - backward_zone.ratio_w
end
self.ui:registerTouchZones({ self.ui:registerTouchZones({
{ {
@ -470,7 +446,7 @@ function ReaderRolling:onSwipe(_, ges)
local direction = BD.flipDirectionIfMirroredUILayout(ges.direction) local direction = BD.flipDirectionIfMirroredUILayout(ges.direction)
if direction == "west" then if direction == "west" then
if G_reader_settings:nilOrFalse("page_turns_disable_swipe") then if G_reader_settings:nilOrFalse("page_turns_disable_swipe") then
if self.inverse_reading_order then if self.view.inverse_reading_order then
self:onGotoViewRel(-1) self:onGotoViewRel(-1)
else else
self:onGotoViewRel(1) self:onGotoViewRel(1)
@ -479,7 +455,7 @@ function ReaderRolling:onSwipe(_, ges)
end end
elseif direction == "east" then elseif direction == "east" then
if G_reader_settings:nilOrFalse("page_turns_disable_swipe") then if G_reader_settings:nilOrFalse("page_turns_disable_swipe") then
if self.inverse_reading_order then if self.view.inverse_reading_order then
self:onGotoViewRel(1) self:onGotoViewRel(1)
else else
self:onGotoViewRel(-1) self:onGotoViewRel(-1)
@ -1472,18 +1448,4 @@ function ReaderRolling:onToggleHideNonlinear()
self.ui:handleEvent(Event:new("UpdateToc")) self.ui:handleEvent(Event:new("UpdateToc"))
end end
-- Duplicated in ReaderPaging
function ReaderRolling:onToggleReadingOrder()
self.inverse_reading_order = not self.inverse_reading_order
self:setupTouchZones()
local is_rtl = BD.mirroredUILayout()
if self.inverse_reading_order then
is_rtl = not is_rtl
end
UIManager:show(Notification:new{
text = is_rtl and _("RTL page turning.") or _("LTR page turning."),
})
return true
end
return ReaderRolling return ReaderRolling

@ -2,6 +2,7 @@
ReaderView module handles all the screen painting for document browsing. ReaderView module handles all the screen painting for document browsing.
]] ]]
local BD = require("ui/bidi")
local Blitbuffer = require("ffi/blitbuffer") local Blitbuffer = require("ffi/blitbuffer")
local Device = require("device") local Device = require("device")
local Geom = require("ui/geometry") local Geom = require("ui/geometry")
@ -789,6 +790,7 @@ function ReaderView:onReadSettings(config)
local page_scroll = config:readSetting("kopt_page_scroll") or self.document.configurable.page_scroll local page_scroll = config:readSetting("kopt_page_scroll") or self.document.configurable.page_scroll
self.page_scroll = page_scroll == 1 and true or false self.page_scroll = page_scroll == 1 and true or false
self.highlight.saved = config:readSetting("highlight") or {} self.highlight.saved = config:readSetting("highlight") or {}
self.inverse_reading_order = config:isTrue("inverse_reading_order") or G_reader_settings:isTrue("inverse_reading_order")
self.page_overlap_enable = config:isTrue("show_overlap_enable") or G_reader_settings:isTrue("page_overlap_enable") or DSHOWOVERLAP self.page_overlap_enable = config:isTrue("show_overlap_enable") or G_reader_settings:isTrue("page_overlap_enable") or DSHOWOVERLAP
self.page_overlap_style = config:readSetting("page_overlap_style") or G_reader_settings:readSetting("page_overlap_style") or "dim" self.page_overlap_style = config:readSetting("page_overlap_style") or G_reader_settings:readSetting("page_overlap_style") or "dim"
self.page_gap.height = Screen:scaleBySize(config:readSetting("kopt_page_gap_height") self.page_gap.height = Screen:scaleBySize(config:readSetting("kopt_page_gap_height")
@ -904,6 +906,7 @@ function ReaderView:onSaveSettings()
end end
self.ui.doc_settings:saveSetting("gamma", self.state.gamma) self.ui.doc_settings:saveSetting("gamma", self.state.gamma)
self.ui.doc_settings:saveSetting("highlight", self.highlight.saved) self.ui.doc_settings:saveSetting("highlight", self.highlight.saved)
self.ui.doc_settings:saveSetting("inverse_reading_order", self.inverse_reading_order)
self.ui.doc_settings:saveSetting("show_overlap_enable", self.page_overlap_enable) self.ui.doc_settings:saveSetting("show_overlap_enable", self.page_overlap_enable)
self.ui.doc_settings:saveSetting("page_overlap_style", self.page_overlap_style) self.ui.doc_settings:saveSetting("page_overlap_style", self.page_overlap_style)
end end
@ -979,4 +982,34 @@ function ReaderView:isOverlapAllowed()
end end
end end
function ReaderView:onToggleReadingOrder()
self.inverse_reading_order = not self.inverse_reading_order
if self.ui.document.info.has_pages then
self.ui.paging:setupTouchZones()
else
self.ui.rolling:setupTouchZones()
end
local is_rtl = self.inverse_reading_order ~= BD.mirroredUILayout() -- mirrored reading
UIManager:show(Notification:new{
text = is_rtl and _("RTL page turning.") or _("LTR page turning."),
})
return true
end
function ReaderView:getTapZones()
local forward_zone = {
ratio_x = DTAP_ZONE_FORWARD.x, ratio_y = DTAP_ZONE_FORWARD.y,
ratio_w = DTAP_ZONE_FORWARD.w, ratio_h = DTAP_ZONE_FORWARD.h,
}
local backward_zone = {
ratio_x = DTAP_ZONE_BACKWARD.x, ratio_y = DTAP_ZONE_BACKWARD.y,
ratio_w = DTAP_ZONE_BACKWARD.w, ratio_h = DTAP_ZONE_BACKWARD.h,
}
if self.inverse_reading_order ~= BD.mirroredUILayout() then -- mirrored reading
forward_zone.ratio_x = 1 - forward_zone.ratio_x - forward_zone.ratio_w
backward_zone.ratio_x = 1 - backward_zone.ratio_x - backward_zone.ratio_w
end
return forward_zone, backward_zone
end
return ReaderView return ReaderView

@ -35,11 +35,7 @@ local PageTurns = {
end, end,
checked_func = function() checked_func = function()
local ui = require("apps/reader/readerui"):_getRunningInstance() local ui = require("apps/reader/readerui"):_getRunningInstance()
if ui.document.info.has_pages then return ui.view.inverse_reading_order
return ui.paging.inverse_reading_order
else
return ui.rolling.inverse_reading_order
end
end, end,
callback = function() callback = function()
UIManager:broadcastEvent(Event:new("ToggleReadingOrder")) UIManager:broadcastEvent(Event:new("ToggleReadingOrder"))

Loading…
Cancel
Save