From 5de2fb1a5384c50fcd82b5e2b34ee6ccd2bf65e3 Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Wed, 7 Mar 2012 00:26:56 +0100 Subject: [PATCH 1/7] implement separate odd/even bboxes --- unireader.lua | 37 ++++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) 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 From f62a12a6297a9bc298fef10efd262b9098e31acc Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Wed, 7 Mar 2012 18:48:45 +0100 Subject: [PATCH 2/7] more debugging output for secting bboxes --- unireader.lua | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/unireader.lua b/unireader.lua index 70532a689..b0ee0ef1d 100644 --- a/unireader.lua +++ b/unireader.lua @@ -198,13 +198,22 @@ function UniReader:setzoom(page) if self.bbox then print("# ORIGINAL page::getUsedBBox "..x0.."*"..y0.." "..x1.."*"..y1); local bbox = self.bbox[self.pageno] -- exact - if bbox == nil then - bbox = self.bbox[self:odd_even(self.pageno)] -- odd/even + + local odd_even = self:odd_even(self.pageno) + if bbox ~= nil then + print("## bbox from "..self.pageno) + else + bbox = self.bbox[odd_even] -- odd/even end - if bbox == nil then -- last used up to this page + if bbox ~= nil then -- last used up to this page + print("## bbox from "..odd_even) + else for i = 0,self.pageno do bbox = self.bbox[ self.pageno - i ] - if bbox ~= nil then break end + if bbox ~= nil then + print("## bbox from "..self.pageno - i) + break + end end end if bbox ~= nil then From fdca464b96a00c3ad5593a277c2b311a37f17ee5 Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Thu, 8 Mar 2012 00:11:30 +0100 Subject: [PATCH 3/7] don't pre-cache next page if we are going to modify bbox --- unireader.lua | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/unireader.lua b/unireader.lua index b0ee0ef1d..94cb1d3e9 100644 --- a/unireader.lua +++ b/unireader.lua @@ -406,8 +406,10 @@ function UniReader:goto(no) if no < self.doc:getPages() then if self.globalzoommode ~= self.ZOOM_BY_VALUE then - -- pre-cache next page - self:draworcache(no+1,self.globalzoommode,self.offset_x,self.offset_y,width,height,self.globalgamma,self.globalrotate) + if #self.bbox == 0 then + -- pre-cache next page, but if we will modify bbox don't! + self:draworcache(no+1,self.globalzoommode,self.offset_x,self.offset_y,width,height,self.globalgamma,self.globalrotate) + end else self:draworcache(no,self.globalzoom,self.offset_x,self.offset_y,width,height,self.globalgamma,self.globalrotate) end From 9575d23f63ddd9303fa03b0874e2adc3024a4cb2 Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Thu, 8 Mar 2012 00:18:58 +0100 Subject: [PATCH 4/7] save bbox layout inspired by f79ae48de8deaeca7d4dc101b040c2cb3a1c3770 --- unireader.lua | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/unireader.lua b/unireader.lua index 5f9402301..70dffbb04 100644 --- a/unireader.lua +++ b/unireader.lua @@ -125,6 +125,10 @@ function UniReader:initGlobalSettings(settings) if pan_overlap_vertical then self.pan_overlap_vertical = pan_overlap_vertical end + local bbox = settings:readsetting("bbox") + if bbox then + self.bbox = bbox + end end -- guarantee that we have enough memory in cache @@ -820,6 +824,8 @@ function UniReader:inputloop() self.settings:savesetting("last_page", self.pageno) self.settings:savesetting("gamma", self.globalgamma) self.settings:savesetting("jumpstack", self.jump_stack) + --self.settings:savesetting("pan_overlap_vertical", self.pan_overlap_vertical) + self.settings:savesetting("bbox", self.bbox) self.settings:close() end From c2f2e617ad2dc519d028522e785c14ea171f7730 Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Thu, 8 Mar 2012 00:38:34 +0100 Subject: [PATCH 5/7] correct bbox loading and Shift+Z removes page bbox this moves #35 a *little* bit closer to release ;-) --- unireader.lua | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/unireader.lua b/unireader.lua index 70dffbb04..82223766e 100644 --- a/unireader.lua +++ b/unireader.lua @@ -115,6 +115,10 @@ function UniReader:loadSettings(filename) local jumpstack = self.settings:readsetting("jumpstack") self.jump_stack = jumpstack or {} + local bbox = self.settings:readsetting("bbox") + print("# bbox loaded "..dump(bbox)) + self.bbox = bbox + return true end return false @@ -125,10 +129,6 @@ function UniReader:initGlobalSettings(settings) if pan_overlap_vertical then self.pan_overlap_vertical = pan_overlap_vertical end - local bbox = settings:readsetting("bbox") - if bbox then - self.bbox = bbox - end end -- guarantee that we have enough memory in cache @@ -607,7 +607,6 @@ 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) @@ -695,7 +694,7 @@ function UniReader:inputloop() keep_running = false end break - elseif ev.code == KEY_Z then + elseif ev.code == KEY_Z and not Keys.shiftmode then local bbox = {} bbox["x0"] = - self.offset_x / self.globalzoom bbox["y0"] = - self.offset_y / self.globalzoom @@ -705,6 +704,9 @@ function UniReader:inputloop() self.bbox[self:odd_even(self.pageno)] = bbox print("# bbox " .. self.pageno .. dump(self.bbox)) self.globalzoommode = self.ZOOM_FIT_TO_CONTENT -- use bbox + elseif ev.code == KEY_Z and Keys.shiftmode then + self.bbox[self.pageno] = nil; + print("# bbox remove "..self.pageno .. dump(self.bbox)); end -- switch to ZOOM_BY_VALUE to enable panning on fiveway move From 4d7fa2d12f1183a294681a94348042e047160fd4 Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Thu, 8 Mar 2012 00:55:12 +0100 Subject: [PATCH 6/7] Alt+Z to toggle bbox cropping --- unireader.lua | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/unireader.lua b/unireader.lua index 82223766e..664e18165 100644 --- a/unireader.lua +++ b/unireader.lua @@ -209,7 +209,7 @@ function UniReader:setzoom(page) if y0 < 0 then y0 = 0 end if y1 > pheight then y1 = pheight end - if self.bbox then + if self.bbox.enabled then print("# ORIGINAL page::getUsedBBox "..x0.."*"..y0.." "..x1.."*"..y1); local bbox = self.bbox[self.pageno] -- exact @@ -433,7 +433,7 @@ function UniReader:goto(no) if no < self.doc:getPages() then if self.globalzoommode ~= self.ZOOM_BY_VALUE then - if #self.bbox == 0 then + if #self.bbox == 0 or not self.bbox.enabled then -- pre-cache next page, but if we will modify bbox don't! self:draworcache(no+1,self.globalzoommode,self.offset_x,self.offset_y,width,height,self.globalgamma,self.globalrotate) end @@ -702,11 +702,15 @@ function UniReader:inputloop() bbox["y1"] = bbox["y0"] + height / self.globalzoom self.bbox[self.pageno] = bbox self.bbox[self:odd_even(self.pageno)] = bbox + self.bbox.enabled = true print("# bbox " .. self.pageno .. dump(self.bbox)) self.globalzoommode = self.ZOOM_FIT_TO_CONTENT -- use bbox elseif ev.code == KEY_Z and Keys.shiftmode then self.bbox[self.pageno] = nil; print("# bbox remove "..self.pageno .. dump(self.bbox)); + elseif ev.code == KEY_Z and Keys.altmode then + self.bbox.enabled = not self.bbox.enabled; + print("# bbox override "..self.bbox.enabled); end -- switch to ZOOM_BY_VALUE to enable panning on fiveway move From 4bc0bca413d35693b011babe988b5ca26a38adeb Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Thu, 8 Mar 2012 01:29:17 +0100 Subject: [PATCH 7/7] store globalzoom and globalzoommode settings --- unireader.lua | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/unireader.lua b/unireader.lua index 664e18165..e1296ad20 100644 --- a/unireader.lua +++ b/unireader.lua @@ -119,6 +119,9 @@ function UniReader:loadSettings(filename) print("# bbox loaded "..dump(bbox)) self.bbox = bbox + self.globalzoom = self.settings:readsetting("globalzoom") or 1.0 + self.globalzoommode = self.settings:readsetting("globalzoommode") or -1 + return true end return false @@ -700,6 +703,8 @@ function UniReader:inputloop() bbox["y0"] = - self.offset_y / self.globalzoom bbox["x1"] = bbox["x0"] + width / self.globalzoom bbox["y1"] = bbox["y0"] + height / self.globalzoom + bbox.pan_x = self.pan_x + bbox.pan_y = self.pan_y self.bbox[self.pageno] = bbox self.bbox[self:odd_even(self.pageno)] = bbox self.bbox.enabled = true @@ -832,6 +837,8 @@ function UniReader:inputloop() self.settings:savesetting("jumpstack", self.jump_stack) --self.settings:savesetting("pan_overlap_vertical", self.pan_overlap_vertical) self.settings:savesetting("bbox", self.bbox) + self.settings:savesetting("globalzoom", self.globalzoom) + self.settings:savesetting("globalzoommode", self.globalzoommode) self.settings:close() end