[sdl] Add support arrow key for next/prev page (#5149)

Close: #4997 
This PR add support arrow key and mouse scroll wheel for next/previous page.

- Document in page mode:

PageDown, Arrow down, Arrow right - go to next page
PageUp, Arrow up, arrow left - go to prev page
Mouse scroll wheel down - go to next page
Mouse scroll wheel up - go to prev page

- Document in scroll mode:

PageDown, Arrow right - go to next page
PageUp, Arrow, arrow left - go to prev page
Arrow down - scroll document down
Arrow up - scroll document up
Mouse scroll wheel down - scroll document down
Mouse scroll wheel up - scroll document up
pull/5153/head
Robert 5 years ago committed by Frans de Jonge
parent 14bdf4782a
commit 803a143764

@ -43,13 +43,22 @@ function ReaderPaging:init()
self.key_events = {}
if Device:hasKeys() then
self.key_events.GotoNextPage = {
{Input.group.PgFwd}, doc = "go to next page",
{ {"RPgFwd", "LPgFwd", "Right" } }, doc = "go to next page",
event = "GotoViewRel", args = 1,
}
self.key_events.GotoPrevPage = {
{Input.group.PgBack}, doc = "go to previous page",
{ { "RPgBack", "LPgBack", "Left" } }, doc = "go to previous page",
event = "GotoViewRel", args = -1,
}
self.key_events.GotoNextPos = {
{ {"Down" } }, doc = "go to next position",
event = "GotoPosRel", args = 1,
}
self.key_events.GotoPrevPos = {
{ { "Up" } }, doc = "go to previous position",
event = "GotoPosRel", args = -1,
}
end
if Device:hasKeyboard() then
self.key_events.GotoFirst = {
@ -396,8 +405,13 @@ function ReaderPaging:onPan(_, ges)
if self.ui.gesture and self.ui.gesture.multiswipes_enabled then
relative_type = "relative_delayed"
end
self:onPanningRel(self.last_pan_relative_y - ges[relative_type].y)
self.last_pan_relative_y = ges[relative_type].y
-- this is only used when mouse wheel is used
if ges.mousewheel_direction and not self.view.page_scroll then
self:onGotoViewRel(-1 * ges.mousewheel_direction)
else
self:onPanningRel(self.last_pan_relative_y - ges[relative_type].y)
self.last_pan_relative_y = ges[relative_type].y
end
end
return true
end
@ -455,6 +469,16 @@ function ReaderPaging:onGotoViewRel(diff)
return true
end
function ReaderPaging:onGotoPosRel(diff)
if self.view.page_scroll then
self:onPanningRel(100*diff)
else
self:onGotoPageRel(diff)
end
self:setPagePosition(self:getTopPage(), self:getTopPosition())
return true
end
function ReaderPaging:onPanningRel(diff)
if self.view.page_scroll then
self:onScrollPanRel(diff)

@ -8,7 +8,6 @@ local ReaderPanning = require("apps/reader/modules/readerpanning")
local UIManager = require("ui/uimanager")
local logger = require("logger")
local _ = require("gettext")
local Input = Device.input
local Screen = Device.screen
local T = require("ffi/util").template
@ -57,12 +56,12 @@ function ReaderRolling:init()
self.key_events = {}
if Device:hasKeys() then
self.key_events.GotoNextView = {
{ Input.group.PgFwd },
{ {"RPgFwd", "LPgFwd", "Right" } },
doc = "go to next view",
event = "GotoViewRel", args = 1,
}
self.key_events.GotoPrevView = {
{ Input.group.PgBack },
{ { "RPgBack", "LPgBack", "Left" } },
doc = "go to previous view",
event = "GotoViewRel", args = -1,
}
@ -446,6 +445,9 @@ function ReaderRolling:onPan(_, ges)
elseif ges.direction == "south" then
self:_gotoPos(self.current_pos - ges[distance_type])
end
--this is only use when mouse wheel is used
elseif ges.mousewheel_direction and self.view.view_mode == "page" then
UIManager:broadcastEvent(Event:new("GotoViewRel", -1 * ges.mousewheel_direction))
end
return true
end
@ -629,8 +631,11 @@ function ReaderRolling:onGotoViewRel(diff)
end
function ReaderRolling:onPanning(args, _)
if self.view.view_mode ~= "scroll" then return end
local _, dy = unpack(args)
if self.view.view_mode ~= "scroll" then
UIManager:broadcastEvent(Event:new("GotoViewRel", dy))
return
end
self:_gotoPos(self.current_pos + dy * self.panning_steps.normal)
self.xpointer = self.ui.document:getXPointer()
return true

@ -118,6 +118,7 @@ function Device:init()
},
pos = pos,
time = timev,
mousewheel_direction = scrolled_y,
}
local fake_ges_release = {
ges = "pan_release",
@ -130,7 +131,6 @@ function Device:init()
}
local fake_pan_ev = Event:new("Pan", nil, fake_ges)
local fake_release_ev = Event:new("Gesture", fake_ges_release)
if scrolled_y == down then
fake_ges.direction = "north"
UIManager:broadcastEvent(fake_pan_ev)

Loading…
Cancel
Save