diff --git a/unireader.lua b/unireader.lua index bd050d118..a9fc6347c 100644 --- a/unireader.lua +++ b/unireader.lua @@ -67,7 +67,7 @@ UniReader = { jump_stack = {}, toc = nil, - bbox = nil, -- override getUsedBBox + bbox = {}, -- override getUsedBBox } function UniReader:new(o) @@ -197,10 +197,22 @@ function UniReader:setzoom(page) if self.bbox then print("# ORIGINAL page::getUsedBBox "..x0.."*"..y0.." "..x1.."*"..y1); - x0 = self.bbox["x0"] - y0 = self.bbox["y0"] - x1 = self.bbox["x1"] - y1 = self.bbox["y1"] + local bbox = self.bbox[self.pageno] -- exact + if bbox == nil then + bbox = self.bbox[self:odd_even(self.pageno)] -- odd/even + end + if bbox == nil then -- last used up to this page + for i = 0,self.pageno do + bbox = self.bbox[ self.pageno - i ] + if bbox ~= nil then break end + end + end + if bbox ~= nil then + x0 = bbox["x0"] + y0 = bbox["y0"] + x1 = bbox["x1"] + y1 = bbox["y1"] + end end print("# page::getUsedBBox "..x0.."*"..y0.." "..x1.."*"..y1); @@ -494,10 +506,19 @@ function UniReader:showJumpStack() end end +function UniReader:odd_even(number) + print("## odd_even "..number) + if number % 2 == 1 then + return "odd" + else + return "even" + end +end -- wait for input and handle it function UniReader:inputloop() local keep_running = true + self.bbox = {} while 1 do local ev = input.waitForEvent() ev.code = adjustKeyEvents(ev) @@ -589,8 +610,10 @@ function UniReader:inputloop() bbox["y0"] = - self.offset_y / self.globalzoom bbox["x1"] = bbox["x0"] + width / self.globalzoom bbox["y1"] = bbox["y0"] + height / self.globalzoom - self.bbox = bbox - print("# bbox " .. dump(self.bbox)) + self.bbox[self.pageno] = bbox + self.bbox[self:odd_even(self.pageno)] = bbox + print("# bbox " .. self.pageno .. dump(self.bbox)) + self.globalzoommode = self.ZOOM_FIT_TO_CONTENT -- use bbox end -- switch to ZOOM_BY_VALUE to enable panning on fiveway move