add page status to readerrolling for better page view_mode support

* now when rendering in page view mode, we only keep track of page
number instead of pos inside document. Because using pos inside
document for page view mode is really a bad idea and will lead to
many unsovlabe bugs...
This commit is contained in:
Qingping Hou
2012-12-22 13:27:46 +08:00
parent 5ab98420bd
commit 93abd2fee7
5 changed files with 122 additions and 35 deletions

View File

@@ -10,7 +10,6 @@ CreDocument = Document:new{
line_space_percent = 100,
default_font = "Droid Sans Fallback",
view_mode = "page",
}
-- NuPogodi, 20.05.12: inspect the zipfile content
@@ -73,13 +72,10 @@ function CreDocument:init()
end
local style_sheet = "./data/"..file_type..".css"
-- view_mode default to page mode
local view_mode = self.PAGE_VIEW_MODE
if self.view_mode == "scroll" then
view_mode = self.SCROLL_VIEW_MODE
end
-- @TODO check the default view_mode to a global user configurable
-- variable 22.12 2012 (houqp)
ok, self._document = pcall(cre.openDocument, self.file, style_sheet,
Screen:getWidth(), Screen:getHeight(), view_mode)
Screen:getWidth(), Screen:getHeight(), self.PAGE_VIEW_MODE)
if not ok then
self.error_message = self.doc -- will contain error message
return
@@ -92,6 +88,22 @@ function CreDocument:init()
--self._document:setDefaultInterlineSpace(self.line_space_percent)
end
function CreDocument:drawCurrentView(target, x, y, rect, pos)
tile_bb = Blitbuffer.new(rect.w, rect.h)
self._document:drawCurrentPage(tile_bb)
target:blitFrom(tile_bb, x, y, 0, 0, rect.w, rect.h)
end
function CreDocument:drawCurrentViewByPos(target, x, y, rect, pos)
self._document:gotoPos(pos)
self:drawCurrentView(target, x, y, rect)
end
function CreDocument:drawCurrentViewByPage(target, x, y, rect, page)
self._document:gotoPage(page)
self:drawCurrentView(target, x, y, rect)
end
function CreDocument:hintPage(pageno, zoom, rotation)
end
@@ -101,10 +113,42 @@ end
function CreDocument:renderPage(pageno, rect, zoom, rotation)
end
function CreDocument:gotoXPointer(xpointer)
self._document:gotoXPointer(xpointer)
end
function CreDocument:getXPointer()
return self._document:getXPointer()
end
function CreDocument:getPosFromXPointer(xp)
return self._document:getPosFromXPointer(xp)
end
function CreDocument:getPageFromXPointer(xp)
return self._document:getPageFromXPointer(xp)
end
function CreDocument:getFontFace()
return self._document:getFontFace()
end
function CreDocument:getCurrentPos()
return self._document:getCurrentPos()
end
function Document:gotoPos(pos)
self._document:gotoPos(pos)
end
function CreDocument:gotoPage(page)
self._document:gotoPage(page)
end
function CreDocument:getCurrentPage()
return self._document:getCurrentPage()
end
function CreDocument:setFontFace(new_font_face)
if new_font_face then
self._document:setFontFace(new_font_face)