Merge pull request #785 from chrox/flip_fix

bugfix: detect pan release to update flipping page
pull/2/merge
{Qingping,Dave} Hou 11 years ago
commit 6ab24329c8

@ -368,7 +368,19 @@ function GestureDetector:panState(tev)
time = tev.timev,
}
end
DEBUG("pan release detected in slot", slot)
local release_pos = Geom:new{
x = self.last_tevs[slot].x,
y = self.last_tevs[slot].y,
w = 0, h = 0,
}
local pan_release = {
ges = "pan_release",
pos = release_pos,
time = tev.timev,
}
self:clearState(slot)
return pan_release
else
if self.states[slot] ~= self.panState then
self.states[slot] = self.panState
@ -443,7 +455,7 @@ function GestureDetector:adjustGesCoordinate(ges)
if ges.pos then
ges.pos.x, ges.pos.y = (Screen.width - ges.pos.y), (ges.pos.x)
end
if ges.ges == "swipe" then
if ges.ges == "swipe" or ges.ges == "pan" then
if ges.direction == "down" then
ges.direction = "left"
elseif ges.direction == "up" then

@ -100,6 +100,16 @@ function ReaderPaging:initGesListener()
rate = 4.0,
}
},
PanRelease = {
GestureRange:new{
ges = "pan_release",
range = Geom:new{
x = 0, y = 0,
w = Screen:getWidth(),
h = Screen:getHeight(),
},
}
},
}
end
@ -128,45 +138,68 @@ end
function ReaderPaging:onToggleFlipping()
self.view.flipping_visible = not self.view.flipping_visible
self.flipping_page = self.view.flipping_visible and self.current_page or nil
self.flipping_mode = self.view.flipping_visible
self.flipping_page = self.current_page
if self.flipping_mode then
self:updateOriginalPage(self.current_page)
end
UIManager:setDirty(self.view.dialog, "partial")
end
function ReaderPaging:updateOriginalPage(page)
self.original_page = page
end
function ReaderPaging:updateFlippingPage(page)
self.flipping_page = page
end
function ReaderPaging:flipping(flipping_page, flipping_ges)
local read = flipping_page - 1
local unread = self.number_of_pages - flipping_page
local whole = self.number_of_pages
local rel_proportion = flipping_ges.distance / Screen:getWidth()
local abs_proportion = flipping_ges.distance / Screen:getHeight()
if flipping_ges.direction == "right" then
self:gotoPage(flipping_page - math.floor(read*rel_proportion))
elseif flipping_ges.direction == "left" then
self:gotoPage(flipping_page + math.floor(unread*rel_proportion))
elseif flipping_ges.direction == "down" then
self:gotoPage(flipping_page - math.floor(whole*abs_proportion))
elseif flipping_ges.direction == "up" then
self:gotoPage(flipping_page + math.floor(whole*abs_proportion))
end
UIManager:setDirty(self.view.dialog, "partial")
end
function ReaderPaging:onSwipe(arg, ges)
if self.flipping_page == nil then
if ges.direction == "left" or ges.direction == "up" then
self:onPagingRel(1)
elseif ges.direction == "right" or ges.direction == "down" then
self:onPagingRel(-1)
end
elseif self.flipping_page then
self:gotoPage(self.flipping_page)
if self.flipping_mode then
self:flipping(self.flipping_page, ges)
self:updateFlippingPage(self.current_page)
elseif self.original_page then
self:gotoPage(self.original_page)
self:updateOriginalPage(nil)
elseif ges.direction == "left" or ges.direction == "up" then
self:onPagingRel(1)
elseif ges.direction == "right" or ges.direction == "down" then
self:onPagingRel(-1)
end
return true
end
function ReaderPaging:onPan(arg, ges)
if self.flipping_page then
local read = self.flipping_page - 1
local unread = self.number_of_pages - self.flipping_page
local whole = self.number_of_pages
local rel_proportion = ges.distance / Screen:getWidth()
local abs_proportion = ges.distance / Screen:getHeight()
if ges.direction == "right" then
self:gotoPage(self.flipping_page - math.floor(read*rel_proportion))
elseif ges.direction == "left" then
self:gotoPage(self.flipping_page + math.floor(unread*rel_proportion))
elseif ges.direction == "down" then
self:gotoPage(self.flipping_page - math.floor(whole*abs_proportion))
elseif ges.direction == "up" then
self:gotoPage(self.flipping_page + math.floor(whole*abs_proportion))
end
UIManager:setDirty(self.view.dialog, "partial")
if self.flipping_mode then
self:flipping(self.flipping_page, ges)
end
return true
end
function ReaderPaging:onPanRelease(arg, ges)
if self.flipping_mode then
self:updateFlippingPage(self.current_page)
end
end
function ReaderPaging:onZoomModeUpdate(new_mode)
-- we need to remember zoom mode to handle page turn event
self.zoom_mode = new_mode

Loading…
Cancel
Save