enable scroll using pan gesture in readerrolling

pull/79/head
Qingping Hou 11 years ago
parent 1783b16d69
commit 0660ae379b

@ -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))

Loading…
Cancel
Save