mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
enable scroll using pan gesture in readerrolling
This commit is contained in:
@@ -3,7 +3,6 @@ require "ui/reader/readerpanning"
|
||||
ReaderRolling = InputContainer:new{
|
||||
old_doc_height = nil,
|
||||
old_page = nil,
|
||||
view_mode = "page",
|
||||
current_pos = 0,
|
||||
-- only used for page view mode
|
||||
current_page= nil,
|
||||
@@ -59,9 +58,11 @@ function ReaderRolling:init()
|
||||
}
|
||||
end
|
||||
|
||||
self.doc_height = self.ui.document.info.doc_height
|
||||
self.old_doc_height = self.doc_height
|
||||
self.old_page = self.ui.document.info.number_of_pages
|
||||
table.insert(self.ui.postInitCallback, function()
|
||||
self.doc_height = self.ui.document.info.doc_height
|
||||
self.old_doc_height = self.doc_height
|
||||
self.old_page = self.ui.document.info.number_of_pages
|
||||
end)
|
||||
end
|
||||
|
||||
-- This method will be called in onSetDimensions handler
|
||||
@@ -99,6 +100,17 @@ function ReaderRolling:initGesListener()
|
||||
}
|
||||
}
|
||||
},
|
||||
Pan = {
|
||||
GestureRange:new{
|
||||
ges = "pan",
|
||||
range = Geom:new{
|
||||
x = 0, y = 0,
|
||||
w = Screen:getWidth(),
|
||||
h = Screen:getHeight(),
|
||||
},
|
||||
rate = 4.0,
|
||||
}
|
||||
},
|
||||
}
|
||||
end
|
||||
|
||||
@@ -128,7 +140,7 @@ function ReaderRolling:onReadSettings(config)
|
||||
end)
|
||||
end
|
||||
end
|
||||
if self.view_mode == "page" then
|
||||
if self.view.view_mode == "page" then
|
||||
self.ui:handleEvent(Event:new("PageUpdate", self.ui.document:getCurrentPage()))
|
||||
end
|
||||
end
|
||||
@@ -141,11 +153,12 @@ function ReaderRolling:onCloseDocument()
|
||||
end
|
||||
|
||||
function ReaderRolling:getLastPercent()
|
||||
if self.view_mode == "page" then
|
||||
if self.view.view_mode == "page" then
|
||||
return self.current_page / self.old_page
|
||||
else
|
||||
-- FIXME: the calculated percent is not accurate in "scroll" mode.
|
||||
return self.ui.document:getPosFromXPointer(self.ui.document:getXPointer()) / self.doc_height
|
||||
return self.ui.document:getPosFromXPointer(
|
||||
self.ui.document:getXPointer()) / self.doc_height
|
||||
end
|
||||
end
|
||||
|
||||
@@ -168,6 +181,17 @@ function ReaderRolling:onSwipe(arg, ges)
|
||||
return true
|
||||
end
|
||||
|
||||
function ReaderRolling:onPan(arg, ges)
|
||||
if self.view.view_mode == "scroll" then
|
||||
if ges.direction == "north" then
|
||||
self:gotoPos(self.current_pos + ges.distance)
|
||||
elseif ges.direction == "south" then
|
||||
self:gotoPos(self.current_pos - ges.distance)
|
||||
end
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
function ReaderRolling:onPosUpdate(new_pos)
|
||||
self.current_pos = new_pos
|
||||
end
|
||||
@@ -183,8 +207,8 @@ function ReaderRolling:onGotoPercent(percent)
|
||||
end
|
||||
|
||||
function ReaderRolling:onGotoViewRel(diff)
|
||||
DEBUG("goto relative screen:", diff)
|
||||
if self.view_mode ~= "page" then
|
||||
DEBUG("goto relative screen:", diff, ", in mode: ", self.view.view_mode)
|
||||
if self.view.view_mode == "scroll" then
|
||||
local pan_diff = diff * self.ui.dimen.h
|
||||
if self.show_overlap_enable then
|
||||
if pan_diff > self.overlap then
|
||||
@@ -194,7 +218,7 @@ function ReaderRolling:onGotoViewRel(diff)
|
||||
end
|
||||
end
|
||||
self:gotoPos(self.current_pos + pan_diff)
|
||||
else
|
||||
elseif self.view.view_mode == "page" then
|
||||
self:gotoPage(self.current_page + diff)
|
||||
end
|
||||
return true
|
||||
@@ -232,12 +256,8 @@ function ReaderRolling:onUpdatePos()
|
||||
return true
|
||||
end
|
||||
|
||||
function ReaderRolling:onSetViewMode(new_mode)
|
||||
self.ui.view_mode = new_mode
|
||||
end
|
||||
|
||||
function ReaderRolling:onRedrawCurrentView()
|
||||
if self.view_mode == "page" then
|
||||
if self.view.view_mode == "page" then
|
||||
self.ui:handleEvent(Event:new("PageUpdate", self.current_page))
|
||||
else
|
||||
self.ui:handleEvent(Event:new("PosUpdate", self.current_pos))
|
||||
@@ -260,7 +280,7 @@ function ReaderRolling:gotoPos(new_pos)
|
||||
if new_pos < 0 then new_pos = 0 end
|
||||
if new_pos > self.doc_height then new_pos = self.doc_height end
|
||||
-- adjust dim_area according to new_pos
|
||||
if self.view_mode ~= "page" and self.show_overlap_enable then
|
||||
if self.view.view_mode ~= "page" and self.show_overlap_enable then
|
||||
local panned_step = new_pos - self.current_pos
|
||||
self.view.dim_area.x = 0
|
||||
self.view.dim_area.h = self.ui.dimen.h - math.abs(panned_step)
|
||||
@@ -280,7 +300,7 @@ function ReaderRolling:gotoPage(new_page)
|
||||
end
|
||||
|
||||
function ReaderRolling:gotoXPointer(xpointer)
|
||||
if self.view_mode == "page" then
|
||||
if self.view.view_mode == "page" then
|
||||
self:gotoPage(self.ui.document:getPageFromXPointer(xpointer))
|
||||
else
|
||||
self:gotoPos(self.ui.document:getPosFromXPointer(xpointer))
|
||||
|
||||
Reference in New Issue
Block a user